パラメータにデータファイル名を指定すると、そのデータファイル内に記述されたRSSフィードのリストを読み込んで、RSSフィードの統合処理を行います。
https://~~~/fumy-rss-merger/mergerss.cgi?データファイル名
例えば、データファイル名として「 favorite.dat 」を指定する場合は、
https://~~~/fumy-rss-merger/mergerss.cgi?favorite.dat
というURLにアクセスすることになります。
データファイルは、CGIと同じディレクトリに置くか、サブディレクトリに置くことができます。ただし、CGIの設置位置よりも浅い階層(上位階層)のファイルを参照することはできません。
どのようなRSSフィードを作成するかの設定は、各データファイル内に記述することで行えます。︵下記参照︶
データファイルの作成
データファイルは、自由なファイル名で作成可能です。サンプルの﹁ sample1.dat ﹂などを参考にすると分かりやすいと思います。
データファイルの拡張子を﹁.dat﹂にすれば、CGI上から一覧で表示されます。︵表示させたくない場合は、﹁dat﹂以外の拡張子で作って下さい。︶
データファイルの中身は、以下のような感じになります。
#RSS
%Shift_JIS
@show
http://www.example.com/feeds/rss.xml
http://www.example.com/feeds/atom.xml
http://feeds.example.net/index.xml
上記の例では、最初の3行でフィードの種類・出力文字コード・出力方法を指定し、4行目以降で統合するRSSフィードのURLを指定しています。
︵3つのRSSフィードを、RSS2.0形式でSHIFT-JISコードで画面に表示する設定です。︶
●#フィードの種類
●﹁ # ﹂に続いて﹁ RSS ﹂と書けば、RSS 2.0フィードを作成します。
●﹁ # ﹂に続いて﹁ RDF ﹂と書けば、RSS 1.0フィードを作成します。
●﹁ # ﹂に続いて﹁ Atom ﹂と書けば、Atomフィードを作成します。
●この行を省略すると、デフォルトの設定が使われます。︵標準ではRSS2.0︶
●%出力文字コード
●﹁ % ﹂に続いて﹁ UTF-8 ﹂と書けば、UTF-8コードで出力します。
●﹁ % ﹂に続いて﹁ Shift_JIS ﹂と書けば、SHIFT-JISコードで出力します。
●この行を省略すると、デフォルトの設定が使われます。︵標準ではUTF-8︶
●出力文字コードは、結合元のフィードと同じにしておいた方が良いような気がします。結果が文字化けしてしまう場合は、元のフィードに合わせてみて下さい。
●@出力方法
●﹁ @ ﹂に続いて﹁ show ﹂と書けば、作成したフィードをそのまま表示します。
●﹁ @ ﹂に続いて﹁ file ﹂と書けば、作成したフィードをファイルに出力します。(※)
●﹁ @ ﹂に続いて﹁ file-ping ﹂と書けば、作成したフィードをファイルに出力し、その後Pingサーバの応答を模倣して返します。(※)
●この行を省略すると、デフォルトの設定が使われます。︵標準ではshow︶
●結合したいフィードのURLを列挙
●結合したいフィードのURLは、1行1URLで何個でも列挙できます。
●﹁ http:// ﹂から始まるURLを指定して下さい。
●同一サーバ内にあるフィードを結合したい場合は、相対パスでも指定できます。
●数に制限はありませんが、最低1つは指定して下さい。︵当たり前ですが︶
結合したいフィードのURL以外は、すべて省略可能です。省略すると、CGI内で指定したデフォルトの設定が使われます。
同じ種類の設定を2回以上記述した場合は、後に書いた方が採用されます。
※ファイル化する際のファイル名には、データファイルと同じファイル名で拡張子を﹁.xml﹂に変えたものが使われます。
たとえば、データファイル名が﹁ apple.dat ﹂なら、出力されるRSS︵Atom︶フィードは﹁ apple.xml ﹂となります。︵データファイル名に制限はありませんが、拡張子をxmlにはしないで下さい。また、拡張子のないファイル名にしないで下さい。何らかの要因でファイル名が生成できなかった場合は﹁default.xml﹂で生成します。︶
ファイルに出力する場合は、ディレクトリに書き込み権限を付加する必要がある点に注意して下さい。︵ディレクトリに書き込み権源を付加できない場合は、生成される予定のファイル名でダミーファイルを作成し、そのファイルに書き込み権限を付加しておけばOKです。︶
書き方の例‥
#RDF
%UTF-8
@show
http://www.example.com/feeds/rss.xml
http://www.example.com/feeds/atom.xml
上記は、2つのフィードを結合させ、「RSS 1.0」形式(RDF)で文字コード「UTF-8」にして画面に表示します。
#Atom
%UTF-8
@file
http://www.example.com/feeds/rss.xml
http://www.example.com/feeds/atom.xml
http://sakura.example.net/~tomoyo/rss/feed.rdf
http://www.example.org/~misaki/feeds/index.xml
上記は、4つのフィードを結合させ、﹁Atom﹂形式で文字コード﹁UTF-8﹂にしてファイルに主力します。︵画面には、出力が完了した旨のメッセージとリンクが表示されます。︶
このデータファイル名が﹁ sakura.dat ﹂だとすると、出力されるファイル名は﹁ sakura.xml ﹂になります。
#RSS
%Shift_JIS
@file-ping
http://www.example.com/feeds/rss.xml
http://www.example.com/feeds/atom.xml
http://sakura.example.net/~tomoyo/rss/feed.rdf
上記は、3つのフィードを結合させ、﹁RSS 2.0﹂形式で文字コード﹁SHIFT-JIS﹂にしてファイルに出力し、その後、標準的なPingサーバと同じ応答︵XML︶を返します。
このデータファイル名が﹁ tomoyo.txt ﹂だとすると、出力されるファイル名は﹁ tomoyo.xml ﹂になります。
※どの行も順不同です。︵設定がURLの後でも構いませんし、途中に混ざっても構いません。ただし、フィードの結合は記述した順番で行われます。︶
CGIのエラーについて
指定されたデータファイルが読めなかった︵見つからなかった︶場合には、その旨のエラーメッセージが表示されます。
※指定フィードが読み込めなかった場合は﹁500 Internal Server Error﹂になる点に注意
データファイル中に指定されたURLに、フィードが見つからなかった場合や、指定されたURLがRSS︵またはAtom︶フィードではなかった場合は、﹁500 Internal Server Error﹂になってしまいます。
この場合、エラーの内容を示すメッセージは表示されないのでご注意下さい。
※たまたま読めなかっただけでも﹁500 Internal Server Error﹂になります
相手先のサーバが混雑しているなどで、フィードを取得しようとした際に﹁503 Service Temporarily Unavailable﹂などのエラーが返ってきた場合、本CGIの動作結果は﹁500 Internal Server Error﹂になります。
RSS/Atomフィード以外のデータを受信してしまうと、すべて﹁500 Internal Server Error﹂になります。
したがって、﹁500 Internal Server Error﹂が出た場合は、指定したURLすべてで正しくRSS/Atomフィードが提供されているかどうかを確認して下さい。