RssNew関数

「#--RssNew」で検索すると確実にヒットします。

この関数は、入力情報を元に、RSSファイルを新規作成します。

引数はありませんが、RSSファイルを新規作成するのに必要な入力情報を使用しています。

戻り値もありませんが、作成したRSSファイルはDownload関数にまわしています。

それでは、処理の流れを見てみましょう。

RSS新規作成

RSSファイルの作成には、XML::RSSモジュールを使います。

my $XML__RSS = new XML::RSS (version => $PARAM->{'version'});

作成するRSSのバージョンも一緒に指定しています。

入力情報の取得

入力された情報を取得し、RSSの構成要素ごとに整理します。

my $input = &SplitPart($PARAM->{'version'});
my %channel = %{$input->{'channel'}};
my %image = %{$input->{'image'}};
my %item = %{$input->{'item'}};

SplitPart関数で処理された入力情報は、連想配列リファレンス形式で帰ってきます。

そこからさらにわかりやすくするため、チャンネル、イメージとアイテム用の連想配列に代入しなおしています。

入力チェック

入力された情報の中で、チャンネルとアイテムをチェックします。

イメージは、サイトバナーがない場合もあるのでチェックしません。

if (my $message = &InputCheck(\%channel)) {
my $size = length($message);
&Download('text/plain', $size, 'error.txt', $message);
}
if (my $message = &InputCheck(\%item)) {
my $size = length($message);
&Download('text/plain', $size, 'error.txt', $message);
}

入力に不備があると、InputCheck関数からエラーメッセージが帰ってきます。

すると、if文が成立し、Download関数が呼び出されてこの関数終了です。

イメージの作成

サイトバナーがあれば、イメージに必要な情報をそろえます。

if ($image{'url'}) {
$image{'title'} = $channel{'title'};
$image{'link'} = $channel{'link'};
}

バナーファイルのURLは、連想配列の変数「$image{'url'}」に格納されています。

もし何らかの文字列が入っていれば、if文が成立しイメージ情報を作成します。

イメージ情報は、最低でもバナーファイルのURL、タイトルとリンク先が必要です。

なので、残りのタイトルとリンク先についてはチャンネルから引用します。

アイテムの作成

アイテムを作成していきます。

$item{'description'} = "<![CDATA[" . $item{'description'} . "]]>";

アイテムの概要(description)を、「<![CDATA[」と「]]>」ではさみます。

これは、もし概要の文字列中にHTMLタグが使われていた場合、RSSのタグ(XMLのタグ)と区別するためです。

さらに、RSS新規作成画面で「TIME STAMP」をチェックされた場合の日付情報の追加処理をします。

if ($PARAM->{'version'} eq "1.0") {
$item{'dc'} = {date => &GetNowRss1Format};
} elsif ($PARAM->{'version'} eq "2.0") {
$item{'pubDate'} = &GetNowRss2Format;
}

RSS1.0では、タイトル、リンク先と概要以外の情報は「dc」内にまとめて記述するように決められています。

なので、「dc」内の「date」に、GetNowRss1Format関数で作成した現在の日付情報を代入します。

RSS2.0では、そのような規則はないので、普通に「pubDate」要素に、GetNowRss2Format関数で作成した現在の日付情報を代入します。

RSS情報のセット

ここまで作成してきましたRSS情報をセットします。

$XML__RSS->channel(%channel);
$XML__RSS->image(%image);
$XML__RSS->add_item(%item);

これで、XML::RSS($XML__RSS)に、チャンネル、イメージとアイテムがセットされました。

さらに頭で、RSSバージョンもセットしていますから、これでRSSを新規作成できる情報がでそろいました。

ダウンロード

最後にRSSファイルをダウンロードできるようにします。

my $content_type = 'text/xml';
my $file_name = 'rss.xml';
my $file_content = &Utf8Flag($XML__RSS->as_string, 'off');
my $file_size = length($file_content);
&Download($content_type, $file_size, $file_name, $file_content);

まずは、コンテンツタイプとファイル名を指定します。

次に、前述でセットしたRSS情報を元に、RSSファイルを新規作成します。

「$XML__RSS」の「as_string」つまり、「$XML__RSS->as_string」を呼び出すことにより、RSSファイルを取得できます。

さらにこの後、ファイルサイズを計測する必要があるので、Utf8Flag関数でUtf8フラグを解除します。

以上、ダウンロードに必要な情報がそろったら、Download関数に渡してこの関数を終了します。