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 通知を送る方法は以上です。