如何用Python requests库筛选标题含指定字符串的GitHub Issue?
你调用的/repos/{owner}/{repo}/issues是单仓库Issue列表接口,本身不支持q参数做标题内容匹配,这是过滤规则不生效的核心原因。
方案1:使用GitHub搜索Issue接口(推荐)
/search/issues接口原生支持按q语法做标题匹配,不需要手动处理数据,修改代码如下:
def search_issue(): # 改用搜索专用端点 url = "https://api.github.com/search/issues" session = create_session() # q参数把所有过滤规则整合,带空格的关键词用双引号包裹保证精准匹配 query = f'"has issues" in:title repo:{REPO_OWNER}/{REPO_NAME} is:open is:issue' params = { 'q': query, 'sort': 'created', 'direction': 'desc' } r = session.get(url, params=params) # 搜索接口返回的items字段为匹配到的Issue列表 pprint(r.json()['items'])
方案2:保留原接口+本地过滤
如果你的仓库Issue数量较少,也可以拿到全量符合状态要求的Issue后本地过滤,代码如下:
def search_issue(): url = f"https://api.github.com/repos/{REPO_OWNER}/{REPO_NAME}/issues" session = create_session() params = { 'state': 'open', 'sort': 'created', 'direction': 'desc', 'per_page': 100 # 单页最多返回100条,减少请求次数 } r = session.get(url, params=params) all_issues = r.json() # 本地过滤标题包含指定字符串的Issue filtered_issues = [issue for issue in all_issues if "has issues" in issue['title']] pprint(filtered_issues)
避坑提示
- requests会自动对params中的特殊字符做URL编码,不需要手动把空格替换为
+,手动转换反而可能导致匹配规则失效 - 带空格的搜索关键词必须用双引号包裹,否则GitHub会拆分关键词做模糊匹配,无法命中完整的
has issues字符串 - 若Issue总数量超过100,方案2需要自行处理分页逻辑拉取全量数据
内容的提问来源于stack exchange,提问作者Avani Goel
相关产品推荐
相关产品推荐

