通常、RSS リーダーなどで最新の記事があるかをチェックするには、定期的にサイトをチェックする必要がありました。そこで、データの変更をリアルタイムに通知するためのプロトコル「PubSubHubbub(パブサブハバブ)」が作られ、更新があった場合瞬時に RSS リーダーにプッシュ通知を送ることができるようになりました。これにより、定期的にサイトをチェックして更新がないか確認する必要がなくなり、更新通知を受けてから読み込みに行くこと可能となります。
WordPress ではプラグインの「pubsubhubbub」や「PuSHPress」などを使って実装することができます。
PHP でも curl を使った POST でサーバーと簡単にやりとりすることが可能です。
パラメーターは検索エンジンによって異なりますが、Google の場合 hub.mode と hub.url をサーバー
(http://pubsubhubbub.appspot.com/)に送信することで要求できます。
hub.url とはフィードの URL で、更新したことを伝える場合 hub.mode は「publish」としておきます。
PHP の関数にしたものがこちらです。
<?php // フィードのURL $feed = 'http://example.com/feed/rss/'; pubSubHubbub($feed); function pubSubHubbub($feed){ $url = 'http://pubsubhubbub.appspot.com/'; $post = array( 'hub.mode' => 'publish', 'hub.url' => $feed ); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post)); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded')); curl_setopt($ch, CURLINFO_HEADER_OUT, true); $response = curl_exec($ch); $info = curl_getinfo($ch); //print_r($info); curl_close($ch); return $response; }
フィードの自動探査に対応させる
RSS や Atom フィードを PubSubHubbub に対応させるには、記述を追加する必要があります。
必要とする要素や形式、記述の詳細は送信先サーバーの仕様によって異なりますが、一例として「http://pubsubhubbub.appspot.com」のケースを説明します。
【RSS 1.0 / RSS 2.0 の場合】
<?xml version="1.0"?> <rss xmlns:atom="http://www.w3.org/2005/Atom"> <channel> <atom:link rel="hub" href="http://pubsubhubbub.appspot.com" /> <atom:link rel="self" type="application/rss+xml" href="http://example.com/feed/rss/" /> ... </channel> </rss>
rss 要素(rdf:RDFの場合も同様)に「xmlns:atom="http://www.w3.org/2005/Atom"」を追加し、channel 要素内に link 要素として PubSubHubbub サーバー(hub)と自サイトのフィード URL (self)を追加します。
【Atom の場合】
属性 hub と self の link 要素を追加し、hub に Pubsubhubbub サーバー、self に自サイトのフィード URL を記述します。
<?xml version="1.0"?> <feed xmlns="http://www.w3.org/2005/Atom"> <title>...</title> <link rel="hub" href="http://pubsubhubbub.appspot.com/" /> <link rel="self" type="application/atom+xml" href="http://example.com/feed/atom/" /> ... <entry> ... </entry> </feed>
リアルタイムに更新通知を受けるには、フィードリーダー側も PubsubHubbub に対応している必要があります。
参考:
http://pubsubhubbub.github.io/PubSubHubbub/pubsubhubbub-core-0.4.html