work.log

元エンジニアの備忘録的ブログ

PerlでPubSubHubBubサーバにPublish通知を送る

投稿:2014-08-07 18:28  更新:

Perl から PubSubHubBub のサーバに Publish 通知を送る方法です。

下記記事で PubSubHubBub 対応のフィードを作ったので、後はアプリケーションから更新通知を出してこの RSS フィードを読み取ってもらおうという感じです。

Publish 通知は下記パラメータをサーバに POST で送るみたいです。

  • hub.mode = publish
  • hub.url = RSS 2.0 か ATOM フィードの URL
  • Content-Type は application/x-www-form-urlencoded で POST する

WordPress プラグインの WP-PubSubHubbub は下記のようなリクエストを送信している模様。

見難いので & で改行入れています。

hub.mode=publish&
hub.url=http://example.jp/feed/atom&
hub.url=http://example.jp/feed/rss&
hub.url=http://example.jp/feed/rdf&
hub.url=http://example.jp/feed

無駄な URL も指定しているように見えるが、今回はこのような感じに POST リクエストを作ってみました。

#!/usr/bin/perl

use strict;
use warnings;
use LWP::UserAgent;
use HTTP::Request::Common;

    my $post = {
           url => 'http://pubsubhubbub.appspot.com/',
           data => {
               'hub.mode' => 'publish',
               'hub.url'  => 'http://example.jp/feed'
           }
       };

    &http_post($post);

sub http_post {

    my $post = shift || return(0);

    my $lwp  = '';
    my $req  = '';

    $lwp = LWP::UserAgent->new(timeout => 10);
    $req = POST($post->{url}, [$post->{data}]);
    $lwp->request($req);

    return;

}

Content-Type は何もしなくても application/x-www-form-urlencoded になってたので後はこのまま送信してみる。

すると、こんなアクセスログが。

***.***.***.*** - - [07/Aug/2014:17:27:26 +0900] "GET /feed HTTP/1.0" 200 74077 "-" "AppEngine-Google; (+http://code.google.com/appengine; appid: s~pubsubhubbub-hrd)"

リクエストは送信しても特に何も返してくれないっぽいけど、上記ログが即行できてたから上手くいってると思う。

Publish 通知を送る方法は以上です。

参考にしたページ
PubSubHubBubのpubに対応する

おすすめのVPSサーバ

  • OSが選べる
  • VPS同士でLANが組める
  • 複数台構成向き

このブログで使っています。

  • 転送量が多いサービスに
  • 借りてるのは3年間一度もdown無し!

よく見られている記事

  • 本日
  • 週間
  • 月間