w3m の Local-CGI で RSSアグリゲータの RNA を使えるか試してみる

インストールと設定

~/cgi-bin/rna にインストールすることにする
> cd ~/cgi-bin/
> tar zxvf rna1.9.2.tgz
> mv rna1.9.2 rna
設定
~/cgi-bin/rna/config.pl を書き換え
  $antenna_owner = "適当な名前";
  $base_uri = 'file:///cgi-bin/';
Local CGI で使える用に書き換え。認証は無しにする
~/cgi-bin/rna/lib/RNA/Config.pm
my $auth_configure_cgi = 1;
my $auth_clip_cgi = 1;
my $main_index_page     = 'index.html';
RNAClipRSSURI => $base_uri . $clip_list_rss,
RNAClipHTMLURI => $base_uri . $clip_list_html,
  ↓
my $auth_configure_cgi = 0;
my $auth_clip_cgi = 0;
my $main_index_page     = 'rnaindex.html';
RNAClipRSSURI => $clip_list_rss,
RNAClipHTMLURI => $clip_list_html,
~/cgi-bin/rna/template/conf_clip_template
<a href="<$RNAClipRSSURI$>"><span class="file">RSS</span></a>
<a href="<$RNAClipHTMLURI$>"><span class="file">HTML</span></a>
  ↓
<a href="file:///home/username/cgi-bin/rna/<$RNAClipRSSURI$>"><span class="file">RSS</span></a>
<a href="file:///home/username/cgi-bin/rna/<$RNAClipHTMLURI$>"><span class="file">HTML</span></a>
~/cgi-bin/rna/template/rna_template
<span class="rnacategory" name="<$RNACategoryName$>" id="<$RNACategoryName$>"><$RNACategoryName$></span>
  ↓
<a class="rnacategory" name="<$RNACategoryName$>" id="<$RNACategoryName$>"><$RNACategoryName$></a>
~/cgi-bin/rna/plugins/sample/sample.pl
'RNAPluginSampleHTMLURI' => $view_uri . $html_file,
  ↓
'RNAPluginSampleHTMLURI' => "$view_dir_name/" . $html_file,
ファイルを作る
~/cgi-bin/rnaindex.html (chmod +x する)
#!/bin/sh
echo "w3m-control: LOAD ~/cgi-bin/rna/rnaindex.html"
echo "w3m-control: DELETE_PREVBUF"
設定を反映させるコマンド
> cd ~/cgi-bin/rna
> ./rna-load.cgi
w3m の設定
/cgi-bin で表されるディレクト
~/cgi-bin:~/cgi-bin/rna
.w3m/keymap
keymap 適当なキー GOTO file:///cgi-bin/rnaindex.html

FOAFRNA Alliance はよくわからないのでパス

使用感

全部 w3m 上で済むのは便利
購読しているサイトやクリップした話題を消去する操作が JavaScript に依存しているため、w3m でやろうとするとややこしくなる。

  1. Site を選ぶ
  2. URI, Title など空にして Update
  3. Site のリストが 0001. : - のように変わるので、それを選んで Delete

クリップを消すのも大体同じ

追記

購読サイト修正用 Local-CGI

購読サイトの情報を修正する操作が JavaScript 依存なのでややこしくなる。それをちょっと楽にするための Local-CGI を作ってみた。
~/cgi-bin/rna/template/conf_template を書き換える
<-- サイトリストの更新 -->
<div class="rnaconfigitem">
の下あたりに以下を追加する。
<form action="なんたら.cgi" method="GET" name="適当に">
      <select name="select">
              <option value="none"> -- select -- </option>
              <$__RNAUpdateSiteListOptions__$>
      </select>
      <input type="submit" alt="Set" />
</form>
~/cgi-bin/ に置くスクリプト "なんたら.cgi"
#!/usr/bin/perl -w
use strict;
use lib qw(rna/lib rna/extlib);
use RNA::RSS;
use Encode;

my $home=$ENV{"HOME"};
my $tmppreform="$home/cgi-bin/tmppreform";
my $sitelist="rna/site.rdf";

open(CONF,"< $home/.w3m/config") or die "Can't open w3m config file";
my $todayspreform="~/.w3m/pre_form";
while (<CONF>) {
    if($_ =~ /^pre_form_file (.*)/){
        $todayspreform=$1;
    }
}
close CONF;

my $url = $ENV{"QUERY_STRING"};
$url =~ s/select=(.*)/$1/;
$url =~ s/%([0-9a-f][0-9a-f])/pack("C",hex($1))/egi;
my $e_url = RNA::RSS::html_encode($url);

my $list_rss = new RNA::RSS;
$list_rss->parsefile($sitelist);

my $i = &getnumber($e_url);
sub getnumber {
    my $uri = shift;
    my $listnum = @{$list_rss->{items}};
    for(my $i=0; $i < $listnum; $i++) {
        if($list_rss->{items}[$i]->{link} eq $uri) {
            return $i;
        }
    }
    return 0;
}

my $link = $url;
my $title = &toeuc($list_rss->{items}[$i]->{title});
my $description = &toeuc($list_rss->{items}[$i]->{description});
my $creator = &toeuc($list_rss->{items}[$i]->{dc}->{creator});
my $subject = &toeuc($list_rss->{items}[$i]->{dc}->{subject});
sub toeuc {
    my $from = shift;
    Encode::from_to($from,'UTF8','EUC-JP');
    return $from;
}

open(FH, ">$tmppreform") or die "Can't open temporary pre_form";
print FH <<"END";
url file:///cgi-bin/rna-conf.cgi?
form update_site_list file:///cgi-bin/rna-conf.cgi
text link $link
text title $title
text description $description
text creator $creator
text subject $subject
END
close FH;
chmod 0600, $tmppreform;

print <<"END";
w3m-control: SET_OPTION pre_form_file=$tmppreform
w3m-control: GOTO file:///cgi-bin/rna-conf.cgi?
w3m-control: DELETE_PREVBUF
w3m-control: SET_OPTION pre_form_file=$todayspreform
END