Perl:トラックバック

最終更新日時:2010-08-27 18:13:41
Perl

概要


Perl でトラックバックを実装する方法です。

トラックバック送信


以下のモジュールを使用します。
いずれも CPAN から通常の手順でインストール可能です。

・Net::Trackback::Client
・Net::Trackback::Ping

以下は、http://yyy.yyy.yyy/ に対して http://xxx.xxx.xxx/ のトラックバックを送信する例です。

 use Net::Trackback::Client;
 use Net::Trackback::Ping;
 
 my $p = { url      => 'http://xxx.xxx.xxx/',
           title    => 'テスト',
           excerpt  => 'とりあえずテスト',
           blog_name => 'テストブログ',
         };
 
 my $ping = Net::Trackback::Ping->new($p);
 $ping->ping_url('http://yyy.yyy.yyy/');
 my $client = Net::Trackback::Client->new;
 my $msg = $client->send_ping($ping);


なお、$msg-.code でリターンコードが、$msg->to_xml で結果メッセージが取得できます。

改造?


私の環境では、実行時に以下のメッセージが出力されます。

 Possible attempt to separate words with commas at /project/perl/lib/Net/Trackback/Client.pm line 16.


特に実際の実行には問題にならないのですが、気持ち悪いので以下のように修正して回避しています。

Net/Trackback/Client.pm

 16,17c16
 <     #$self->{__no_proxy} = [ qw(localhost, 127.0.0.1) ];
 <     $self->{__no_proxy} = [ qw(localhost 127.0.0.1) ];
 ---
 >     $self->{__no_proxy} = [ qw(localhost, 127.0.0.1) ];


その他補足


各ブログでは、独自に Bot によるトラックバックを回避するための仕掛けをたいてい実装しています。
例えば、アメブロではトラックバックの内容に日本語が含まれていないと 404 Not Found を返すように見受けられます。
このように、プログラム的な問題ではなく、トラックバックの内容的な問題で正常にトラックバックができないことがあり得ますので、注意が必要です。

トラックバック受信


Net::Trackback::Server を使用します。
Net::Trackback::Server は、内部で Net::Trackback::Ping を使用しますので、Net::Trackback::Ping もインストールしておく必要があります。
双方ともに、CPAN で通常の手順でインストール可能です。

以下、受信例です。

 use Net::Trackback::Server;
 use CGI;
 
 my $cgi = new CGI;
 my $ping = Net::Trackback::Server->receive_ping($cgi);
 if ($ping) {
     print $ping->url, "\n";
     print $ping->title, "\n";
     print $ping->blog_name, "\n";
     print $ping->excerpt, "\n";
     Net::Trackback::Server->send_success;
 }
 else {
     Net::Trackback::Server->send_error;
 }


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