如何在GitHub已标星仓库中搜索带指定标签的Issue?
解决方案:从标星GitHub仓库筛选特定标签Issue
GitHub官方的标准搜索限定符和REST API目前没有直接支持“仅搜索已标星仓库内Issue”的单个查询方式,也就是不存在你假设的refer:starred-repo这类限定符。不过有两种更高效的替代方案,比逐个请求仓库Issue要靠谱得多:
1. 批量构造仓库查询条件,用单次搜索API请求
先调用GET /users/{username}/starred获取所有已标星仓库的完整路径(格式为用户名/仓库名),然后把这些路径拼接成多个repo:限定符的组合,比如:
q=label:help-wanted+state:open+type:issue+repo:user1/repo1+repo:user2/repo2+repo:user3/repo3
再把这个查询串传入搜索Issue的API:GET /search/issues?q=xxx。
这种方式只需要2次请求(一次拿标星仓库列表,一次批量搜索),比几百次请求效率高很多。需要注意:
- GitHub搜索API的查询字符串有长度限制,如果标星仓库数量极多(比如上千个),可能需要拆分几次搜索请求
- 要遵守GitHub的API速率限制,避免触发限流
2. 使用GitHub GraphQL API一次请求完成查询
GraphQL支持嵌套查询,可以在一个请求里同时获取已标星仓库和对应仓库内符合条件的Issue,不用分多次请求。示例查询如下:
query GetStarredReposHelpWantedIssues { viewer { starredRepos(first: 100) { nodes { nameWithOwner issues(first: 10, states: OPEN, labels: ["help-wanted"]) { nodes { title number url } } } pageInfo { endCursor hasNextPage } } } }
如果你的标星仓库超过100个,可以通过pageInfo里的endCursor进行分页查询,每次请求获取100个仓库,但总请求次数依然远少于逐个查询仓库的方式。
内容的提问来源于stack exchange,提问作者Paul Serikov
相关产品推荐
相关产品推荐

