F450

ブログ > エントリ > Perlでトラックバックを送信する方法。意外と簡単。

2006/04/03(月) 04:53:59 (JST)

Perlでトラックバックを送信する方法。意外と簡単。

今まで回りくどい書き方ばかりしていたので、最低限プログラミングに関するエントリだけは回りくどさをなくそうかと思っただけで実行するかは不明。なんだそれ。
というわけで、今回はPerlでトラックバックを送信する方法のメモ。
まず前提知識。
基本的にトラックバックはHTTP POSTリクエストで送信します。
指定可能なパラメータにはtitle, excerpt, url, blog_name, charsetなどがあるらしいです。
titleトラックバックのタイトル
excerptトラックバックの概要
urlトラックバック送信元URL
blog_nameトラックバック送信元blog名
charsetトラックバック送信側文字エンコード
※charsetに関しては対応していないブログがある可能性は大きい
────────────────────
もう一つ前提知識として、トラックバックをポストしたときにどんなレスポンスが返ってくるかも知っておいた方がいいと思います。
成功時のレスポンス(例)
<?xml version="1.0" encoding="utf-8"?>
<response>
<error>0</error>
</response>
失敗時のレスポンス(例)
<?xml version="1.0" encoding="utf-8"?>
<response>
<error>1</error>
<message>エラーメッセージ</message>
</response>
さて、Perlでトラックバックを送信するだけなら、トラックバックに関する知識はこの程度でいいと思います。
というか、これ以上の知ったかぶりは僕にはできません。(え。
さて、実際にトラックバックを送信するスクリプトを載せておきます。
※LWP::UserAgentというモジュールが使えることが前提です。
sub postTrackbacksFromMyBlog {
    my %post;                       # トラックバックの内容のハッシュ(連想配列)

    $post{'title'} = 'タイトル';    # ブログのタイトルではなくエントリ(記事)のタイトル
    $post{'excerpt'} = '概要';      # ブログのエントリ(記事)の概要。要約。
                                    # 多くの場合、記事の内容の頭から十数文字〜数百文字が使われるようです。
    $post{'url'} = '送信元URL';     # ブログのURLではなくエントリ(記事)へのパーマリンク(Permalink; 固定リンク)のURL
    $post{'blog_name'} = 'Blog名';  # ブログのタイトル。
    $post{'charset'} = 'euc';       # 送信側の文字のエンコード。
                                    # EUC-JPの場合は'euc'でいいと思いますがブログによって実装が異なっている可能性はあります。

    my @to = (送信先URLの入った配列);    # トラックバックURL。
                                         # 複数のURLに送信するスクリプトにしてみました。というわけで配列。

    foreach (@to) {
        my $error = 1;

        require LWP::UserAgent;
        use HTTP::Request::Common;
        my $ua = LWP::UserAgent->new;
        my $response = $ua->request(POST "$_", \%post);
        if ($response->is_success) {
            if ($response->content =~ m`<error>(.+)</error>`i) {
                $error = $1;
            }
        }

        if ($error) {
            print "$_には送信できませんでした。\n";
        } else {
            print "$_に送信できました。\n";
        }
    }
}
※エラーの判定はXMLのParserを使った方が正確だとは思いますが、とりあえずここでは適当に。
とまぁ、トラックバックのパラメータに何を含めるかさえ分かればそんなに難しいことではないということです。

このエントリへのコメント

  1. dddd
    コメントの投稿に失敗しました。

    2006/12/13(水) 16:18:34 (JST)
※コメントの新規投稿は現在のところ未実装です。