shimbun

emacs-w3mに 附属の shimbun ライブラリについてです。

backend の自作

現在は Info に詳細が書かれているので、こんなページよりそちらをお勧めします。 sb-mhonarc の詳細が書いてあるので残してはおきますが。

shimbun ライブラリは luna 化されていますが、見よう見真似でどうにか なります(^^;
基本的には以下の手順となります。

クラスの定義
`luna-define-class' でクラスを定義します。 その際、継承するクラスを指定しますが、以下のクラスを継承することが 多いでしょう。
shimbun
記事中の content-start から content-end までを html として 表示する場合
sb-text
記事中の content-start から content-end までを text として 表示する場合
sb-mhonarc
MHonArc で生成された ML アーカイブの場合 (詳細)
sb-fml
fml の spool2html.pl を用いた ML アーカイブの場合 (詳細)
各種変数の定義
以下の変数を定義します。
shimbun-XXX-url
ベースとなる URL
shimbun-XXX-groups
グループ名のリスト
shimbun-XXX-x-face
X-Face
shimbun-XXX-from-address
記事を MUA で表示する時の From アドレス
shimbun-XXX-content-start / shimbun-XXX-content-end
shimbun / sb-text で記事を表示する場合の 開始・終了を判定する regexp
shimbun-index-url
記事一覧を取得する URL を返すメソッドです。
shimbun-get-headers
記事一覧から各種情報 (Subject や URL) を取得するメソッドです。
複数のページを辿って過去の情報を取得する場合は、 以下の点に留意してください。 ここは各人がんばってください(^^;
shimbun-make-contents
必要に応じて `shimbun-make-contents' を定義します。

sb-mhonarc

MHonArc による ML archive は比較的容易に対応できます。 以下ではDigital Komono Mudadukai ML のアーカイブをサンプルに説明します。

クラスの導入
shimbun-mhonarc を継承して shimbun-digiko を導入します。
(luna-define-class shimbun-digiko (shimbun-mhonarc) ())
変数の設定
shimbun-digiko-url, shimbun-digiko-groups のあたりは前述と同様です。
shimbun-digiko-reverse-flag は、ML アーカイブ一覧が古い順であれば nil を、新しい順であれば t を指定します。
shimbun-digiko-litemplate-regexp には、記事一覧中の 各記事のテンプレートを正規表現で指定します。 ここで、マッチデータは順に、記事番号・URL・サブジェクト・投稿者と なるようにします。
(defvar shimbun-digiko-url "http://yar-3.net/digiko/")
(defvar shimbun-digiko-groups '("digiko"))
(defvar shimbun-digiko-reverse-flag t)
(defvar shimbun-digiko-litemplate-regexp
  "<STRONG><A NAME=\"\\([0-9]+\\)\" HREF=\"\\(msg[0-9]+.html\\)\">\\([^<]+\\)</A></STRONG>\n<UL><LI><EM>From</EM>: \\([^<]+\\) \\(Sun\\|Mon\\|Tue\\|Wed\\|Thu\\|Fri\\|Sat\\), [0-9]+ [A-Z][a-z][a-z] [0-9]+ [0-2][0-9]:[0-5][0-9]:[0-5][0-9] .*</LI>")
shimbun-index-url の定義
単純に shimbun-digiko-url を返すだけで良いでしょう。
(luna-define-method shimbun-index-url ((shimbun shimbun-digiko))
  (shimbun-url-internal shimbun))
shimbun-get-headers の定義
記事一覧を新しい順に辿って、`shimbun-mhonarc-get-headers' を 実行していくようにします。
既に取得済みの記事を発見したら止まるように 'stop を catch できるようにします。
(luna-define-method shimbun-get-headers ((shimbun shimbun-digiko)
					 &optional range)
  (let ((url (shimbun-index-url shimbun))
	(pages (shimbun-header-index-pages range))
	(count 0)
	headers aux)
    (catch 'stop
      (shimbun-mhonarc-get-headers shimbun url headers)
      (goto-char (point-min))
      (while (and (if pages (< (incf count) pages) t)
		  (re-search-forward
		   "<A HREF=\"\\(mail[0-9]+.html\\)\">Next Page</A>"
		   nil t)
		  (not (string-equal (match-string 1) aux)))
	(setq aux (match-string 1)
	      url (shimbun-expand-url aux url))
	(erase-buffer)
	(shimbun-retrieve-url url)
	(shimbun-mhonarc-get-headers shimbun url headers)
	(goto-char (point-min))))
    headers))
最後に
`require' や `provide'、コメントなどを記述します。

そんな感じで、sb-digiko.el の完成です。 (なお、現在 CVS の幹に commit されている sb-digiko.el では、 日時が取得できるようになっています。)

sb-fml

fml の spool2html.pl を用いた ML アーカイブの場合は、 クラスの導入と変数の設定だけですむことが多いでしょう。 sb-bbdb-ml などを参考にしてください。

debug

[emacs-w3m:01113] の `nnshimbun-remove-last-5-articles' を使うと良いです。



戻る