GitHubのAPIを使って、Releaseコンテンツを取得する

概要

GitHubAPIも触らないまま大人になってしまった。

せっかくなのでモブプロにお世話になっているMobsterをAPI経由でダウンロードしてみます。

Releaseコンテンツ

リリースページからDownloadできるやつらのことです。

APIの表現だとassetsというようです。

Release 0.0.30 · dillonkearns/mobster · GitHub

GitHub API

Release関連のAPIがあるのでそれを使います。

Releases | GitHub Developer Guide

Releaseの取得

APIcurlで叩いてみます。

一覧取得は下記のような感じです。

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 とか使ったほうが便利らしいので、機会があったら使ってみようと思います。

参考