GitHub のリポジトリに付いたスター数をカウントしてみた
2020-01-16ふと GitHub のリポジトリに付いたスター数を数えてみたいと思ったので、 GitHub の API を利用してカウントしてみました。
目次
作ったもの
カウント用のスクリプトは Python で作りました。 (3.7.5
)
使い方
使用する場合は python3 -m venv .venv && source ./.venv/bin/activate
などで Python 3 の環境を作って && 入って、その中で下記コマンドを実行します。
$ python count-github-stargazers.py michimani
Count stargazers of michimani's GitHub repositries...
auto-start-stop-ec2 : 1
qiita-to-hugo : 1
resize-s3-image : 1
start-stop-ec2-python : 1
TOTAL : 4
補足
今回作ったスクリプトについて簡単に補足を書いておきます。
GitHub の API
今回使用したのは、ユーザのリポジトリ一覧を取得する API です。
スクリプト中にもありますが、エンドポイントは下記 URL となっています。
GET https://api.github.com/users/:username/repos
認証は不要で、指定したユーザの Public な リポジトリ一覧を取得することができます。
per_page
パラメータでページングが可能で、 page
パラメータでページを指定できます。
その他、下記のオプションで取得できるリポジトリの種類、ソート順を指定することができます。(詳細については公式ドキュメントを参照してください)
-
type
:all
/owner
/member
で指定します。デフォルトはowner
です。 -
sort
: 下記の値でソート順を指定します。デフォルトはfull_name
です。created
updated
pushed
full_name
-
direction
:asc
/desc
でソート順の昇順/降順を指定します。デフォルトは、sort=full_name
の場合はasc
、その他の場合はdesc
です。 -
Repositories # List user repositories | GitHub Developer Guide
Python の argparse モジュール
今までも Python で簡単な CLI ツールのようなものを作っていましたが、今回は argparse
という Python の標準モジュールを使用してみました。
CLI ツールを作るとなると、引数やオプションの処理を実装する必要があります。それらの 必須/任意 の管理などは面倒なのですが、 argparse
モジュールを使用することにより引数やオプションの管理が非常に簡単になります。
今回のスクリプトでは GitHub のユーザ名のみを必須の引数とするシンプルなものですが、引数が渡されなかった場合に定型文を出力してくれたり、デフォルトで -h
オプションを使用することで各引数・オプションのヘルプを出力することもできます。
-
引数なしで実行した場合
$ python count-github-stargazers.py usage: count.py [-h] user_name count.py: error: the following arguments are required: user_name
-
ヘルプ
$ python count-github-stargazers.py -h usage: count.py [-h] user_name positional arguments: user_name GitHub user name optional arguments: -h, --help show this help message and exit
argparse
モジュールについては下記の記事を参考にさせていただきました。
まとめ
GitHub のリポジトリに付いたスター数をカウントするスクリプトを Python で作ってみた話でした。
スター数をカウントしたいというか argparse
モジュールを使ってみたかった感じになってますが、自分のリポジトリに付いてるスター数をカウントしたくなったら参考にしてみてください。
どうでもいいですが、スター数の名前が単純に stared_count
じゃなくて stargazers_count
なのがなんかかっこいいですよね。スターゲイザーっていう響きが。
comments powered by Disqus