Hail2u

GitHubのwebhooks経由でのPubSubHubbubによるフィードの更新通知

PubSubHubbubでフィードの更新通知を行う場合、当然RSSやらが更新された後に行う必要がある。GitHub Pagesにウェブサイトをホスティングさせている場合、ビルドにどれくらい時間がかかるかは不定なので、ローカルで行うことは難しい。しかし、当該リポジトリでwebhookをうまく作成してやると、ビルド完了後に自動で更新通知を行わせることが出来るようだ。

GitHubリポジトリへのpushとGitHub Pagesのビルドには一定でないラグがどうしてもある。Jekyllを使っているかどうかが一番大きいが、それだけでもないので、何分経てばビルドが終わり、RSSが更新されているかは確実には言えない。かといってその確認をポーリングで行うのはコストが高い。

そこで確実にビルド後に更新通知を行えるように、リポジトリで設定できるwebhook(Settings→Webhooks & Services)のトリガーのひとつであるPage buildを利用する。ただし、リファレンス実装のPubSubHubbubハブはGitHubのwebhooksが送るデータは解釈できないし、またwebhook側の設定でも通知するデータをカスタマイズすることはできないので、真っ当に利用しようとする場合はプロクシーを作る必要があることになる。

しかし、運が良いことにGoogleのPubSubHubbubハブSuperfeedrで作成したハブPOSTだけでなくGETでもpublishできるので、作成するwebhookのPayload URLでhub.urlパラメーターの値としてRSS等のURLを指定してやればちゃんと更新を通知することができる。

https://pubsubhubbub.appspot.com/publish?hub.mode=publish&hub.url=http://example.com/feed

GoogleのPubSubHubbubハブへ通知する場合はこのようなURLを指定すれば良い。Content-Typeはapplication/x-www-form-urlencodedに、Secretは空のまま、トリガーの設定はLet me select individual events.を選択してPage buildのみにチェックを入れれば良いだろう。

正常に動いているかは当該webhookのログでは確認できないが、最低限204が返ってきていることだけは確認しておくと良い。実際に通知がうまく言っているかどうかはPubSubHubbubへ対応しているFeedlyなどのクライアントで確認するしかないと思う。

このウェブサイトのRSSとFeedlyで確認した限りではきちんと動いてるようだ。少なくとも直近3つの記事を公開した時は1分以内にFeedlyで読めるようになっていた。