人のすべてのGitHubリポジトリのリストを取得するにはどうすればよいですか?


93

私たちは、GitHubアカウントのリポジトリにある人のすべてのプロジェクトを表示する必要があるプロジェクトに取り組んでいます。

誰かが提案できますか、特定の人のgit-user名を使用してすべてのgitリポジトリの名前を表示するにはどうすればよいですか?

回答:



40

GithubAPIを使用します

/users/:user/repos

これにより、すべてのユーザーの公開リポジトリが提供されます。プライベートリポジトリを見つける必要がある場合は、特定のユーザーとして認証する必要があります。その後、REST呼び出しを使用できます。

/user/repos

すべてのユーザーのリポジトリを検索します。

Pythonでこれを行うには、次のようにします。

USER='AUSER'
API_TOKEN='ATOKEN'
GIT_API_URL='https://api.github.com'

def get_api(url):
    try:
        request = urllib2.Request(GIT_API_URL + url)
        base64string = base64.encodestring('%s/token:%s' % (USER, API_TOKEN)).replace('\n', '')
        request.add_header("Authorization", "Basic %s" % base64string)
        result = urllib2.urlopen(request)
        result.close()
    except:
        print 'Failed to get api request from %s' % url

関数に渡されるURLは、上記の例のようにRESTURLです。認証する必要がない場合は、メソッドを変更して、Authorizationヘッダーの追加を削除します。その後、単純なGETリクエストを使用して任意のパブリックAPIURLを取得できます。


27
これにより、結果セットの最初の「ページ」のみが表示されます。これは、デフォルトで30項目に設定されています。を使用?per_page=100して最大量を取得できますが、ユーザーが100を超えるリポジトリを持っている場合は、応答とともに送信nextされるHTTPLinkヘッダー内のいくつかのURLに従う必要があります。
ポテルカ2014年

2
@Pothercaに感謝します、まさに私が探していたものです!
aknuds1 2016年

34

次のcurlコマンドを試して、リポジトリを一覧表示します。

GHUSER=CHANGEME; curl "https://api.github.com/users/$GHUSER/repos?per_page=100" | grep -o 'git@[^"]*'

複製されたURLを一覧表示するには、次のコマンドを実行します。

GHUSER=CHANGEME; curl -s "https://api.github.com/users/$GHUSER/repos?per_page=1000" | grep -w clone_url | grep -o '[^"]\+://.\+.git'

プライベートの場合は、次のようにAPIキー(access_token=GITHUB_API_TOKEN)を追加する必要があります。

curl "https://api.github.com/users/$GHUSER/repos?access_token=$GITHUB_API_TOKEN" | grep -w clone_url

ユーザーが組織の場合は、/orgs/:username/repos代わりにを使用してすべてのリポジトリを返します。

それらのクローンを作成するには、GitHubからすべてのリポジトリを一度にクローンする方法を参照してください

参照:コマンドラインを使用してプライベートリポジトリからGitHubリリースをダウンロードする方法


9
これは、に関係なく、最初の100個のリポジトリのみを表示しますper_page=1000
jm666 2016

2
コマンドに-sオプションを追加して、curl次のように見苦しいプログレスバーをcurl -s ...
削除

5
@ jm666が言うように、最大​​ページサイズは100です。2ページ目を表示するには、次のようにします。curl " api.github.com/users/$USER/repos?per_page=100 \&page = 2"
rscohn2 2017

2
プライベートの例はこの例では機能しません。/users/「複数形」はパブリックリポジトリのみを返します。プライベートトークンを取得するには、api.github.com / user / reposを使用して、リクエストにトークンを追加する必要があります。
LeandroCR

2
@kenorbの謎が解決され、ユーザーは組織なので/orgs/:username/repos、すべてのリポジトリを /users/...返し、それらの一部を返します。これは確かに奇妙です。ユーザー名は、ユーザーまたは組織の両方として扱うことができます。
学習者のIOS

11

jqがインストールされている場合は、次のコマンドを使用して、ユーザーのすべてのパブリックリポジトリを一覧表示できます。

curl -s https://api.github.com/users/<username>/repos | jq '.[]|.html_url'

6

おそらくjsonpソリューションが必要です:

https://api.github.com/users/[user name]/repos?callback=abc

jQueryを使用する場合:

$.ajax({
  url: "https://api.github.com/users/blackmiaool/repos",
  jsonp: true,
  method: "GET",
  dataType: "json",
  success: function(res) {
    console.log(res)
  }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


3

NPMモジュールリポジトリは、一部のユーザーまたはグループのすべてのパブリックリポジトリのJSONを取得します。これはから直接実行できるnpxため、何もインストールする必要はありません。組織またはユーザー(ここでは「W3C」)を選択するだけです。

$ npx repos W3C W3Crepos.json

これにより、W3Crepos.jsonというファイルが作成されます。Grepは、たとえばリポジトリのリストをフェッチするのに十分です。

$ grep full_name W3Crepos.json

長所:

  • 100を超えるリポジトリで機能します(この質問に対する多くの回答は機能しません)。
  • 入力することはあまりありません。

短所:

  • 必須npx(またはnpm実際にインストールする場合)。

3

Pythonを使用してGitHubユーザーのすべてのパブリックリポジトリのリストを取得します。

import requests
username = input("Enter the github username:")
request = requests.get('https://api.github.com/users/'+username+'/repos')
json = request.json()
for i in range(0,len(json)):
  print("Project Number:",i+1)
  print("Project Name:",json[i]['name'])
  print("Project URL:",json[i]['svn_url'],"\n")

参照


1
これは、(多分それは古いAPIバージョンのためです)働いていない
OzzyCzech

2
はい、小さな変更があります。私は自分の答えを編集しました、そして今それはうまくいきます。
darshanc 9920

3

素晴らしいGraphQLAPIExplorerを使用するオプションがあります

組織のすべてのアクティブなリポジトリとそれぞれの言語のリストが必要でした。このクエリはまさにそれを行います:

{
  organization(login: "ORG_NAME") {
    repositories(isFork: false, first: 100, orderBy: {field: UPDATED_AT, direction: DESC}) {
      pageInfo {
        endCursor
      }
      nodes {
        name
        updatedAt
        languages(first: 5, orderBy: {field: SIZE, direction: DESC}) {
          nodes {
            name
          }
        }
        primaryLanguage {
          name
        }
      }
    }
  }
}


3

組織のレポを探している場合-

api.github.com/orgs/$NAMEOFORG/repos

例:

curl https://api.github.com/orgs/arduino-libraries/repos

また、ページネーションの問題が発生した場合に備えて、per_pageパラメーターを追加してすべての名前を取得することもできます-

curl https://api.github.com/orgs/arduino-libraries/repos?per_page=100

3

reposAPIの完全な仕様は次のとおりです。

https://developer.github.com/v3/repos/#list-repositories-for-a-user

GET /users/:username/repos

クエリ文字列パラメータ:

最初の5つは、上記のAPIリンクに記載されています。pageおよびのパラメータはper_page他の場所で文書化されており、完全な説明に役立ちます。

  • type(文字列):のいずれかになりますallownermember。デフォルト:owner
  • sort(文字列):のいずれかになりますcreatedupdatedpushedfull_name。デフォルト:full_name
  • direction(文字列):ascまたはのいずれかになりdescます。デフォルト:ascを使用full_nameする場合、それ以外の場合desc
  • page (整数):現在のページ
  • per_page (整数):ページあたりのレコード数

これはHTTPGET APIであるため、cURLに加えて、ブラウザーで簡単に試すことができます。例えば:

https://api.github.com/users/grokify/repos?per_page=1&page=2


2

HTML

<div class="repositories"></div>

JavaScript

// Githubリポジトリ

リポジトリリストを制限したい場合は、の?per_page=3後に追加できますusername/repos

例えば username/repos?per_page=3

//の代わりにusername、Githubに任意のユーザーのユーザー名を配置できます。

var request = new XMLHttpRequest();
        request.open('GET','https://api.github.com/users/username/repos' , 
        true)
        request.onload = function() {
            var data = JSON.parse(this.response);
            console.log(data);
            var statusHTML = '';
            $.each(data, function(i, status){
                statusHTML += '<div class="card"> \
                <a href=""> \
                    <h4>' + status.name +  '</h4> \
                    <div class="state"> \
                        <span class="mr-4"><i class="fa fa-star mr-2"></i>' + status.stargazers_count +  '</span> \
                        <span class="mr-4"><i class="fa fa-code-fork mr-2"></i>' + status.forks_count + '</span> \
                    </div> \
                </a> \
            </div>';
            });
            $('.repositories').html(statusHTML);
        }
        request.send();

1

JSONのページング

以下のJSコードは、コンソールで使用することを目的としています。

username = "mathieucaroff";

w = window;
Promise.all(Array.from(Array(Math.ceil(1+184/30)).keys()).map(p =>
    fetch(`//api.github.com/users/{username}/repos?page=${p}`).then(r => r.json())
)).then(all => {
    w.jo = [].concat(...all);
    // w.jo.sort();
    // w.jof = w.jo.map(x => x.forks);
    // w.jow = w.jo.map(x => x.watchers)
})

1

答えは「/ users /:user / repo」ですが、サーバー上でWebアプリケーションを立ち上げるために使用できるオープンソースプロジェクトでこれを行うすべてのコードがあります。

私は、すべてのリポジトリを一覧表示するGitHubAPIと通信するGit-Captainと呼ばれるGitHubプロジェクトを立ち上げました。

これは、GitHub APIを利用してNode.jsで構築されたオープンソースのウェブアプリケーションであり、多数のGitHubリポジトリ全体でブランチを検索、作成、削除します。

組織またはシングルユーザー向けに設定できます。

私はそれをread-meで設定する方法を段階的に説明しています。


1

ユーザーの100個の公開リポジトリのURLを取得するには:

$.getJSON("https://api.github.com/users/suhailvs/repos?per_page=100", function(json) {
  var resp = '';
  $.each(json, function(index, value) {
    resp=resp+index + ' ' + value['html_url']+ ' -';
    console.log(resp);
  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


1
const request = require('request');
const config = require('config');

router.get('/github/:username', (req, res) => {
    try {
        const options = {

            uri: `https://api.github.com/users/${req.params.username}/repos?per_page=5
                 &sort=created:asc
                 &client_id=${config.get('githubClientId')}
                 &client_secret=${config.get('githubSecret')}`,

            method: 'GET',

            headers: { 'user-agent': 'node.js' }
        };
        request(options, (error, response, body) => {
            if (error) console.log(error);
            if (response.statusCode !== 200) {
                res.status(404).json({ msg: 'No Github profile found.' })
            }
            res.json(JSON.parse(body));
        })
    } catch (err) {
        console.log(err.message);
        res.status(500).send('Server Error!');
    }
});

1
詳細については、git docs-> developer.github.com/v3/repos
VishalKank19年

1
SOへようこそ!投稿する前にこれを確認しください...回答を投稿して他にもある場合は、POVの長所を示してください。コードを投稿するだけでなく、少し説明してください。
デビッド・ガルシアBodego
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.