5

昨日、GitHubのすべての公開リポジトリのリストを取得しようとしましたが、リンクが見つかりませんでした。

たとえば、Sourceforgeでは、すべてのプロジェクトをカテゴリ別に一覧表示したり、Googleコードですべてのプロジェクトを検索したりできます。

はい、「*」や「%」などのキーワードや空の文字列で検索しようとしましたが、このページのみが表示されますhttps://github.com/search?q3%type=Everything&repo3%langOverride3%start_value=1

4

2 に答える 2

4

次のリクエストを使用して、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 を検索するために) 追加のクエリを実行する必要があります。1,000 万を超えるリポジトリを処理する準備をしてください。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);

幸運なことに、これを発見するのに時間がかかりました。

于 2016-06-08T14:26:43.853 に答える
2

この検索をチェックしてください。それがすべての公開リポジトリをリストするかどうかはわかりませんが、これは良いスタートだと思います. (検索には数秒かかる場合がありますので、しばらくお待ちください)

于 2012-10-07T22:14:07.373 に答える