您可以使用以下请求列出 github 中的所有存储库:
https://api.github.com/repositories?since=0
它将返回 id>0 的前“n”个存储库作为 JSON 数组。
您应该处理这个“n”,存储“id”。当您到达“页面”的末尾时,您只需再次使用 since=lastId:
例如:
https://api.github.com/repositories?since=300
这是我发现列出所有存储库的唯一方法,因为 SEARCH api 的每次搜索限制为 1000 个存储库。
如果您打算处理所有回购,则应准备应对速率限制:
https://developer.github.com/v3/rate_limit/
经过身份验证的用户可以获得更好的限制,您可以使用 access_token(查看文档)。小心,不要提出太多要求。
如果您需要过滤存储库,则需要为每个存储库执行额外的查询(搜索 API)。准备好处理超过一千万个存储库。
Java 示例:(使用 javax.json.Json)
int id=0;
do {
URL url = new URL("https://api.github.com/repositories?since="+id+"&access_token="+oauth);
// implement callApi such as Json.createReader(url.openStream()), but please make it sleep for a minute if the limit got reached
try (JsonReader rdr = callApi(url)) {
JsonArray results = rdr.readArray();
for (JsonObject result : results.getValuesAs(JsonObject.class)) {
id = result.getInt("id");
String name = result.getString("name");
boolean priv = result.getBoolean("private");
... do whatever you want...
}
}
} while (some stop condition);
祝你好运,我花了一些时间才发现这一点。