- はじめに
- 特定のReleaseのダウンロード数の取得方法
- 全てのReleaseのダウンロード数の取得方法
- ダウンロード数の集計の例
- 補足1:ソースのアーカイブはAssetではない(ようだ)
- 補足2:ダウンロード数をカウントするWebサイト
- 参考
はじめに
GitHubのReleaseで公開しているファイルのダウンロード数を取得する方法を調べたので、メモしておく。
ここでは、Docker ComposeのReleaseを例に挙げて説明する。 Docker ComposeのReleaseのページは以下のようになっているが、このページのAssetsとして登録されているファイルのダウンロード数を取得することになる。
特定のReleaseのダウンロード数の取得方法
Assetsに登録されているファイルのダウンロード数は、GitHubのAPIで取得できる。 以下に、Docker Compose 1.27.4のReleaseページで公開されているファイルの情報を取得する例を示す。
$ curl \ --silent \ --header "Accept: application/vnd.github.v3+json" \ https://api.github.com/repos/docker/compose/releases/tags/1.27.4
返却されるjsonには様々な情報が含まれているのだが、ダウンロード数のカウントに必要な部分だけ抜粋すると、以下のようになる。
{ "html_url": "https://github.com/docker/compose/releases/tag/1.27.4", "assets": [ { "name": "docker-compose-Darwin-x86_64", "download_count": 6705, }, { "name": "docker-compose-Darwin-x86_64.sha256", "download_count": 191, }, { "name": "docker-compose-Darwin-x86_64.tgz", "download_count": 813, }, { "name": "docker-compose-Darwin-x86_64.tgz.sha256", "download_count": 129, }, { "name": "docker-compose-Linux-x86_64", "download_count": 424905, }, { "name": "docker-compose-Linux-x86_64.sha256", "download_count": 37947, }, { "name": "docker-compose-Windows-x86_64.exe", "download_count": 23259, }, { "name": "docker-compose-Windows-x86_64.exe.sha256", "download_count": 10752, }, { "name": "run.sh", "download_count": 12628, } ], }
全てのReleaseのダウンロード数の取得方法
特定のReleaseのダウンロード数の取得方法とほぼ同じで、指定するURLを以下のように変更すればよい。
$ curl \ --silent \ --header "Accept: application/vnd.github.v3+json" \ https://api.github.com/repos/docker/compose/releases
返却されるjsonは、特定のReleaseの情報を配列形式にしたものである。 省略しつつ構造を示すと、以下のようになる。
[ { "html_url": "https://github.com/docker/compose/releases/tag/1.28.0-rc1", "assets": [ ... ], ... }, { "html_url": "https://github.com/docker/compose/releases/tag/1.27.4", "assets": [ ... ], ... }, { "html_url": "https://github.com/docker/compose/releases/tag/1.27.3", "assets": [ ... ], ... }, ... ]
ただし、Releaseの数が多い場合はページネーション(つまり複数回の取得)が必要になるかもしれないが、GitHub APIのドキュメントを深くは読んでないので、よく分かってない。
ダウンロード数の集計の例
ダウンロード数の集計の例として、特定のRelease (ここでは Docker Compose 1.27.4)を、コマンドjq
を利用して集計してみると、以下のようになる。
$ curl \ --silent \ --header "Accept: application/vnd.github.v3+json" \ https://api.github.com/repos/docker/compose/releases/tags/1.27.4 \ | jq "[.assets[].download_count] | add" 517666
また、全てのReleaseに対して集計する例は、以下のようになる。
$ curl \ --silent \ --header "Accept: application/vnd.github.v3+json" \ https://api.github.com/repos/docker/compose/releases \ | jq "[.[].assets[].download_count] | add" 11089246
前述したが、全てのReleaseの取得では、ページネーションを意識する必要があるかもしれない。
補足1:ソースのアーカイブはAssetではない(ようだ)
ところで、「Source code (zip)」と「Source code (tar.gz)」については、以下のように画面上はAssetsに含まれているが、GitHubのAPIの呼び出しの結果には含まれていない。
このことはGitHub APIのドキュメントには書かれていないようだが、GitHubの中の人と思われるIvan ZuzakさんがStack Overflowで以下のようにコメントしていた。
Assets are binaries you can upload when creating a release. Try creating a release and look for the "Attach binaries by dropping them here or selecting one." text. We track download counts only for those assets, not for releases themselves (currently).
行間を読むと、これら2つのファイルは単にソースコードをアーカイブしたものであり、リリースバイナリではないので、Assetとはみなしていない、ということなのだろう。
補足2:ダウンロード数をカウントするWebサイト
ダウンロード数を単に目視確認したいだけなら、以下のWebサイトを利用するとよい。
このWebサイトのソースコードはGitHubにある。 JavaScriptからGitHub APIを呼び出しているようだ。
参考
jq Manual