rcmdnk's blog

Github Octocat Figurine オクトキャット フィギュア (5インチ) [並行輸入品]

GitHub APIを使ってGitHubにあるユーザーのレポジトリ一覧を取ってくる方法。

レポジトリ一覧取得ワンライナー

$ USER=rcmdnk

とかした状態で

$ curl -s "https://api.github.com/users/$USER/repos?per_page=100"|grep \"name\"|cut -d'"' -f4
rep-1
rep-2
...

とすれば$USERのレポジトリ一覧を取ってこれます。

GitHubのAPIで/users/:user/reposでレポジトリの情報をJSON形式で取ってこれますが、 デフォルトの状態だと30レポジトリまでが最初のページに表示される設定なので これを100まで上げています。

100がMaxなので、もし100以上のレポジトリがある場合は

$ for page in $(seq 1 10);do result=$(curl -s "https://api.github.com/users/$USER/repos?page=$page&per_page=100"|grep \"name\"|cut -d'"' -f4);if [ -z "$result" ];then break;fi;echo "$result";done

こんな感じでpageというオプションを使うと2ページ目、3ページ目…とってこれて、ここでは1-10ページ目まで最大で見るので 最大1000個のレポジトリまで見れますが、もっとあるならseq 1 10の10を増やします。

GitHub API v3 GitHub Developer Guide

Repositories GitHub Developer Guide

せっかくJSON形式で返してくれるのでそれを有効に使いたい場合、jq コマンドをインストールしてあるなら、

$ curl -s "https://api.github.com/users/$USER/repos?per_page=100"|jq -c '[.[] .name]'
["repo-1","repo-2"...]

みたいな感じで処理することも出来ます。

名前だけ取ってくるならJSON出力にする意味はあまりないかもしれませんが、 他にも色々情報を一緒に集めたい時は便利です。

沢山APIでリクエストをしていると

$ curl -s "https://api.github.com/users/$USER/repos?per_page=100"
{
  "message": "API rate limit exceeded for xxx.xxx.xxx.xxx. (But here's the good news: Authenticated requests get a higher rate limit. Check out the documentation for more details.)",
  "documentation_url": "https://developer.github.com/v3/#rate-limiting"
}

みたいなエラーが出る事もあります。 APIの仕様は1時間で60回に制限されてるので、必要な場合はトークンを取得することでこれを回避する必要があります。

GitHubのSettingsから一番下にあるPersonal Access Tokens へ行き、右上にあるGenerate new tokenで新しいトークンを作成します。

色々な権限がありますが、この作業だけならuserの項目にあるread:userだけで十分です。

作成するとトークンが表示されるのでそれをコピーします。(一度ページを離れてしまうとトークンが見れなくなるのでその際は再度作り直すしかありません。)

コピーしたトークン(<your_token>)を使って、

$ curl -s curl -s -H "Authorization: token <your_token>" "https://api.github.com/users/$USER/repos?per_page=100"

とすれば 1時間5000回までAPIを使うことが出来ます。

Sponsored Links
Sponsored Links

« Gitでエイリアスを確認するエイリアスを作る(サブコマンドについても) Gitで過去のコミットのAuthorやCommitterを修正するスクリプト »

}