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