如何使用GitHub的REST API列出给定主题的所有存储库?

5
我想更新一个README.md文件,列出一个主题的所有存储库。 在使用脚本自动写入和更新之前, 我想获取给定主题的所有包含存储库URL的字符串。我将保存每次执行脚本的日期。 我找到了一种方法可以获取一个存储库的所有主题,但不能获取一个主题的所有存储库:https://developer.github.com/v3/repos/#list-all-topics-for-a-repository(API V3中)。
此外,似乎存在"相关主题"或类似主题,具有同义词或不同的拼写错误。
例如: https://github.com/search?q=abap&type=Topics 我该如何获取给定主题(及其相关主题)的所有存储库URL,以便更新readme.me文件并(为了识别新的存储库)?
2个回答

3
这里有两种方法可以实现这个目标:
1. CURL:
curl -H "Accept: application/vnd.github.mercy-preview+json" 'https://api.github.com/search/repositories?q=topic:XYZ'

显然,如果你的仓库是私有的,你可以使用-u来添加你的令牌或GitHub用户名和密码。
2. Python:
有一个库叫做PyGithub,它基本上使用了大部分GitHub开发者API,并将其转换为Python函数。 PyGithub 这里有一些代码供你参考:
from github import Github

g = Github("YOUR_GITHUB_TOKEN")

TOPIC = 'php'
ORGANIZATION = 'your_github_org_name'

repos = g.search_repositories(query=f'topic:{TOPIC} org:{ORGANIZATION}')
for repo in repos:
    print(repo)

我写了一个相当长的函数,它还做了很多其他检查,但这是最基本的一个,可以得到你想要的结果(显然,你可以缩短返回的仓库名称等等)

希望这对你有所帮助。祝好。


程序无法运行 - 没有结果被打印出来(此外,导入需要是 from github import Github。curl 方法是正确的,但是转义会导致错误返回 - 如果使用单引号并删除反斜杠,则可以正常工作。 - Marcus
如果我想按多个主题进行过滤怎么办?我没有找到相关信息。 - Alex Alan Nunes

0
首先,我已经找到了 pagination 的帮助,以便爬取多个页面。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接