GitHub GraphQL API でコントリビューション数(草の情報)を取得する
2022/07/12
GitHub のコントリビューション数(草の情報)を使ってやりたいことができたので、GitHub GraphQL API を使って取得してみる
手順
アクセストークンの発行
GitHub の Settings -> Developer setting -> Personal access tokens から発行する
コントリビューション数だけ取れたらいいので、権限は user -> read:user
だけ付与した
動作確認
発行したトークンがちゃんと使えるかの確認
公式では、GraphQL Explorer を使うことをおすすめされているが、今回は cURL を使った
エンドポイント https://api.github.com/graphql に対して POST リクエストで、クエリを投げる
query {
viewer {
login
}
}
$ curl -s -H "Authorization: bearer [token]" https://api.github.com/graphql -d '{"query": "query { viewer { login } }"}' | jq
{
"data": {
"viewer": {
"login": "ytkg"
}
}
}
自分の GitHub のユーザー名が返ってきたらOK
コントリビューション数の取得
認証も無事通過できたので、本題のコントリビューション数を取得する
以下のクエリでコントリビューション数が取得できる
query {
user(login: "ユーザー名") {
contributionsCollection {
contributionCalendar {
weeks {
contributionDays {
date
contributionCount
}
}
}
}
}
}
クエリが長いので、ファイルに書き込んでからリクエストする
query.json
{
"query": "
query {
user(login: \"ytkg\") {
contributionsCollection {
contributionCalendar {
weeks {
contributionDays {
date
contributionCount
}
}
}
}
}
}
"
}
$ curl -s -H "Authorization: bearer [token]" https://api.github.com/graphql [email protected] | jq
{
"data": {
"user": {
"contributionsCollection": {
"contributionCalendar": {
"weeks": [
{
"contributionDays": [
{
"date": "2021-07-11",
"contributionCount": 0
},
{
"date": "2021-07-12",
"contributionCount": 1
},
{
"date": "2021-07-13",
"contributionCount": 2
},
{
"date": "2021-07-14",
"contributionCount": 1
},
{
"date": "2021-07-15",
"contributionCount": 0
},
{
"date": "2021-07-16",
"contributionCount": 5
},
{
"date": "2021-07-17",
"contributionCount": 1
}
]
},
...省略...
{
"contributionDays": [
{
"date": "2022-07-03",
"contributionCount": 4
},
{
"date": "2022-07-04",
"contributionCount": 2
},
{
"date": "2022-07-05",
"contributionCount": 4
},
{
"date": "2022-07-06",
"contributionCount": 1
},
{
"date": "2022-07-07",
"contributionCount": 4
},
{
"date": "2022-07-08",
"contributionCount": 3
},
{
"date": "2022-07-09",
"contributionCount": 2
}
]
},
{
"contributionDays": [
{
"date": "2022-07-10",
"contributionCount": 3
},
{
"date": "2022-07-11",
"contributionCount": 11
},
{
"date": "2022-07-12",
"contributionCount": 2
}
]
}
]
}
}
}
}
}
デフォルトで直近1年分が取得できた
jq で整形
発展として、読みやすように jq で整形してみる
date と contributionCount の部分のみに整形
$ curl -s -H "Authorization: bearer [token]" https://api.github.com/graphql -d @query.json | jq '[.data.user.contributionsCollection.contributionCalendar.weeks[].contributionDays[]]'
[
{
"date": "2021-07-11",
"contributionCount": 0
},
{
"date": "2021-07-12",
"contributionCount": 1
},
...省略...
{
"date": "2022-07-11",
"contributionCount": 11
},
{
"date": "2022-07-12",
"contributionCount": 2
}
]
date をキー、contributionCount をバリューに整形
$ curl -s -H "Authorization: bearer [token]" https://api.github.com/graphql -d @query.json | jq '[.data.user.contributionsCollection.contributionCalendar.weeks[].contributionDays[] | { key: .date, value: .contributionCount }] | from_entries'
{
"2021-07-11": 0,
"2021-07-12": 1,
"2021-07-13": 2,
...省略...
"2022-07-10": 1
"2022-07-11": 11,
"2022-07-12": 2
}