koogawa blog

iOS、Android、foursquareに関する話題

GitHub APIを使って今日のコミット数をツイートするbotを作った

去年、こんなことをつぶやきました。

誰か作ってくれないかな〜、なんて密かに期待していたのですが、もちろん誰も作ってくれるわけなどなく(誰も得しないし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ができあがりました。

今回できなかったこと

これはもしかすると、各コミットの詳細を取得する

あたりを使えば実現できるのかもしれません。

気が向いたら実装するかも。