ホームKissReaderKissReaderユーザーズマニュアル

KissReaderユーザーズマニュアル

結城浩

KissReaderのユーザーズマニュアルです。 このマニュアルは、配布ファイルにも同梱されています。 最新版は 「KissReaderのユーザーズマニュアル(最新版)」にあります。

目次

はじめに

KissReader(キス・リーダー)は、 Perlで書かれたシンプルなRSSリーダーです。

使い方は単純。

各サイトがRSSの中に本文を含めて配信している場合には、それもHTMLになります。 ですから、KissReaderを動かして、ローカルに保存されたHTMLを、 オフラインでゆっくり読むこともできます。

KissReaderが出力するHTMLは、ユーザが自由にカスタマイズできます。

WebベースのRSSリーダーが遅いと感じる人、 RSSのURLをさくさく登録・コメントアウトしたいという人、 普段コマンドラインベースで作業している人には便利です。 GUIでなきゃやだという人には不向きです。

KissReaderはフリーソフトウェアです。 ライセンスはPerlと同じです。

KissReaderをお使いになってみて、 ご感想やご意見などがありましたら、 どんなことでも構いませんので、 ぜひ フィードバックをお願いいたします。

最新版のダウンロード

最新版のKissReaderは、結城浩のWebサイトからダウンロードできます。

必要なもの

結城はWindowsの場合しか試していません。 他の環境で動作した方がいらっしゃいましたら、 ぜひご連絡ください。

対応しているRSSのバージョン

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.plurl.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テーマ用のテンプレートファイル

使い方

「RSS一覧ファイル」の書き方

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 で見ることもできます。

バッチファイル(1)

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.

バッチファイル(2)

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.

エラーの対処法

You execute KissReader too often.と表示される

頻繁にKissReaderを起動すると、 以下のようなメッセージが出てすぐに終了します。 これはRSSサーバに負荷をかけないようにするためです。

急ぐときには-Dオプションを使って間隔を調整してください。 すぐにアクセスするには-D0を使います。

You execute KissReader too often. Please wait XX minutes more.
Try -D0 option if you couldn't wait.

Can't locate XML/RSS/Parser.pmというエラーが出る

以下のようなエラーになるのは、 おそらく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に出力することもできます。

shift_jis.encがオープンできない

以下のようなエラーがでて実行できないときは、 「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のエンコーディングを変えたい

出力する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ディレクトリ以下に自分のテーマディレクトリを作り、 そこに 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で使うもの

テンプレートファイルの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で使うもの

テンプレートファイルの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ツールとトラフィックの問題については、 たとえば以下のサイトを参照してください。

更新履歴

関連リンク