GitHubのAPIを使って、Releaseコンテンツを取得する
概要
せっかくなのでモブプロにお世話になっているMobsterをAPI経由でダウンロードしてみます。
Releaseコンテンツ
リリースページからDownloadできるやつらのことです。
APIの表現だとassetsというようです。
Release 0.0.30 · dillonkearns/mobster · GitHub
GitHub API
Release関連のAPIがあるのでそれを使います。
Releases | GitHub Developer Guide
Releaseの取得
一覧取得は下記のような感じです。
curl https://api.github.com/repos/dillonkearns/mobster/releases
レスポンスがたくさん出てきてうんざりしました。
最新を取得するAPIもあるようです。
curl -v https://api.github.com/repos/dillonkearns/mobster/releases/latest
上記で返ってくる url
がrelease取得用です。
{ "url": "https://api.github.com/repos/dillonkearns/mobster/releases/6174887", "assets_url": "https://api.github.com/repos/dillonkearns/mobster/releases/6174887/assets", "upload_url": "https://uploads.github.com/repos/dillonkearns/mobster/releases/6174887/assets{?name,label}", ・・・以下略 }
なので、下記でも同じ結果が取得できます。
curl -v https://api.github.com/repos/dillonkearns/mobster/releases/6174887
Assetsの取得
assets_url
を叩くと、releaseに紐づくAssetsの一覧が取得できます。
※release取得のAPIでもレスポンスに含まれています
curl -v https://api.github.com/repos/dillonkearns/mobster/releases/6174887/assets
今回はMac用のファイルを対象にしてみたいと思います。
[ ・・・略 { "url": "https://api.github.com/repos/dillonkearns/mobster/releases/assets/3728974", "id": 3728974, "name": "Mobster-0.0.30.dmg", ・・・略 } ・・・略 ]
url
を叩けば対象のAssetsの情報だけ取得できます。
curl -v https://api.github.com/repos/dillonkearns/mobster/releases/assets/3728974
Assetsのダウンロード
Assetsをダウンロードするには、HTTPヘッダに Accept: application/octet-stream
を付けます。
curl -vLJO -H 'Accept: application/octet-stream' https://api.github.com/repos/dillonkearns/mobster/releases/assets/3728974
- リダイレクトされるので、Lオプションを付けてます
- ファイル名そのままで保存するためにJOオプションを付けてます
TOKENを使う
TOKENを使って認証付きでAPIを叩けます。
対象がprivateリポジトリである場合などに有効です。
またAPIは時間あたりの呼び出し回数に制限があります。
認証付きの方が上限ゆるく設定されています。
GitHub API v3 | GitHub Developer Guide
認証なしでAPI上限越えると下記のようなレスポンスが返ってきます。
{ "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" }
TOKENを発行する
[Personal access tokens]から新しいトークンを発行します。
https://github.com/settings/tokens/
privateリポジトリの場合、scopeはrepoだけあれば大丈夫でした。
TOKENを使ってAPIを叩く
uオプションでトークンを渡してあげればOKです。
curl -vLJO -u :07381d41a0f3f0a313dd26c75bb721e71cdd1809 -H 'Accept: application/octet-stream' https://api.github.com/repos/dillonkearns/mobster/releases/assets/3728974
まとめ
自動化とかは簡単にできそうです。
今回はcurlで愚直にやりましたが、自分でスクリプト組むより Octokit とか使ったほうが便利らしいので、機会があったら使ってみようと思います。