Emacsで読むRSS
デフォルトのブラウザをEmacs-w3mに設定したから、
Emacs内で完結して快適快適・・・
と思いきや、結構ストレスがたまる事に気付きました。
例えば画面を分割して、上でRSSを読んで、下にw3mが立ち上がってるとします。
ニュースの詳細を読むためにリンクをクリックしたとき、
期待する動作は下側のw3mがリンク先に切り替わる事です。
ところが、現実とはそんなに甘いものではなく、
上下ともにw3mの画面となってリンク先が開く動作になります。
(何か設定とか操作があるんでしょうかね・・・?)
ニュースを読み終わるたびにバッファを切り替えるのは激しく面倒くさいので、
これだと外部のブラウザを呼んだ方がましな気すらします。
という訳で、下みたいにRSSを読んでいるときに、
・リンクにカーソルを移動して、何か関数を呼ぶ
・htmlを取ってきて、本文だけ抽出
・キルリング(クリップボード)に貼りつけられた本分を好きな処に貼りつけてニュースを読む
見たいな事を目指してlispを書いてみたいと思います。
まずは
・カーソルが置かれたURLを切り取る関数
からです。
実はORGモードで貼られたリンクは、前後を2重のカギカッコで囲まれています。
よって
・ラインの一番最後に移動
・カギカッコ2つ飛ばした所から、
・"http"と書かれたところまでをコピー
・テスト用にコピーした文字列を一番下に表示
してみたいと思います。
関数はきっとこんな感じですかね・・・?
例によって文字列が見つからなかった場合の処理とか書いてません
取り敢えず試してみると、正しく読めていそうです。
カーソルが置かれた位置のURLが一番下のミニバッファに表示されてます。
次に
・URLを参照して、WEBからHTMLをダウンロード
する部分ですが、
下の本の作者のるびきちさんがTwitterでつぶやいてたのを持ってきました。
- Emacsテクニックバイブル ~作業効率をカイゼンする200の技~/るびきち
- ¥2,919
- Amazon.co.jp
下の関数にURLを引数として渡すと、
*wget output*
というバッファを新しく作って、
その中にダウンロードしたHTMLを貼りつけてくれます。
シンプルに出来るものですね。
勉強になります。
これでニュースのURLを元にHTMLをダウンロードすることは出来そうなので、
残りは本分をどう抽出するか?です。
取り敢えずシンプルに
・タグとタグの間の文字列をコピー
・文字列が空白なら何もしない
・スタイルシートとかなら何もしない
・文字列が改行で終わってる場合も何もしない
・文字数が一定以上なら、改行を入れてドンドン結合していく
という感じで書いてみました。
テスト用なので、バッファにニュースのHTMLをコピーして動作確認
こんな感じの素のHTMLでさっきの関数を呼び出します。
取り敢えずCNNと産経に絞って、今日の関数を組み合わせたいと思います。
さっきの関数では、my_blstrという変数に本文と思われる文字列をドンドン追加したはずなので、
my_blstrの中身を見てみます。
なかなか良い感じに本文だけ抜き出せてました。
と、良い感じに見えるのですが、改行(<p></p>)で囲まれた文字列が短かったり、
<strong>とかの文字修飾系のタグで囲まれてたりすると、
文字列の長さで判別してるので読み取れません。
タグの判別も入れるべきか、RSSで購読してるCNNとか産経とか特定のニュースソースのフォーマットが
うまく取れればOKとするべきか・・・