Page関数

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

この関数は、状況に応じてHTMLを準備し表示させます。

つまり、最初の入力画面から、RSS表示画面、エラーメッセージの表示画面にいたるまでこの関数で行います。

引数は、この関数を呼び出したときの状況を表す文字列と、何らかのメッセージがあればその文字列を受け取ります。

戻り値はありません。

この関数を見ていただければわかるように、最初に表示されるURL入力画面や、エラーメッセージの表示画面は、何も難しいところはないと思います。

問題は、RSS表示画面だと思うので、RSS表示についてみていきましょう。

RSS表示

取得したRSSファイルの基本的な情報とRSSを構成している各要素は、すでにAnalyze関数で各要素に分けられグローバル変数「$RSS」に連想配列のリファレンス形式で格納されています

なので、それをすべて表示させてやればよいわけです。

RSS情報の表示

RSSファイルの基本的な情報として、ここではRSSファイルのURLと、そのサイズを格納しています。

RSSURLは「$RSS->{'feed'}」。

ファイルサイズは「$RSS->{'size'}」。

バージョンは「$RSS->{'version'}」。

RSSのチャンネル

RSSのチャンネルを構成している各要素は、以下の変数に格納されています。

サイトタイトルは「$RSS->{'channel'}->{'title'}」。

サイトURLは「$RSS->{'channel'}->{'link'}」。

サイト概要は「$RSS->{'channel'}->{'description'}」。

そのほかの情報は、RSSのバージョンにより格納方法が異なります。

RSS1.0では連想配列「%{$RSS->{'channel'}->{'dc'}}」。

RSS2.0では連想配列「%{$RSS->{'channel'}}」。

つまり、RSS1.0では「dc」内に格納されているのに対し…。

RSS2.0ではサイトタイトルなどと一緒になっているということです。

このあたりの違いを考慮しプログラミングしていく必要があります。

この関数では、新たに連想配列「%channel_dc」を作成し、そこに目的の情報を格納しなおし、まとめて表示させるということをしています。

RSSのイメージ

RSSのイメージを構成している各要素は、以下の変数に格納されています。

画像URLは「$RSS->{'image'}->{'url'}」。

サイトURLは「$RSS->{'image'}->{'link'}」。

代替テキストは「$RSS->{'image'}->{'title'}」。

RSSのアイテム

RSSのアイテムは、配列「@{$RSS->{'items'}}」に格納されています。

1つのアイテムにつき1つの要素ということになります。

例えば、7つの記事があった場合、配列の構成要素も7つだということです。

そして今回作成したRSSリーダーでは、forループを使って要素を1つずつ変数「$item」に代入させてから処理させています。

それでは、各要素(1つのアイテム)につき使用されている変数を見ていきましょう。

ページタイトルは「$item->{'title'}」。

ページURLは「$item->{'link'}」。

ページ概要は「$item->{'description'}」。

そのほかの情報は、チャンネルのときと同様にRSSのバージョンにより格納方法が異なります。

RSS1.0では連想配列「%{$item->{'dc'}}」。

RSS2.0では連想配列「%{$item}」。

つまり、RSS1.0では「dc」内に格納されているのに対し…。

RSS2.0ではページタイトルなどと一緒になっているということです。

このあたりの違いを考慮しプログラミングしていく必要があります。

この関数では、新たに連想配列「%item_dc」を作成し、そこに目的の情報を格納しなおし、まとめて表示させるということをしています。

整形表示

前述しました各変数を使えば、取得したRSSファイルの情報を表示できますが注意すべき点があります。

それは、見やすく整形されていないというところです。

例えば、アイテムのページ概要は、ページのコンテンツがそのまますべて載っていたり、HTMLタグがついていたりします。

もちろん、RSSによってはそのあたりのことまで考慮し、本当に概要だけ載せているところもありますが少ないです。

なので、RSSリーダーとして情報を表示する場合には、こちらである程度見やすく整形してやる必要があります。

この関数では、タイトルと概要はCompress関数で、日付はDate関数で整形しています。

以上です。

これで取得したRSSの情報をすべて表示することができました。