Hubのテストをするには、まず
の2つを用意します。
ここではフィードをAtomで記述することとします。それは、たとえば次のようなものです。
<?xml version="1.0" encoding="utf-8"?> <feed xmlns="http://www.w3.org/2005/Atom"> <title>Sample</title> <subtitle>Sample feed</subtitle> <id>abc</id> <link rel="hub" href="https://pubsubhubbub.appspot.com/" /> <link rel="self" href="http://example.com/topic.atom" /> <author> <name>TEST</name> </author> <updated>2013-01-01T00:00:00+09:00</updated> <entry> <title>Entry1</title> <id>e1</id> <updated>2013-01-01T00:00:00+09:00</updated> </entry> <entry> <title>Entry2</title> <id>e2</id> <updated>2013-01-01T00:00:00+09:00</updated> </entry> </feed>
ここで重要なのは、
<link rel="hub" href="https://pubsubhubbub.appspot.com/" /> <link rel="self" href="http://example.com/topic.atom" />
の2行で、1行目でGoogleのHubを使用することを明示しています。2行目のhref属性の値はこのフィード自身のURLで、フィードを配置するURLに合わせて書き換えます。
サブスクライバは、PHPで次のように記述します。この例ではチャレンジコードを受け取ったらそれを出力し、それ以外ではリクエストのbodyをファイルに保存します。
<?php if( isset( $_GET[ 'hub_challenge' ] ) ) { header( 'HTTP/1.1 200' ); header( 'Content-Type: text/plain' ); echo $_GET[ 'hub_challenge' ]; file_put_contents( 'challenge.txt', print_r( $_GET, TRUE ) ); } else { $contents = file_get_contents( 'php://input' ); file_put_contents( 'new-feed.txt', $contents ); }
これらのファイルをサーバにアップロードしたら、そのURLをメモしておきます。ここでは仮に、
とします。
次に、サブスクライバをHubに登録します。Google Pubsubhubbub Hub - Subscription debugへアクセスし、[Subscribe/Unsubscribe]の各項目に、
のように入力し、[Do It!]をクリックします。実行後の画面には何も表示されませんが、HTTPのレスポンスで'HTTP/1.1 202 Accepted'が返されれば完了です。
このときサブスクライバの確認のため、Hubからチャレンジコードを含めたリクエストが送られます。サブスクライバが正しく処理できていれば、それがサーバに
Array ( [hub_topic] => http://example.com/topic.atom [hub_challenge] => 0123456789 [hub_mode] => subscribe [hub_lease_seconds] => 432000 )
のように、challenge.txtのファイル名で記録されるはずです。
Hubへフィードの更新を通知するには、Google Pubsubhubbub Hub - Publisher debugへアクセスし、[Publish]の項目に、
のように入力し、[Publish]をクリックします。このときブラウザの表示は変化しませんが、それで正常です。
Hubへ更新を通知をすると、Hubはサブスクライバへフィードを配信します。今回用意したサブスクライバでは、そのフィードは[new-feed.txt]のファイル名でサーバに記録されます。ただし、この段階ではフィードを更新していないため、実際にはサブスクライバへは配信されないはずです。
ここでフィードを更新します。フィードのfeed要素に、
<entry> <title>Entry3</title> <id>e3</id> <updated>2013-01-01T00:00:00+09:00</updated> </entry>
のように<entry>を追加してみます。そして、ふたたびPublisher debugのページで更新を通知します。そうすると、今度はサブスクライバへフィードが配信されるはずです。配信された内容は、サーバに[new-feed.txt]の名前で
<?xml version='1.0' encoding='UTF-8'?> <feed xmlns="http://www.w3.org/2005/Atom"> <title>Sample</title> <subtitle>Sample feed</subtitle> <id>abc</id> <link rel="hub" href="https://pubsubhubbub.appspot.com/" /> <link rel="self" href="http://example.com/topic.atom" /> <author> <name>TEST</name> </author> <updated>2013-01-01T00:00:00+09:00</updated> <entry> <title>Entry4</title> <id>e4</id> <updated>2013-01-01T00:00:00+09:00</updated> </entry> </feed>
のように記録されるはずです。これで、サブスクライバへの配信を確認できます。