You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 02:27:03