Github Search API查询PR按创建日期筛选无返回,同逻辑查询Issue正常
问题排查与解决方案
核心结论
这不是GitHub对非企业用户的限制,普通用户完全支持按内容、日期范围搜索Pull Request。GitHub的Issues搜索接口本身就同时覆盖Issue和PR两类数据,添加is:pr筛选是官方推荐的标准用法,没有用户类型的限制。
无返回结果的常见原因
- 查询参数拼接错误:你在q参数里手动用
+拼接多个筛选条件,但是requests库的params参数会自动对特殊字符做URL编码,手动添加的+会被编码为%2B,最终变成搜索关键词的一部分,而不是筛选条件的分隔符,导致查询逻辑完全不符合预期,自然返回空结果。 - 请求协议问题:你使用的是HTTP协议调用接口,GitHub API已强制要求HTTPS访问,HTTP请求会触发301跳转,部分请求库不会自动处理跳转逻辑,导致无法拿到正确返回结果。
- 未检查API返回的错误信息:你当前直接解析返回内容,没有判断接口返回的状态码,也没有检查返回结果里的
message、errors字段,如果查询语法错误、token权限不足、触发限流,API都会返回对应的提示信息,不会直接抛出请求错误。 - 触发API限流:GitHub搜索接口对认证用户的限流是每小时30次,未认证用户是每小时10次,触发限流时会返回403状态码,可在返回内容里看到明确的限流提示。
- 搜索条件本身无匹配结果:你可以先在GitHub网页端的搜索框输入相同的筛选条件(比如
你的关键词 is:pr created:>2023-01-01),确认是否真的存在匹配的PR,排除本身无结果的情况。
修正方案
1. 调整后的可运行代码
def search_prs(search_str, date_str, page_num): req = requests.get('https://api.github.com/search/issues', params={ 'q': f'{search_str} is:pr created:>{date_str}', 'per_page': 100, 'page': page_num, 'sort': 'created', 'order': 'asc' }, headers={ 'Authorization': 'token ' + ACCESS_TOKEN, 'Accept': 'application/vnd.github.cloak-preview' }, timeout=10) # 新增错误校验,方便快速定位问题 if req.status_code != 200: print(f"请求错误,状态码:{req.status_code},返回内容:{req.text}") return req.json()
2. 排查步骤
调用接口后先打印返回结果的total_count字段:
- 如果值为0,说明没有匹配当前搜索条件的PR,调整搜索关键词或日期范围即可
- 如果值大于0但你拿不到数据,检查后续的结果解析逻辑即可
- 如果返回结果包含
errors字段,按照提示修正查询语法即可
内容的提问来源于stack exchange,提问作者BachBurm
相关产品推荐
相关产品推荐

