サイトの更新通知を担ってくれるPubSubHubbubというプロトコルがあります。Ping通知よりも自分のサーバーへの負担が小さい上、ほぼ瞬時にフィードリーダーへ最近記事を配信できるようになります。
このページではGoogleが運営しているハブサーバー、https://pubsubhubbub.appspot.com/の使い方について書いていきます。
PubSubHubbubについてはよろしければ下の記事もどうぞ。
- フィード、PINGとPubSubHubbub
- Pubsubhubbub(PUSH)プラグイン「PubSubHubbub」
- PubSubHubbubのもう一つのプラグイン「PuSHPress」
- Joomlaに足りないもの・・・Ping機能など
- 2つPubSubHubbubプラグインの比較
記事の内容
PubSubHubbubハブサーバー
PINGとPubSubHubbubを比較した記事で詳しく書きましたが、PubSubHubbubではフィード自体をサブサーバーに通知します。そしてフィードには使用するハブサーバーを記載しているので、そのハブサーバーを使えばフィードのもともとのソースを見に行かなくても更新を得られるという仕組みになっています。
フィードに記載するハブサーバーには何を使っても問題ないので、プラグイン「PUSHPRESS」は自前のハブサーバーを構築してフィード内に記載してくれるのです。ただ、プラグイン「pubsubhubbub」で標準利用されている二つのハブサーバー以外はあまり使われていないと思います。SuperfeedrとGoogleです。
Superfeedr
Superfeedrはモダンデザインのサイトで使いやすいのでそれほど迷うこともないでしょう。公開のパブリックサーバーを使いこともできますし、ユーザー登録して専用の通知アドレスを使うこともできます。ユーザー登録した場合にはサーバーへの通知が上手く働いているかどうかチェックできます。
Google PubSubHubbubサーバー
Googleが運営しているドメインのappspot.com上に実装されているpubsubhubbub.appspot.comがPubSubHubbub公開サーバーです。

Google PubSubHubbubサーバー
ページ上に使い方が書かれています。
Publish
状態を見ることができるページが二つありますが、ブログの更新通知が上手くできているかをデバッグするのは「Publish」です。「Subscribe」のほうはリーダーアプリ等のデバッグに使うのではないかと思いますが、使ったことがないので知りません。
デバッグ画面

https://pubsubhubbub.appspot.com/publish
Publishのボタンをクリックすると実際に作業する画面に移行します。
上の「Publish」はフィードの代理送信、下の「Publisher Diagnostics」はフィードで送信された内容の確認です。
フィード代理送信「Publish」
テキストボックス内にフィードURLを入れてクリックするとフィードの代理送信をしてくれます。が、画面は全く何も変わりませんので、できているかどうかを確認するには、Chrome拡張「HTTP SPY」のようなものを入れるか、Chromeのページ検証ツール(右クリックで「検証」「Inspection」)で見るしかありません。
送信成功した場合には、HTTPレスポンスコード「204」を返してきます。返してくるのですが、この場合の「成功」は送信を試みるのに成功したというだけであって、他の何も意味していません。
たとえばhttps://google.comとかhttp://www.yahoo.co.jpでも「204」を返しますし、httpS://www.yahoo.co.jp(接続できないURL)を入れても「204」を返してくれます。
ここのURLはHTMLエンコードされてる必要はなかったような気がします。
フィード内容確認「Publisher Diagnostics」
重要なのはこちらのページです。フィードURLをいれてボタンを押すとフィードの診断結果が表示されます。
上のほうに診断結果らしきものが表示されていますが、残念ながらいつも同じ表示で、n/a以外を見たことがありません。
下のLast item retrievedが表示されれ通知は上手くいっています。いくつか気をつけるべき点があります。
フィードアイテムは保存される
診断結果に表示されるのは一つのフィードアイテムだけです。が、サーバー内部に以前の送信内容を保持しているようで、内容の更新、タイトル変更などでフィードにもう一度昔の記事を入れるようにしても、ここには表示されません。
たぶん、ATOM要素のID、GUIDを使って識別しているように思います。
この特徴はもう一方のサーバーsuperfeedrでも同じで、同一のアイテムは一回しか取得されません。(Superfeedrでは最近取得したアイテムの番号がしばらく表示されているのでデバッグには良いです)
URLバリエーションは別として扱われる
アドレスバーに入力する場合には、
- https://tek2tech.com/feed
- https://tek2tech.com/feed/
- https://www.tek2tech.com/feed
- https://tek2tech.com/feed/
などのURLバリエーションは全て同じフィード、https://tek2tech.com/feed/を表示しますが、PubSubHubbubサーバーは別々に扱うので、挙動がおかしい場合は通知送信プログラムで自分が送信しているURLが正しいかどうかを見ると解決するかもしれません。
「Publish」のメニューで送信するURLも同じです。
エラーは表示されない
フィードのエラーは表示されず、単に取得されないだけです。Superfeedrは少し丁寧にエラーを教えてくれます。
フィードバリデーターを使ってエラーをなくしてみましょう。
http://www.feedvalidator.org/ http://validator.w3.org/feed/(ただし、これらのフィードバリデータはhttpsのフィードはチェックできません。フルSSLサイトでもフィードだけSSLを解除しておかないとチェック不能です。)