このブログを検索

2010/02/12

RSS@perl

#!/usr/bin/perl -w
use strict;
use XML::RSS;
use encoding 'utf8';

use Jcode;


my $rss = new XML::RSS (version => '1.0', encode_output => 0);
    $rss->channel(
    title        => "example.com",
    link         => 'http://example.com',
    language => 'ja',
    description  => "description",
);


open SUBBACK, "<./subback.txt" or die;

while (<SUBBACK>){
    if(/(\d*),(.*),(\d*)/){
        my $jp = $2;
        Jcode::convert( \$jp , 'utf8', 'sjis');
        $rss->add_item(
            title       => "$jp",
            link        => "http://example.com/cgi-bin/bbz/main.cgi",
            description => "$3",
        );
    }
}

close SUBBACK;

print "Content-type: application/xml\n\n";

print $rss->as_string;

やっと書けた・・・。utf8フラグだのなんだのと悩んだが、

encode_output => 0


がポイントだったようだ。

ある方のソースを参考にさせてもらったのだが、そのままではうまくいかず、


use utf8;
binmode STDIN, ":utf8";
binmode STDOUT, ":utf8";


を、以下のようにした。

use encoding 'utf8';


めんどくさいねえ・・・。この辺も、仕様じゃなくてバグが潜んでるんじゃないかと思えてならない・・・。

あと、cgiはいきなりサーバーにあげず、とりあえずwinで動かしてエラーがないことくらいは確認するようにした。さくらと同じ環境をローカルに作れば一番いいんだよな・・・virtual pcでできるかな?