PubSubHubbub

最終更新日時:2017-06-29 19:15:06
PHP Perl Web系

PubSubHubbub は、平たく言えばインターネット上のサーバにデータが更新されたことを通知するためのプロトコルです。
現状では、目的の URL を Google 等にリアルタイムに通知することにより、いち早くインデックスしてもらうために使われることが多いようです。

自分も実際に使ってみましたが、PubSubHubbub を使って通知すると、速攻でロボットがやってきます(笑)

PubSubHubbub は実際には Google に直接通知するわけではありません。
中継 (Hub) サーバに通知することになります。
以下の2つがメジャーな Hub のようです。

https://pubsubhubbub.superfeedr.com
https://pubsubhubbub.appspot.com

ちなみに、後者が Google の Hub になります。

PubSubHubbub は単なるプロトコルなので、実際の実装は様々です。
PubSubHubbub の github にいろいろありますので、お好みのものをチョイスするのが良いと思います。

以下、PHP と Perl について紹介します。


PHP での使用方法


pubsubhubbub-php というものを使ってみました。
以下から取得可能です。

https://github.com/joshfraser/pubsubhubbub-php

確認してみれば分かりますが、単なる publisher.php という1ファイルからなるモジュールです。
使い方も簡単。
サンプルも付いていますが、以下のような感じです。

 include("publisher.php");
 $hub_url = "http://pubsubhubbub.appspot.com/publish";  // Google の Hub を指定
 $p = new Publisher($hub_url);
 if ($p->publish_update('http://xxx.xxx.xxx.xxx/index.html')) { // 目的の URL を指定
    // 成功
 } else {
    // 失敗
    print_r($p->last_response());
 }


Perl での使用方法


perl-publisher というものを使ってみました。
以下から取得可能です。

https://github.com/pubsubhubbub/perl-publisher

perl-publisher は、https な Hub に通知する場合には、LWP::Protocol::https モジュールが必要になりますのでご注意。

こちらも使用方法はとても簡単。以下のような感じです。
2つの Hub に通知を送る例です。

 use Net::PubSubHubbub::Publisher;
 my @hub = ('http://pubsubhubbub.appspot.com/publish',
            'https://pubsubhubbub.superfeedr.com');
 
 die if !$ARGV[0];
 my $url = $ARGV[0];
 
 for my $i (@hub) {
    my $pub = Net::PubSubHubbub::Publisher->new(hub => $i);
    if ($pub->publish_update($url)) {
        printf("%s to %s is OK\n", $url, $i);
    }
    else {
        printf("%s to %s is failed.\n%s\n", $url, $i, $pub->last_response->status_line);
    }
 }


ほとんどスキームは PHP と同じですね。

お問い合わせは 掲示板 にて。