使用Python请求库调用EIDR API批量获取电视节目信息遇阻求助
解决EIDR API批量查询电视节目信息的问题
我之前也折腾过EIDR的API,那文档确实够让人头疼的——尤其是刚接触的话。结合你的情况,我来一步步帮你搞定批量查询的问题,先从单个请求调通开始:
先搞懂EIDR API的核心要求
EIDR的API不像一些公开API那样随便调用,首先得确保你已经完成了注册并获取了API密钥(如果是需要认证的端点),另外它的请求格式有严格要求,光抓浏览器的请求头可能不够——浏览器里的请求可能附带了登录会话Cookie,而API调用得用官方规定的认证方式。
第一步:调通单个节目查询(以《Anderson Cooper 360》为例)
先把单个请求跑通,再扩展批量。这里用EIDR的Search API作为例子,你需要确保以下几点:
- 带上正确的
Authorization头(如果用API密钥,通常是ApiKey <你的密钥>,具体看EIDR给你的认证说明) - 使用正确的端点URL,比如EIDR的v2版本搜索端点是
https://eidr.org/api/v2/search - 参数要符合EIDR的枚举规范,比如指定媒体类型为
TV_PROGRAM
给你一个可直接参考的Python代码示例:
import requests # 替换成你的EIDR API密钥 EIDR_API_KEY = "your-api-key-here" BASE_URL = "https://eidr.org/api/v2/search" def search_eidr_program(title): headers = { "Authorization": f"ApiKey {EIDR_API_KEY}", "Content-Type": "application/json", "Accept": "application/json" } params = { "query": title, "mediaType": "TV_PROGRAM", "limit": 10 # 限制返回结果数量,按需调整 } try: response = requests.get(BASE_URL, headers=headers, params=params) # 先针对性排查常见错误状态码 if response.status_code == 401: print("认证失败!请检查API密钥是否正确") return None elif response.status_code == 400: print(f"无效请求,错误详情:{response.json()}") return None response.raise_for_status() # 抛出其他HTTP异常 return response.json() except requests.exceptions.RequestException as e: print(f"请求出错:{e}") return None # 测试单个节目查询 result = search_eidr_program("Anderson Cooper 360") if result: print("查询结果:") for item in result.get("results", []): print(f"标题: {item.get('title')}, EIDR ID: {item.get('eidrId')}")
第二步:扩展到批量查询
当单个请求没问题后,就可以把节目列表放进循环处理,注意EIDR的API有请求频率限制,别一下子发太多请求,最好加个延迟:
import time # 你的节目列表,可替换成自己的批量数据 program_titles = [ "Anderson Cooper 360", "The Daily Show", "CNN Tonight" ] for title in program_titles: print(f"正在查询:{title}") result = search_eidr_program(title) if result: # 这里可以添加结果处理逻辑,比如保存到CSV或数据库 pass time.sleep(1) # 每秒一个请求,避免触发限流机制
排查“无效请求”的常见原因
你之前遇到的问题,大概率是以下情况之一:
- 认证信息缺失/错误:EIDR的大部分端点都需要认证,浏览器请求依赖登录会话,而API调用必须用官方API密钥
- 参数格式错误:比如
mediaType参数用了非枚举值(必须是EIDR规定的TV_PROGRAM/MOVIE等),或者参数名拼写错误 - 请求头缺失必要字段:比如没设置
Accept或Content-Type为application/json,EIDR的API对格式要求很严 - 端点URL错误:比如用了旧版本的v1端点,或者拼写错误
小提示:利用测试工具验证
如果不确定请求格式是否正确,可以先用Postman或者curl手动测试单个请求,确认参数和头都正确后,再转成Python代码,这样能更快定位问题。
内容的提问来源于stack exchange,提问作者A-B
相关产品推荐
相关产品推荐

