GitHub API を触ってみた
GitHub のアカウント名を変更したので、各リポジトリ内で持っていた旧アカウント名の情報を新アカウント名に変更しようと思った。
しかし、GitHub リポジトリのページをイチイチ開いて、git clone
する URL をコピーして…といった操作を全リポジトリでやらないといけないのは面倒だった。
そこで少し調べてみると、GitHub API というモノで GitHub 上の色々な情報が取得できるようだと判明。早速試してみる。
目次
基本的な使い方・curl について
まずはトップページの「Overview」より、基本的な叩き方を見てみる。
$ curl https://api.github.com
ターミナルで curl
コマンドを利用し、api.github.com
を叩くと、JSON データが取得できるはずだ。curl
コマンドは「Client for URLs」の略で、「cURL」プロジェクトで作成されているコマンドだ。「see URL」とかけて「シー・ユーアルエル」と呼んでも良いようだが、公式では「カール」と呼んでいるそうだ。
- 参考 : cURL - Wikipedia
- 参考 : curl - Frequently Asked Questions
- 参考 : cURL コマンドの読み方 - Qiita
- 参考 : 読み方:cURL: UNIX/Linuxの部屋
リポジトリ一覧を取得してみる
今回は自分のリポジトリの全量を取得できれば良いかなーと思ったので、「List user repositories」を見てみた。
これによると、以下のような URL を作れば良いようだ。
$ curl https://api.github.com/users/Neos21/repos
コレで何やらリポジトリ情報が配列で取れたので、git clone
で使える URL を探して、grep
で拾ってみた。
$ curl -sS https://api.github.com/users/Neos21/repos | grep 'clone_url'
"clone_url": "https://github.com/Neos21/about.git",
# 以下略…
"clone_url": "https://github.com/Neos21/practice-node-js.git",
-sS
というオプションは、プログレスメーターの表示を切り (-s
) つつ、エラーは出力する (-S
) ようにするモノ。
全件取れていない…ページネーションの仕組み
コレで全量取れたか?と思いきや、これだとどうも30件分しかリポジトリ情報が返ってきていない。僕のアカウントは40リポジトリくらいは持っているので、明らかに少ない。
そこで GitHub API のページを読み直していると、「Pagination」なる項目があることに気付いた。
これによると、GitHub API は、こうした一覧系の情報を返す時に「ページャ」の概念を持っていて、何もオプションを指定しないと最初の30件分しか返してくれないようなのだ。
全量取得するには、
?page=2
といったパラメータを付与して、次のページのデータを別途取得するか、?per_page=100
といったパラメータを付与して、1ページあたりの件数を増やすか、
いずれかを選べば良い。
今回は一気に取得したかったので、以下のように per_page
パラメータを付けることにした。
$ curl -sS https://api.github.com/users/Neos21/repos?per_page=100 | grep 'clone_url'
"clone_url": "https://github.com/Neos21/about.git",
# 以下略…
"clone_url": "https://github.com/Neos21/windows-batch-scripts.git",
コレで OK。全リポジトリのデータが取れた。
あとはこの URL 群を適当に整形して利用するだけ。
curl
面白いなぁ〜、GitHub API 楽ちんだなぁ〜、と思いました、まる。