Personal access tokensを使ってgithubのAPIでコミットメッセージのデータ収集してみる

githubで管理しているリポジトリのコミットメッセージを吸い出して作業内容を解析したくなり、コミットメッセージが取得できないか調査してみました。
後で、この情報をElasticseachにでも入れてみたいと思ってます。

github APIのアクセストークン取得

自分のアカウントでgithubに接続し、右上の[settings]をクリックします。
f:id:a1026302:20201106014940j:plain

[Developer settings]をクリックします。
f:id:a1026302:20201106022648j:plain

[New GitHub App]ボタンをクリックします。
f:id:a1026302:20201106023054j:plain

[Personal access tokens]を選択し[Generate new token]をクリックします。
f:id:a1026302:20201106115952j:plain

パスワード入力画面が表示されるのでパスワードを入力します。

[New personal access token]という画面が表示されるので必要個所に情報を追加します。
[Generate Button]ボタンをクリックするとPersonalアクセストークンが作成されます。
f:id:a1026302:20201106140955j:plain
f:id:a1026302:20201106141034j:plain
[Personal access tokens]ができると以下の画面から確認できます。
f:id:a1026302:20201106141910j:plain

APIを使用してデータ収集(commit情報)

以下のコマンドでレポジトリ全体のコミット情報が取得できます。

TOKEN={'作成したPersonal access token'}
USER_NAME={'myname'}
REPO_NAME={'myrepo'}
curl -H "Authorization: token $TOKEN" https://api.github.com/repos/$USER_NAME/$REPO_NAME/commits
Commitの絞り込み(ブランチ)
TOKEN={'作成したPersonal access token'}
USER_NAME={'myname'}
REPO_NAME={'myrepo'}
BRANCH_NAME={'branch'}
curl -H "Authorization: token $TOKEN" https://api.github.com/repos/$USER_NAME/$REPO_NAME/commits/$BRANCH_NAME

APIを使用してデータ収集(issues情報)

以下のコマンドでレポジトリ全体の問題情報が取得できます。

TOKEN={'作成したPersonal access token'}
USER_NAME={'myname'}
REPO_NAME={'myrepo'}
curl -H "Authorization: token $TOKEN" https://api.github.com/repos/$USER_NAME/$REPO_NAME/issues
Issueの絞り込み(状態)

状態ごとに絞り込みが行えます。

  • state=open … Open 状態の Issue のみ取得
  • state=closed … Close 状態の Issue のみ取得
  • state=all … すべての Issue を取得

closedのみの場合

TOKEN={'作成したPersonal access token'}
USER_NAME={'myname'}
REPO_NAME={'myrepo'}
curl https://api.github.com/repos/$USER_NAME/$REPO_NAME/issues?state=closed
Issueの絞り込み(ラベル)

labels パラメータでラベルで絞り込みが行えます。
日本語を含むラベル名などは URL エンコードした形で指定しなければいけないので、ここでは curl の --data-urlencode オプションを使って labels パラメータを渡しています。

TOKEN={'作成したPersonal access token'}
USER_NAME={'myname'}
REPO_NAME={'myrepo'}
curl  -G --data-urlencode "labels=ラベル1" https://api.github.com/repos/$USER_NAME/$REPO_NAME/issues?state=closed