😀
シェル芸でGitHubの日付別Contribute数を取得
概要
シェル芸で日付別のGitHubの草情報を取得し日付別にContribute数を整形して表示したい.
やってみた
まず列挙.
https://github.com/users/eggplants/contributionsのソースを見ると, 草の部分に<rect>
要素が列挙されていることがわかる.
しかし<rect>
要素を抜き出すと
のような部分も取得してしまう. なので以下のような草濃度部分の<rect>
は除く必要がある.
ので, 以下のようにする.
$ curl -s https://github.com/users/eggplants/contributions \
| awk '/data-count/{print$9,$10}'
どうやら直近1年分取得できそうだ.
result
data-count="0" data-date="2020-02-23"
data-count="0" data-date="2020-02-24"
data-count="1" data-date="2020-02-25"
data-count="0" data-date="2020-02-26"
data-count="1" data-date="2020-02-27"
...(省略)...
data-count="5" data-date="2021-02-20"
data-count="6" data-date="2021-02-21"
data-count="1" data-date="2021-02-22"
data-count="0" data-date="2021-02-23"
data-count="7" data-date="2021-02-24"
日付とContribute数を並べて表示.
$ curl -s https://github.com/users/eggplants/contributions \
| awk '/data-count/{print$9,$10}' | awk -F\" '$0=$4" "$2'
大分扱いやすい形式になった.
result
2020-02-23 0
2020-02-24 0
2020-02-25 1
2020-02-26 0
2020-02-27 1
...(省略)...
2021-02-20 5
2021-02-21 6
2021-02-22 1
2021-02-23 0
2021-02-24 7
試しに, ここから昨日のcontribute数を検索してみる.
$ date
2021年 2月 25日 木曜日 02:13:11 JST
$ date +%Y-%m-%d
2021-02-23
$ date +%Y-%m-%d -d "1 day ago"
2021-02-24
$ curl -s https://github.com/users/eggplants/contributions \
| awk '/data-count/{print$9,$10}' | awk -F\" '$0=$4" "$2' \
| grep "$(date +%Y-%m-%d -d "1 day ago")"
2021-02-24 7
取得できた.
応用
contributter(){
local user="$1" day_before="${2-1}"
local target_date="$(date +%Y-%m-%d -d "${day_before} day ago")"
echo "${user} さんの ${target_date//-//} の contribution 数: $(
curl -s https://github.com/users/${user}/contributions \
| grep -oP "(?<=data-count=\")[0-9]+(?=\" data-date=\"${target_date})"
) #contributter_report"
}
result
$ contributter eggplants
eggplants さんの 2021/02/24 の contribution 数: 7 #contributter_report
$ conributter eggplants 2
eggplants さんの 2021/02/23 の contribution 数: 0 #contributter_report
解説
-
第一引数はユーザ名(
user
), 第2引数はn日前(day_before
)を表す.
また第2引数が存在しない場合,${変数-デフォルト値}
構文で1
が代入される. -
target_date
には, n日前の日付をYYYY-mm-dd
形式で代入する. -
${target_date//-//}
は,${変数//置換パターン/置換文字}
構文で,YYYY-mm-dd
をYYYY/mm/dd
に置換している. -
前項で行っていた,
awk
による特定日付のContribute数取得の部分は,grep
の肯定先/後読み(?<=before-pattern)value(?=after-pattern)
でうまく抽出できる.
結論
シェル芸でやる必要ある?
Discussion