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で読めるようになっていた。