w3mrawdogw3m + rawdog + 自作ローカルCGIスクリプト = 快適

何か一日中部屋から出ずに、見事に引き込もってしまいました。
特に買い物する必要もない場合、本当に外に出る必要がないから困ります。

話は変わって。最近、w3m + rawdogでRSSを購読しているのですが、全文を読みたいのに概要しかない、大抵のサイトは、
概要しか記述されてません。まぁ仕方のないことですので、自分でなんとかしてみることにしました。

とりあえずpythonが使えるので、rawdogから出力されたHTMLを解析して、概要の文を取り除いて、本文と差し替えるような
スクリプトを書いてみました。

が。

悲しいかな、対象のHPがかなりぶっ壊れたHTMLを吐いてしまい、また正しい内容も取得できませんでした。
urllib2を弄りたおせばなんのかなるのかもしれませんが、そこまでやることでもないかなー、と思い、とりあえず
既読管理をするようなCGIを作成することにしました。


まずは、rawdogが標準で利用しているテンプレートを書き換えることにします。

$ rawdog -T > myitemtemplate

これだけじゃだめなので、次にrawdogのconfigファイルを編集します。

$ vi ~/.rawdog/config

関係ないですが、基本的に私はemacs使いです。しかし、emacsのM-x shellを基本使わないので(速度とかw3mとかscreenとか)、
ほんの一行程度の編集などだったら、viで済ませてしまうことが多いだけです。

横道に逸れましたが、次の一行を追記します。

itemtemplate myitemtemplate

ちなみに、全体のレイアウトを変更したい場合には、template 利用するテンプレート名 と記述します。

これで、自前で作成したテンプレートが利用できるようになります。ちなみに私の使っているテンプレートは次のようなもの
になります。

<div class="item feed-__feed_hash__ feed-__feed_id__" id="item-__hash__">
<p class="itemheader">
<a href="file:///cgi-bin/readed.cgi?readed=__hash__">*</a><span class="itemtitle">__title__</span>
<span class="itemfrom">[__feed_title__]</span>
</p>
__if_description__<div class="itemdescription">
__description__
</div>__endif__
</div>

file:///cgi-bin/readed.cgi?readed=__hash__ となってるところがありますが、これがローカルCGIを起動するための処理になります。

あとは、w3mでrawdogの出力したHTMLを読んで、読み終わったら*を押すだけで、その記事が取りのぞかれたHTMLが再度表示されるようになってます。


余談ですが、このローカルCGIを作る際、最初はxml.etee.ElementTreeモジュールを利用しようとしたんですが、どうも一部でもHTMLがぶっ壊れてると読めないらしく、rawdogから出力されたものは読みこむことができませんでした。
まぁ私だけかもしれませんけど。

なので、このとき作成したCGIには、http://www.crummy.com/software/BeautifulSoup/:Beautiful Soupという高機能なHTMl/XMlパーサを利用させていただきました。
このモジュールの使いかたとかはまたいずれ。