KissReaderのユーザーズマニュアルです。 このマニュアルは、配布ファイルにも同梱されています。 最新版は 「KissReaderのユーザーズマニュアル(最新版)」にあります。
KissReader(キス・リーダー)は、 Perlで書かれたシンプルなRSSリーダーです。
使い方は単純。
各サイトがRSSの中に本文を含めて配信している場合には、それもHTMLになります。 ですから、KissReaderを動かして、ローカルに保存されたHTMLを、 オフラインでゆっくり読むこともできます。
KissReaderが出力するHTMLは、ユーザが自由にカスタマイズできます。
WebベースのRSSリーダーが遅いと感じる人、 RSSのURLをさくさく登録・コメントアウトしたいという人、 普段コマンドラインベースで作業している人には便利です。 GUIでなきゃやだという人には不向きです。
KissReaderはフリーソフトウェアです。 ライセンスはPerlと同じです。
KissReaderをお使いになってみて、 ご感想やご意見などがありましたら、 どんなことでも構いませんので、 ぜひ フィードバックをお願いいたします。
最新版のKissReaderは、結城浩のWebサイトからダウンロードできます。
結城はWindowsの場合しか試していません。 他の環境で動作した方がいらっしゃいましたら、 ぜひご連絡ください。
KissReaderが使っているXML::RSS::Parserモジュール(Timothy Appnelさんによる)は、 特定のRSSのバージョンによらず、 well-formedでRSSに似ていれば、がんばって処理しようと試みます。 KissReaderもそれに準じた動作をします。 RSS 0.91, 1.0, 2.0では動作しているようです。 ATOMでは動作は確認できていません。
0. 必要なものを用意します。
1. ダウンロードしたzipファイルを展開します。
2. 展開すると kissXXX というディレクトリが作られます。XXXはバージョン番号です。
3. kissXXX のディレクトリに移動します。そこにkissreader.plとurl.txtがあります。
4. コマンドラインから perl kissreader.pl url.txt を実行します。
これで「結城浩の日記」と「www.textfile.org」という2サイトのRSSを取得しにいきます。
> perl kissreader.pl url.txt Reading (1/2) http://www.hyuki.com/diary/rss Reading (2/2) http://www.hyuki.com/tf/?rss 2 channels are updated. ./html/index.html is created.
5. ブラウザで ./html/index.html を見ます。
注意
動作させると、以下のようなメッセージが出る場合があります。
Parse error: Couldn't open encmap shift_jis.enc:No such file or directory.
これは /Perl/site/lib/XML/Parser/Encodings/shift_jis.enc
というファイルが存在しないために発生します。
この対処方法については、
「shift_jis.encがオープンできないとき」を参考にしてください。
manual.html
KissReaderユーザーズマニュアル
kissreader.pl
KissReader本体
url.txt
サンプルの「RSS一覧」(run.batで使用)
news-url.txt
サンプルの「RSS一覧」(news.batで使用)
run.bat
サンプルバッチファイル
news.bat
サンプルバッチファイル
lib/HTML/Template.pm
lib/XML/RSS/Parser.pm
lib/XML/RSS/Parser/Element.pm
lib/XML/RSS/Parser/Feed.pm
lib/Class/XPath.pm
lib/Yuki/RSSReader.pm
使用するモジュール
css/default.css
css/tight.css
各テーマで使用するスタイルシート
theme/default/footer.txt
theme/default/header.txt
theme/default/index.txt
theme/default/session.txt
defaultテーマ用のテンプレートファイル
theme/tight/footer.txt
theme/tight/header.txt
theme/tight/index.txt
theme/tight/session.txt
tightテーマ用のテンプレートファイル
KissReaderのコマンドラインで指定するファイルが「RSS一覧ファイル」になります(たとえばurl.txt)。
巡回したいサイトがあったら、そのRSSのURLをurl.txtに書きます。 1行には1個のURLを書きます。行頭に#をおくとコメントになります。 たとえば次のように書きます。
# # KissReader Sample url.txt # http://www.hyuki.com/diary/rss http://www.hyuki.com/tf/?rss # http://slashdot.jp/slashdot.rss
KissReaderのコマンドラインは次のような形式です。
perl kissreader.pl [オプション] url.txt
オプションの後に書いたファイル名が「RSS一覧ファイル」になります。 このファイルを切り替えれば、別の巡回リストを作ることができます。
--version
バージョン番号を表示します。
-d
デバッグ情報を表示します。
デフォルトはオフです。
ここで表示されるデバッグ情報は、
テンプレートの<DEBUG_OUTPUT>でHTMLに出力することもできます。
-s status-file-name
ステータスファイルの名前を指定します。
デフォルトは "_status" です。
-t theme-dir-name
テーマディレクトリの名前を指定します。
デフォルトは "./theme/default" です。
-u
すべてのサイトを更新します。
デフォルトはオフです。
-a user-agent-name
ユーザエージェント名を指定します。
デフォルトは "KissReader/バージョン番号" です。
-o output-dir-name
HTMLファイルの出力ディレクトリを指定します。
デフォルトは "./html" です。
-F
受信したRSSをXMLファイルとして保存します。
デフォルトはオフです。
-C
ステータスファイルをクリアします。
デフォルトはオフです。
-x expire-days
指定した日数以前のステータスファイルの情報をクリアします。
出力ディレクトリに作られたHTMLファイルはクリアしません。
デフォルトは"0"(クリアしない)です。
-y proxy
HTTPプロキシを指定します。
デフォルトは""(プロキシなし)です。
-T seconds
タイムアウトの秒数を指定します。
デフォルトは180秒です。
-D minutes
RSSサーバへのアクセス間隔を指定します。
デフォルトは30分です。
すぐにアクセスしたいときには -D 0 を指定します。
-e encoding
出力HTMLのエンコーディングを指定します。
デフォルトは"UTF-8"です。
この値は、テンプレートの<HTML_ENCODING>でHTMLに出力することができます。
オプションの一覧は、 perldoc kissreader.pl で見ることもできます。
Windowsでは、
同梱している run.bat を動作させると、
url.txt に書かれているRSSを巡回します。
HTMLを作成するディレクトリは ./html で、
テーマは ./theme/default です。
> run Reading (1/2) http://www.hyuki.com/diary/rss Reading (2/2) http://www.hyuki.com/tf/?rss Updated sites: 2. ./html/index.html is created.
Windowsでは、
同梱している news.bat を動作させると、
news-url.txt に書かれているRSSを巡回します。
HTMLを作成するディレクトリは ./news で、
テーマは ./theme/tight です。
> news Reading (1/4) http://slashdot.jp/slashdot.rss Reading (2/4) http://bulknews.net/rss/rdf.cgi?NikkeiIT Reading (3/4) http://japan.cnet.com/rss/index.rdf Reading (4/4) http://www3.asahi.com/rss/index.rdf Updated sites: 4. ./news/index.html is created.
頻繁にKissReaderを起動すると、 以下のようなメッセージが出てすぐに終了します。 これはRSSサーバに負荷をかけないようにするためです。
急ぐときには-Dオプションを使って間隔を調整してください。 すぐにアクセスするには-D0を使います。
You execute KissReader too often. Please wait XX minutes more. Try -D0 option if you couldn't wait.
以下のようなエラーになるのは、 おそらくkissreader.plがあるディレクトリ以外から動かそうとしているときだと思います。
Can't locate XML/RSS/Parser.pm Can't locate XML/RSS/Parser.pm in @INC (@INC contains: ./lib C:/Perl/lib C:/Perl/site/lib .) at ... BEGIN failed--compilation aborted at ...
これに対処するためには、kissreader.plのはじめの方にある以下の行を書き換えます。
use lib "./lib";
この部分を、KissReaderを展開したときにできるlibディレクトリを指すように、 あなたの環境に合わせて指定してください。 たとえば、次のようにします。
use lib "C:/work/kissreader/kissXXX/lib";
あるいは、KissReaderを展開したときにできる lib ディレクトリ以下の内容を、
Perlのインストールディレクトリ以下にある site\lib 以下 (たとえば C:\Perl\site\lib )にコピーしてもよいです。
何かエラーが起きているのだが、原因がよく分からないときには、
-d -F というオプションをつけます。
すると、デバッグ情報が出るとともに、取得したRSSをファイルとして保存します。
何度も繰り返して実行するためには、強制的に更新を行う -u オプションも追加して、
-d -F -u を指定するとよいでしょう。
このときには「RSS一覧ファイル」の中にはあまりたくさんのURLを入れないほうがよいでしょう。
以下の例では、 kiss-776f502a39d7cd2f25fb23cb3631673c.xml, kiss-10fbf8af72973c82eafdf0a09fe2f15c.xml というファイルが作られています。
> perl kissreader.pl -d -F -u url.txt DEBUG: debug mode. DEBUG: forced update. DEBUG: Save every RSS as a file. DEBUG: Status file = [_status] DEBUG: Theme dir = [./theme/default] DEBUG: Output dir = [./html] DEBUG: Index file = [./html/index.html] DEBUG: User agent = [KissReader/X.X.X] DEBUG: Expire days = [0] DEBUG: Proxy = [] DEBUG: Timeout seconds = [180] DEBUG: Duration minutes = [30] DEBUG: VERSION = [X.X.X] Reading (1/2) http://www.hyuki.com/diary/rss DEBUG: retrieve_rss: force update, if-modified-since is not used. DEBUG: retrieve_rss: HTTP GET: http://www.hyuki.com/diary/rss. DEBUG: retrieve_rss: Save ./html/kiss-776f502a39d7cd2f25fb23cb3631673c.xml. Reading (2/2) http://www.hyuki.com/tf/?rss DEBUG: retrieve_rss: force update, if-modified-since is not used. DEBUG: retrieve_rss: HTTP GET: http://www.hyuki.com/tf/?rss. DEBUG: retrieve_rss: Save ./html/kiss-10fbf8af72973c82eafdf0a09fe2f15c.xml. DEBUG: output_html: http://www.hyuki.com/diary/200412#i20041212201826 is updated. DEBUG: output_html: http://www.hyuki.com/diary/200412#i20041208183941 is updated. ...
なお、ここで表示されるデバッグ情報のうち、 HTMLファイルを出力する直前までのものは、 テンプレートの特殊タグ<DEBUG_OUTPUT>を使って、 HTMLに出力することもできます。
以下のようなエラーがでて実行できないときは、 「Perl XMLでencoding='Shift_JIS'や'euc-jp'を使う」というページを参考にしてください。
Couldn't open encmap shift_jis.enc: No such file or directory at C:/Perl/site/lib/XML/Parser.pm line 187
出力するHTMLのエンコーディングを変えたいときには、-eオプションを使います。
perl kissreader.pl -e Shift_JIS url.txt Shift_JISにする場合
perl kissreader.pl -e EUC-jp url.txt EUC-jpにする場合
なお、ここで指定したエンコーディング名は、 テンプレートの特殊タグ<HTML_ENCODING>を使って、 HTMLに出力することもできます。 同梱しているテンプレートのheader.txtファイルを参照してください。
KissReaderでは、 テーマを修正することで、ページデザインを自由に変更できます。
アーカイブファイルには、 defaultテーマとtightテーマの2つが同梱されていますので、 これを元にして修正するのがよいでしょう。
defaultテーマは、RSSの本文もHTMLに含めるように作られています。 普通はこちらを使います。 それに対してtightテーマはRSSのタイトルだけをできるだけ省スペースで 表示するように作られています。ニュースサイトなど、タイトルに十分な情報が乗っているサイトを 巡回する場合にはこちらのテーマが便利です。
各テーマは、以下のファイル群からなっています。
theme/テーマ名/index.txt 作成したHTMLの一覧ページのテンプレートです。 theme/テーマ名/session.txt 毎回の実行で作られるHTMLページのテンプレートです。 theme/テーマ名/header.txt index.txt, session.txtから参照されるヘッダ部分です。 theme/テーマ名/footer.txt index.txt, session.txtから参照されるフッタ部分です。
css/テーマ名.css header.txtから参照されるスタイルシートです。
自分のテーマを作るには、 themeディレクトリ以下に自分のテーマディレクトリを作り、 そこに theme/default の内容をすべてコピーし、それを修正するとよいでしょう。 面倒なときには、theme/defaultの下のファイルを直接いじってもかまいません。
KissReaderは特に指定がなければdefaultテーマを使います。 あるいは -t オプションで別のテーマを指定することもできます。
テーマを作る際に利用できる特殊タグを以下に示します。 KissReaderを動かすと、このタグが自動的に置換されます。
KissReaderのテーマは、HTML::Templateモジュールの機能を利用しています。
<INCLUDE ファイル名>
ファイルの内容を取り込むときに使います。
ヘッダ・フッタなどを共通化したいときに使います。
<LOOP 名前>
...
</LOOP>
繰り返し処理を行うときに使います。
「名前」のところにはHTML_LISTまたはSITE_LISTを指定します。
<IF 名前>
...
<ELSE>
...
</IF>
条件処理を行うときに使います。
<ELSE>は省略できます。
「名前」のところには、SITE_LIST, ERROR_RSS_LIST, DEBUG_OUTPUTを指定します。
<HTML_ENCODING>
出力のエンコーディングになります。
デフォルトはUTF-8で、-eオプションで変更できます。
<DEBUG_OUTPUT>
-dオプションをつけたときのデバッグ出力になります。
改行で区切られるので<pre>...</pre>で囲む必要があります。
<DRIVER_VERSION>
KissReaderのバージョン番号になります。
テンプレートファイルのindex.txtでは以下の特殊タグが使えます。
<LOOP HTML_LIST>
<HTML_LINK>
<HTML_TITLE>
<HTML_SIZE>
</LOOP>
HTMLファイルのリストを構成します。
<HTML_LINK>
HTMLファイルのURLになります。
実際はHTMLのファイル名です。
<HTML_TITLE>
HTMLファイルのタイトルになります。
日時を元に作られます。
<HTML_SIZE>
HTMLファイルの大きさになります。
テンプレートファイルのsession.txtでは以下の特殊タグが使えます。
サイトのリストと記事のリストを二重ループで以下のように構成します。
<LOOP SITE_LIST>
<SITE_ID>
<SITE_TITLE>
<SITE_LINK>
<SITE_RSS>
<SITE_DESCRIPTION>
<LOOP ITEM_LIST>
<ITEM_ID>
<ITEM_LINK>
<ITEM_TITLE>
<ITEM_DATE>
<ITEM_DESCRIPTION>
<ITEM_ENCODED>
<ITEM_CONTENT>
</LOOP>
</LOOP>
個々のタグの意味は以下のようになります。
<SITE_ID>
そのサイトのIDになります。
URLのMD5値。
<SITE_TITLE>
そのサイトのタイトルになります。
<SITE_LINK>
そのサイトのURLになります。
<SITE_ID>
そのサイトのRSSのMD5値になります。
<SITE_RSS>
そのサイトのRSSのURLになります。
<SITE_DESCRIPTION>
そのサイトの概要になります。
<ITEM_LINK>
記事のURLになります。
<ITEM_ID>
その記事のURLのMD5値になります。
<ITEM_TITLE>
記事のタイトルになります。
<ITEM_DATE>
記事の日付になります。
<ITEM_DESCRIPTION>
記事の概要になります。
HTMLとして表示できるように変換されています。
<ITEM_ENCODED>
記事の内容になります。
HTMLとして表示できるように変換されています。
<ITEM_CONTENT>
記事の概要または内容になります。
両方あるときには内容になります。
HTMLとして表示できるように変換されています。
エラーが起きたRSSのURL一覧は以下のようにして構成します。
<LOOP ERROR_RSS_LIST>
<ERROR_RSS>
<ERROR_TYPE>
<ERROR_MESSAGE>
</LOOP>
エラーが起きたRSSの一覧になります。
<ERROR_RSS>
エラーが起きたRSSのURLになります。
<ERROR_TYPE>
エラーの種類になります。
<ERROR_MESSAGE>
エラーメッセージになります。
<ERROR_RSS_NUM>
エラーが起きたRSSの個数になります。
KissReaderはRSSサーバへの負荷軽減のために以下の処理を行っています。
1. 起動頻度
KissReaderを一度起動すると、30分間は起動できないようにしてあります。 ただし、動作テストなどの目的で頻度を上げる場合に備えて、-Dオプションで変更が可能です。
2. if-modified-sinceヘッダ
HTTP GETリクエストを発行する際に、if-modified-sinceヘッダをつけています。
これにより、if-modified-sinceヘッダを解釈するサーバは304 Not Modifiedを返すことができます。
ただし、動作テストに備えて、-uオプションで強制的にif-modified-sinceヘッダをつけない処理が可能です。
RSSツールとトラフィックの問題については、 たとえば以下のサイトを参照してください。
n --- 次のサイト p --- 前のサイト . --- 現在のサイト < --- 先頭 > --- 末尾
この修正についてはせきむらさんの 「RSS Rolling みたいの」を参考にしました。感謝します。