如何通过Github API获取流行的Github仓库列表?

35
4个回答

39

GitHub似乎使用其API编写趋势页面,并不将其作为特定的API呈现回来。您需要使用存储库搜索API。我遵循了此页面上的示例,可以通过以下方式满足您的需求:

# We'll use the `date` command to get the date for "7 days ago"
$ date -v-7d '+%Y-%m-%d'
# => 2013-07-15

curl -G https://api.github.com/search/repositories --data-urlencode "sort=stars" --data-urlencode "order=desc" --data-urlencode "q=language:java"  --data-urlencode "q=created:>`date -v-7d '+%Y-%m-%d'`"

然后从那里开始。你还可以在OS X或其他平台上安装jq以获得更漂亮的输出,这会让你的生活变得更加轻松:

curl -G https://api.github.com/search/repositories --data-urlencode "sort=stars" --data-urlencode "order=desc" --data-urlencode "q=language:java"  --data-urlencode "q=created:>`date -v-7d '+%Y-%m-%d'`" | jq ".items[0,1,2] | {name, description, language, watchers_count, html_url}"
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- -- 77  161k   77  125k    0     0   131k      0  0:00:01 --:--:--  0100  161k  100  161k    0     0   163k      0 --:--:-- --:--:-- --:--:--  163k
{
  "name": "vibrant.js",
  "description": "Extract prominent colors from an image. JS port of Android's Palette.",
  "language": "JavaScript",
  "watchers_count": 1466,
  "html_url": "https://github.com/jariz/vibrant.js"
}
{
  "name": "JSPatch",
  "description": "JSPatch bridge Objective-C and JavaScript using the Objective-C runtime. You can call any Objective-C class and method in JavaScript by just including a small engine.",
  "language": "Objective-C",
  "watchers_count": 830,
  "html_url": "https://github.com/bang590/JSPatch"
}
{
  "name": "KRVideoPlayer",
  "description": "类似Weico的播放器,支持竖屏模式下全屏播放",
  "language": "Objective-C",
  "watchers_count": 524,
  "html_url": "https://github.com/36Kr-Mobile/KRVideoPlayer"
}

8
好的,如果我没理解错的话,带有参数“q=created:>`date” 的请求将返回7天前创建的存储库。我认为受欢迎的存储库是获得最多星标的存储库,而不论其创建日期。 - Lester
1
该参数与 --data-urlencode "sort=stars" --data-urlencode "order=desc" 结合使用,可以让你获取最受欢迎的存储库(上周内)。如果需要,你还可以将其过滤为不到一周的时间范围内。这是一个很好的开始! - mbb
18
不是这样的。你指出的同一个链接说这个代码是用来“查找最近一周内创建的最热门存储库”的。GitHub趋势页面展示的是在一定时间范围内点赞最多的内容。目前的API版本无法获取这些信息。我在其他地方看到的解决方案是解析趋势页面的HTML代码。 - Glauco Neves
我并不是想说你可以得到趋势,但你可以从请求的每一天收集信息。虽然从HTML页面抓取数据计算上更容易些。 - mbb

4

目前还没有 GitHub API 可以获取流行仓库的列表。唯一的方法是通过选择器从网页中爬取项目。您可以在 Chrome 中打开https://github.com/trending,并在开发者工具控制台中运行以下代码:

$$('ol.repo-list li h3').forEach(el => console.log(el.innerText));

这将输出流行存储库名称列表。要使它更加自动化,考虑使用Headless Chrome或其他类似的工具。
此外,已经有几个项目在不同的语言中解决了这个任务。例如:

2
似乎GitHub没有向公众提供官方API来实现这样的用例。但是,您可以使用其中一个项目轻松地实现这一点。您可以尝试GitHub上的github-trending-api项目,从而实现完全相同的效果。
$ch = curl_init();
$url = 'https://github-trending-api.now.sh/repositories?language=&since=daily'

curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = json_decode(curl_exec($ch));

这将为您获取今天在GitHub上热门的项目。祝好运。


1
现在是2020年,我正在尝试使用这个解决方案,但是出现了451错误。我需要帮助。 - Anjayluh

0

我正在尝试为上述用例制作一个Android应用程序,发现this API非常有用,并且可以使用languagesince作为可选参数来获取特定于语言的存储库和按天或按数字趋势。

https://github-trending-api.now.sh/repositories?since=daily

参考资料


这个 API 已经停止运行了。有一个替代方案出现了,可以在 https://github.com/alisoft/github-trending-api 找到,但需要注意的是,由于这些 API 是由开发者而不是组织支持的,它们随时可能停止运行。 - Matt Pengelly

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