去年、こんなことをつぶやきました。
GitHub APIと連携して、今日何行コード書いたかTweetし続けるbot作りたい
— Og🌗エンジニア🏝宮崎 (@koogawa) 2013年11月27日
誰か作ってくれないかな〜、なんて密かに期待していたのですが、もちろん誰も作ってくれるわけなどなく(誰も得しないしw)いつの間にか年が明けてしまったので、自分で作ってみることにしました。
Twitterにポストするbotプログラムは、いつもお世話になっている EasyBotter を使わせて頂きました。
GitHub API
GitHub APIを使うのは初めてなので、まずはドキュメントを読んでみることに。
最新のAPIバージョンは v3 のようです。
いろいろと読んでるうちに v3/activity/events
を使えば、指定したユーザのアクティビティが取れそうなことがわかりました。
特に認証も必要ないっぽいので、さっそく実行してみると、
[ { "id": "1949962694", "type": "PushEvent", "actor": { "id": 893643, "login": "koogawa", "gravatar_id": "797d5998ec494edb7ade9ffe8783d105", "url": "https://api.github.com/users/koogawa", "avatar_url": "https://gravatar.com/avatar/797d5998ec494edb7ade9ffe8783d105?d=https%3A%2F%2Fa248.e.akamai.net%2Fassets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png&r=x" }, "repo": { "id": 16074936, "name": "koogawa/AlertOnAppTermination", "url": "https://api.github.com/repos/koogawa/AlertOnAppTermination" }, "payload": { "push_id": 293468144, "size": 1, "distinct_size": 1, "ref": "refs/heads/master", "head": "ce23cb9bd9e02243d0d97d02fea36db4c567ff8d", "before": "a24ac0561ee8a630bed8803bc4179b7620a94582", "commits": [ { "sha": "ce23cb9bd9e02243d0d97d02fea36db4c567ff8d", "author": { "email": "(メールアドレス)", "name": "koogawa" }, "message": "Init", "distinct": true, "url": "https://api.github.com/repos/koogawa/AlertOnAppTermination/commits/ce23cb9bd9e02243d0d97d02fea36db4c567ff8d" } ] }, "public": true, "created_at": "2014-01-20T15:44:13Z" }, …
こんな感じのレスポンスが返ってきました。
この中から24時間以内の commits
を見ていけば、今回やりたいことは何とかできそうです。
久々のPHPでハマる
PHPメインの開発現場から離れて早4年。なんとか file_get_contents
関数で指定したURLの内容をすべて読み込めることは覚えていたので、さっそくAPIを叩いてみました。
$response = file_get_contents('https://api.github.com/users/koogawa/events');
しかし、なぜか forbidden でアクセスできず。。
調べてみると、どうやら User-Agent を指定しないとエラーになることがわかりました。
↑こちらの記事がヒントになりました。
動いた
そんなわけで、今日のコミット数をツイートするだけの、誰も得しないbotができあがりました。
今日はGitHubに 2 回commitしました https://t.co/hR6lJY1NE8 Githubitter v0.1
— Og🌗エンジニア🏝宮崎 (@koogawa) 2014年1月22日
今回できなかったこと
- コミットしたソースコードの行数をカウントする
これはもしかすると、各コミットの詳細を取得する
あたりを使えば実現できるのかもしれません。
気が向いたら実装するかも。