にしし ふぁくとりー:西村文宏 個人サイト

Fumy RSS Feeds Merger : Update Log

  • 2016年09月10日 Ver 2.0.0 公開: 一部のウェブサーバで動作しなかった問題を解決しました。文字コードをUTF-8に。
  • 2007年03月07日 Ver 1.00 公開: 初公開。

CGIの紹介

Fumy RSS Feeds Mergerのサンプル動作画面

複数のRSS(Atom)フィードをいくつでも合体できるCGI

  • 「Fumy RSS Feeds Merger」は、複数のRSSフィードやAtomフィードを結合して、1つの大きなRSS(Atom)フィードを作成できるフリーCGIです。 複数箇所に分散しているフィードを結合して提供したい場合や、複数のフィードを結合してRSSリーダーなどで一括チェックしたい場合などに便利です。
  • 結合するRSS(Atom)フィードの個数に制限はありません。いくつでも結合できます。
  • 結合元のフィードは、RSS1.0(RDF)・RSS2.0・Atomの各種類が混在していても構いません。結合した結果は、RSS1.0(RDF)・RSS2.0・Atomフィードとして出力できます。

結合結果のRSS(Atom)フィードは、直接表示もファイル化も可能

  • 結合した結果のRSS(Atom)フィードは、そのままブラウザ上に表示することもできますし、ファイルに出力することもできます。
  • 直接表示させれば、動的にRSSを結合することになり、常に最新の結合結果が得られます。
  • ファイル化すれば、頻繁にアクセスされてもサーバの負荷を低く抑えることができます。

フィードの結合パターンも複数用意できる

  • 結合するRSS(Atom)フィードのリストは、別途データファイルとして用意します。 ですから、設置するCGIは1つだけで、データファイルさえ追加すれば、いくつでもRSS(Atom)フィードの結合パターンを用意できます
  • 結合結果のRSS(Atom)フィードを、どのXML形式で出力するか、どんな状態(表示するのかファイル化するのか)で出力するか、といった事項もデータファイルごとに設定できます。

Update Pingの送信先(Pingサーバ)に指定可能

  • このCGIをブログツールなどの Update Ping の送信先に指定することで、 ブログツールがRSSフィードを更新すると同時に、そのフィードを元に結合処理を行うことができます。これによって、ブログの更新と同期させることができます。 (※ファイル化する場合に限ります。直接表示する場合は、そもそも動的に最新の情報を結合させるのでPing送信先に設定するまでもなく、常に同期します。)
    ※ファイル化する場合、「Pingサーバ」の標準的な応答を模倣して返すこともできるので、ブログツールにエラーは表示されません。(データファイルに、Pingサーバとして応答する設定を行った場合のみ。)

モバイル対応

  • 管理画面の表示はモバイル端末にも対応しています。スマートフォンやタブレットなどから実行結果を確認することも可能です。

使用は簡単(Perl5とモジュール2つがあれば良いだけ)

  • 必要なPerlは、Perl 5 以上です。多くのサーバで問題なく利用できるでしょう。
  • データファイルは、テキストエディタで簡単に作れます。基本的には、結合したいRSS(Atom)フィードのURLを列挙するだけです。
  • このCGIを動作させるためには、「XML::TreePP」モジュールと「XML::FeedPP」モジュールが必要です。 これらのモジュールがサーバになくても、このCGIと同じディレクトリに「XML」サブディレクトリを作成し、そこに2つのモジュール(TreePP.pm と FeedPP.pm)を配置するだけで使えます。

この「Fumy RSS Feeds Merger」はフリーCGIとして提供しており、どなたでも無料でご利用頂けます。個人サイト・法人サイト共に、商用サイト・非商用サイト等の区別なく、ご自由にご利用下さい。 ウェブ作成業者等による代行設置も可能です。そのほか詳しくはCGI使用条件(ライセンス)項目をご参照下さい。

CGIのダウンロード

CGI「Fumy RSS Feeds Merger」一式は以下のリンクからダウンロード頂けます。ZIP形式で圧縮していますので、ダウンロード後に展開して下さい。 セットアップ方法は後述の「CGIの設置方法」をご参照下さい。

[Version] 2.0.0 [File] frssmerger.zip [Size] 9.32KB [Date] 2016/09/10.
最新版 Ver 2.0.0 をダウンロードする (このサイトから)

※旧バージョンからのアップグレード(バージョンアップ)方法については、下記の解説「バージョンアップ方法」をご参照下さい。

必須モジュールのダウンロード

XML::FeedPP , XML::TreePP

このCGIには、以下の2つのモジュールが必要です。 サーバにインストールされていない場合は、以下の公開サイトからダウンロードして、CGIを設置したディレクトリ内に作成した「XML」サブディレクトリに格納する必要があります。

上記のモジュール作者サイトのほか、CPANからも入手可能です。
もし、サーバにPerlモジュールをインストールする権限があるならppmを使ってインストールすることもできますが、CGI本体を設置したディレクトリにXMLサブディレクトリを作成してそこに置く方が楽かも知れません。

CGIの動作サンプル

動作サンプルを見たい場合や、実際のRSSフィード結合結果を見てみたい場合は、下記のテスト運用版をご覧下さい。

サンプルデータファイル3つが公開されています。(当CGIの配布パッケージに含まれているサンプルファイルと同じです。)

  • sample1.dat は、3つのRSSフィードを結合して、結合結果をそのまま出力(表示)します。
  • sample2.dat は、2つのRSSフィードを結合して、結合結果を sample2.xml ファイルに出力します。
  • sample3.dat は、2つのRSSフィードを結合して、結合結果を sample3.xml ファイルに出力した上で、Pingサーバの応答を模倣(XMLを表示)します。

CGIの設置方法・設置環境・カスタマイズ方法

CGIの設置環境要件

  • CGIは Perl で記述しています。動作には、Perl 5 が必要です。(※CGIが設置可能なサーバであれば問題ないでしょう。)
  • Perlモジュールとして、以下の2つのモジュールが必須です。
  • これらのモジュールがサーバにインストールされていない場合は、上記のリンク先からダウンロードして下さい。(たいていインストールされていないと思いますので、今ダウンロードしておくことをお勧めします。)

CGIの設置方法(パーミッションの設定)

ZIPを展開したファイルの内、説明用の「README.TXT」ファイルを除くファイルを、同一のディレクトリにアップロードして、下表に記したパーミッション(アクセス権/属性)に設定して下さい。

ファイル名パーミッション補足
▼実行ファイル(必須)
mergerss.cgi755 (705)メインCGI
▼データファイル(必須)
sample1.dat など644 (604)データファイル(読み込むだけ)

※データファイル名は何でも自由に付けることができます。データファイルの個数に制限はありません。サンプルとして付属しているデータファイルは不要ならアップロードしなくて構いません。
※結合したRSS(Atom)フィードをファイル化する場合は、このCGIを格納するディレクトリそのもののパーミッションを「777」にする必要がある場合があります。書き込みに失敗するようなら「777」に設定して下さい。(※ディレクトリを777にできない場合やしたくない場合は、生成される予定のファイル名でダミーファイルを作成しておき、そのファイルのパーミッションを「666」(=書き込み権限を付加)にしておけばOKです。このCGIは、余計な一時ファイルなどは生成しませんから、出力するのはユーザが指定したファイルのみです。)

モジュールも一緒に格納する場合は、次のパーミッションに設定して下さい。

ファイル名パーミッション補足
▼Perlモジュール
TreePP.pm644 (604)XMLを解析・作成するPerlモジュール
FeedPP.pm644 (604)RSS・RDF・Atomフィードを解析・作成するPerlモジュール

※上記のPerlモジュールは、CGIと同じディレクトリ内に「XML」というサブディレクトリを作成し、そこにアップロードします。(詳しくは後述のディレクトリ構造図を参照)

※上記の「755」や「644」などのパーミッション(アクセス権/属性)値は、ウェブサーバによっては「705」や「604」のように真ん中(=グループ権限)をゼロにしないといけない場合もあります。詳しくはウェブサーバのヘルプをご参照下さい。
※ZIP内に含まれている「README.TXT」ファイルは、アップロードしないで下さい。解説を記述したただのテキストファイルです。

ウェブサーバへのファイルのアップロード方法

アップロードは、すべて「アスキーモード」(テキストモード)で行います。(Perlモジュールもテキストモードでアップロードします。)

ディレクトリ構造

ディレクトリ構造は以下のようにして下さい。

CGIとデータは同じディレクトリに配置。モジュールはXMLサブディレクトリに配置。

※Perlモジュールをアップロードしない場合は、XMLサブディレクトリは不要です。

※文字コードについて

配布ファイルの文字コードは、UTF-8になっています。
文字コードは、UTF-8のままアップロードされることをお勧めしますが、他の文字コードを使用したい場合は、全ファイルを使用したい文字コードに変換した上でアップロードして下さい。一部のファイルだけ文字コードを変えると、文字化けが起こります。 文字コードを変更した場合は、CGIの39行目にある文字コードの記述を修正する必要がある点に注意して下さい。 よく分からない場合は、文字コードを変換せずUTF-8コードのままご使用下さい。

※サンプルデータについて

付属の sample1.dat、sample2.dat、sample3dat は、例示用のサンプルデータファイルです。 中身をテキストエディタで閲覧すると、データファイルの書き方の把握の参考になるでしょう。不要ならサンプルデータはアップロードする必要はありません。 (※このCGIには、データファイルを作成する機能はありませんので、データファイルはローカル上でテキストエディタなどを使って自力で作成した上でアップロードして下さい。)

バージョンアップ方法

以前のバージョンを既にお使いの場合は、本体CGIである mergerss.cgi のみを上書きアップロードして下さい。 それ以外のファイルをアップロードする必要はありません。

なお、CGIソースに直接記述する形の設定は、上書きするとデフォルト設定に戻ってしまいます。アップロードする前に、以前と同じように編集しておいて下さい。

※データの互換性について

データファイルの記録形式に下位互換性がありますので、以前のデータはそのまま引き継げます。(Ver.1用のデータはそのままVer.2でも使えます。)

CGIの設置方法(CGIファイルの書き換え)

* mergerss.cgi をエディタで開いて、次の箇所を必要に応じて書き換えます。

1行目以外は、特に書き換える必要はありません

(1行目) #! /usr/bin/perl
Perlの位置を必要に応じて書き換えます。 /usr/local/bin/perl など。
(35行目) my $default_feed_type = 'RSS';
生成フィードの種類を指定しなかった場合の種類を指定( RSS , RDF , Atom )
(36行目) my $default_output = 'show';
直接表示するかファイル化するかを指定しなかった場合にどうするか( show , file , file-ping )
-表示する場合は「show」を、ファイル化する場合は「file」を指定。ファイル化した後、Pingサーバの応答を模倣する場合は「file-ping」を指定。
(37行目) my $default_charcode = 'UTF-8';
生成フィードの文字コードを指定しなかった場合の文字コード( Shift_JIS , UTF-8 )

※36~38行目の指定は、「どうするかが指示されなかった場合」の設定です。実際にどんな種類のフィードをどうやって出力するかは、各データファイル内に記述することで指定できます。

(39行目) my $cgi_charcode = 'UTF-8';
このCGI自体の文字コード。標準では「UTF-8」。CGIの文字コードを変更した場合は、その文字コード名に修正して下さい。( Shift_JIS , UTF-8 , EUC など )

シンプルなCGIなので、特別なカスタマイズはありません。
データファイルの作成方法は、下記をご参照下さい。(サンプルのデータファイルを見るだけでも分かると思います。)

CGIの使用方法

以下は「Fumy RSS Feeds Merger」の簡単な使用方法です。
シンプルなインターフェイスのCGIなので、説明を読まなくても使えるとは思いますが。

CGIの使用(管理画面の表示と、フィードの結合)

CGIをパラメータなしで実行すれば、管理画面(データファイルの一覧)が表示されます。

パラメータにデータファイル名を指定すると、そのデータファイル内に記述された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フィードが提供されているかどうかを確認して下さい。

更新履歴

[Ver 1.00 → Ver 2.0.0] (2016/09/10)
一部のウェブサーバで動作しなかった問題を解決しました。 デフォルトの文字コードをUTF-8に変更しました。

[Ver 1.00] (2007/03/07)
初公開。

著作権と免責

  • このCGIの著作権は、西村文宏(にしし)にあります。
  • このCGIを使用した結果、使用者にいかなる損害を与えたとしても、製作者および公開者は、その責を一切負いません。使用者個人の責任でご使用下さい。

CGI使用条件(ライセンス)

■どなたでも使用可能
個人サイト・法人サイト・商用サイト・非商用サイト等の種別を問わず、どなたでも無料でご使用頂けます。一般公開サイト・非公開サイトなど、どこにでも設置してご使用頂けます。
■禁止事項
CGIの著作権表示は、削除したり編集したり隠したり極端に見えにくくしたりしないで下さい。(どうしても削除して運営したい場合はお問い合わせ下さい。複数のライセンス形態を用意しています。)
■代行設置可能
ウェブ作成業者(個人事業・法人問わず)等による無償または有償での代行設置にお使い頂くことも可能です。ただし、CGIそのものを販売してはならず、CGIの著作権表示は(上記項目の通り)削除したり修正したり隠したりしないで下さい。また、CGIに関して作者は保証もサポートもしない点をあらかじめご了承下さい。

フィードバックのお願い(ご感想・ご要望歓迎)

このCGIを使ってみたご感想、ご要望などをぜひお送り下さい。
ご要望には(作者の興味が続いている限り)できるだけ応じたいと考えています。
ご要望等をお送り頂く先はメールでも構いませんし、掲示板でも構いません。お気軽にどうぞ。

設置された報告だけでも歓迎です。 活用されていることが分かると、開発の励みになりますので(^-^)、ぜひよろしくお願い致します。

謝辞

XML::FeedPP と XML::TreePP という、非常に高機能なPerlモジュールを開発された作者の方に感謝申し上げます。 このCGIのメイン機能は、ハッキリ言ってこのモジュールをそのまま使っているだけです。(^_^;)

--- 当サイト内を検索 ---