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>
のように記録されるはずです。これで、サブスクライバへの配信を確認できます。