メモ: 2008年1月アーカイブ
XML::RSSを使ってRSSを出力する方法です。 文字化けしたりエラーが出たり、半日格闘しました。 結局、下記のようにスクリプトを書いてutf8で保存するとうまく行きました。
#!/usr/bin/perluse strict;
use utf8;
binmode STDIN, ":utf8";
binmode STDOUT, ":utf8";print "Content-type: application/rss+xml\n\n";
use XML::RSS;
my $rss = XML::RSS->new({version => "2.0" , encode_output => 0});
$rss->channel(
title => "RSSテスト",
link => "http://your-domain.com/foo",
description => "XML::RSS の出力テスト",
);
$rss->add_item(
title => "1件目の記事のタイトル",
link => "http://your-domain.com/bar",
description => "1件目の記事の解説",
);$rss->add_item(
title => "2件目の記事のタイトル",
link => "http://your-domain.com/buz",
description => "2件目の記事の解説",
);print $rss->as_string;
Windows XPにActivePerl( perl v5.10)を入れた状態で、XML::RSSモジュールをインストールしようとすると、失敗します。
①CPANモジュールを使った場合
C:\>cpan
cpan> install XML-RSS
...メッセージがごにょごにょ出て、最後はエラー
②PPMを使った場合
C:\>ppm install XML-RSS
ppm install failed: Can't find any package that provides XML-RSS
②のエラーを解決する方法を説明します。
エラーの原因
ActivePerlをインストールした時点で、PPMのレポジトリ(モジュール群が置かれているインターネット上の場所)は、ActiveState社のURLしか登録されていない。このサーバには、XML::RSSモジュールが置かれていないため。
解決方法
レポジトリに、winnipeg大学のURL (perl 5.10の場合、 http://cpan.uwinnipeg.ca/PPMPackages/10xx/ ) を追加しましょう。
C:\>ppm rep add "winnipeg" "http://cpan.uwinnipeg.ca/PPMPackages/10xx/" C:\>ppm rep ← レポジトリ一覧を確認 1 6067 ActiveState Package Repository ← デフォルトのレポジトリ 2 181 winnipeg ← 今追加したレポジトリ C:\>ppm search XML-RSS ← XML::RSSがレポジトリに存在するか検索 1: XML-RSS ← 存在する! C:\>ppm install XML-RSS ← XML::RSSをインストール
これでうまく行くはずです。