2012-07-12 43 views
3

昨天,我试图获得GitHub中所有公共仓库的列表,但我没有找到任何链接。有没有任何链接可以显示GitHub中的所有公共仓库?

例如在Sourceforge中,您可以按类别或Google代码列出所有项目,您可以搜索所有项目的所有项目。

是的,我试着用关键字,如为“*”或“%”或空字符串进行搜索,但你只看到这个页面https://github.com/search?q=&type=Everything&repo=&langOverride=&start_value=1

+0

我以为我找到了获取列表的方法,因为我发现这个脏链接https://github.com/search?type=Everything&language=&q=a+OR+b+OR+c+OR+d + OR + E + OR + F + OR + G + OR + H +或+ I + OR + J + OR + 1 + OR + M + OR + n +或+ O + OR + p + OR + q + OR + R + OR + S + OR + T + OR + U + OR + v +或+ Y + OR + W + OR + Y + OR + Z + OR + K +或+ 1 + OR + 2 + OR + 3进入维基百科文章http://en.wikipedia。+ OR + 4 + OR + 5 + OR + 6 + OR + 7 + OR + 8 + OR + 9 + OR + 0&repo =&langOverride =&x = 0&y = 0&start_value = 1组织/维基/ Comparison_of_open_source_software_hosting_facilities#cite_note-github1-55。 但是这不会运行:(。 – 2012-07-13 10:19:22

+0

你见过旧API吗?http://developer.github.com/v3/search/#search-repositories – 2012-08-23 15:07:13

回答

2

退房this search。我不确定是否列出所有公开回购,但我敢打赌这是一个好的开始。 (搜索可能需要几秒钟,所以要耐心等待)

+0

哇!超过300万roposits;它似乎github也有一些垃圾邮件问题;)https://github.com/voklas/uQ----N-NQGf-_L3DV62--u-8-_U94r-DP-drg-Yxe-acT-W4t-w-96-WTBBCQN-_lFM --X-OE-FVF-j9R-2 --- 5EC-gQW-R --_ X – rubo77 2013-07-02 11:16:47

3

可以使用下面的请求列出github上所有存储库:

https://api.github.com/repositories?since=0

它将返回ID的第一个“N”库> 0作为JSON数组。 你应该处理这个“n”,存储“id”。当你到达“页”的结尾,你只是再次创下自= lastId: 例如:

https://api.github.com/repositories?since=300

这是唯一的办法,我发现列表中的所有库,因为搜索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); 

祝你好运,我损失了一些时间来发现这一点。

相关问题