読者です 読者をやめる 読者になる 読者になる

さわだのノート

書籍のお仕事に役立つかもしれない思いつきを記録しています。

RSS: 記事の更新情報 Rss Feed

Vimで少納言をささっと見たい

さて、ここからが本題です。この少納言、とっても便利なのですが、いちいちサイトを見に行くのは面倒です。ぼくは原稿の編集・執筆にVimを使っており、Yahoo!辞書やWeblio類義語辞典Vimから閲覧できるようにするためのプラグインを過去に作ってみました。これと同じような仕組みでなんとか少納言も閲覧できないか考えてみたいと思います。
Vimから国語辞典をチェックする - takepierrot Editor Note
続・Vimで国語辞典を見る(同音異義語 対応版) - takepierrot Editor Note

これまで作ってきたプラグインは、GETメソッドを用いてアクセスしていましたが、少納言の場合は、POSTメソッドで検索クエリを送信しているみたいです。
POSTメソッドでの送信内容の解析方法は今度説明するとして、とりあえずPerlでコードを書いてみました。

#!/usr/bin/env perl
use v5.16;
use warnings FATAL => qw/all/;
use utf8;
use open IO => qw/:utf8 :std/;
use LWP::UserAgent;
use Web::Query;
use Encode;

my $base_url = 'http://www.kotonoha.gr.jp/shonagon/search_result';
my ($argv) = @ARGV;
my ($string, $l_rege, $r_rege) = split /;/, decode_utf8($argv);
my %param = (
  Cookie  => 'CGISESSID=9099177b99b62993f8710a4f41f82470',
  Content =>  [ query_string   => $string,
                lcontext_regex => $l_rege,
                rcontext_regex => $r_rege,
                media => '書籍',
                media => '雑誌',
                media => '新聞',
                media => '白書',
                media => '教科書',
                media => '広報紙',
                entire_period => 1,
              ],
);
my $ua = LWP::UserAgent->new;
my $response = $ua->post($base_url, %param);
wq($response->decoded_content)->find('table tr')->each(
  sub {
    my (undef, $wq) = @_;
    if ($wq->find("td.cell01")->text) {
      my $title = $wq->find('td:nth-of-type(9)')->text;
      $title .= '|' . $wq->find('td:nth-of-type(10)')->text if $wq->find('td:nth-of-type(10)')->text;
      $title .= '|' . $wq->find('td:nth-of-type(11)')->text if $wq->find('td:nth-of-type(11)')->text;

      my $auther = $wq->find('td:nth-of-type(13)')->text;
      $auther .= '/' . $wq->find('td:nth-of-type(12)')->text if $wq->find('td:nth-of-type(12)')->text;
      $auther .= '/' . $wq->find('td:nth-of-type(14)')->text;

      printf "【%s::%s\n%s[%s]%s\n\n",
        $title, $auther,
        $wq->find('td.cell01')->text,
        $string,
        $wq->find('td.cell03')->text;
    }
  });

Cookieの値がないとエラーを履くみたいなので、適当な値を突っ込んでいます。これはもっとうまいやり方がありそうな気がしますが……。

$ kotonoha.pl '変換;パソコン'

でスクリプトを実行すると、

【陰月の冠者::小学館/霜島ケイ|著/2000】
、ひっくり返って笑い死にしちまいました(古い話でごめんよ、高瀬。でもパソコンが誤[変換]してくれるたびに私は、その時の会話を思い出すぞ)。 しかし本編では当分、陽気うら

【はじめてのパソコン|孤立無援のおじさん専科::明日香出版社/間地秀三|著/1999】
その12ISDNとは? 電話線を通るアナログ信号を、パソコンが分るデジタル信号に[変換]する装置がモデムです。この性能に不満があるとき、より性能のよいモデムに替えるより

【赤ちゃんの名づけハッピーガイド::学習研究社/2004】
の多い字を重ねる場合は注意が必要です。また、パソコンで入力しようとしても、すぐに[変換]できない漢字を使うのは、避けたほうが無難です。姓と名のバランスを考える ぱっと見

【手ぎわよい科学論文の仕上げ方::共立出版/田中潔|著/1994】
して提出することができるが,表の線の引き方の指令が,パソコンの機種ごとに異なり,[変換]機(converter)にかけると別の指令になって誤って印刷される事例があった。

【経営がみえる会計|目指せ!キャッシュフロー経営 実学入門::日本経済新聞社/田中靖浩|著/2004】
パソコンのなかさえみたことがないでしょう。 コンピュータというシステムについての[変換]プロセスは、「ブラックボックス」になってしまっています。「コンピュータの箱のなか

【鉄道好きの知的生産術|自分の「鉄道」探究の成果をどう発信するか::中央書院/佐藤信之|著/2002】
ード体系を持っている。そのため、パソコンで作ったファイルを写植機で認識できる形に[変換]しなければならない。しかし、この場合でも、変換できるのは文字コードが並ぶ文字列の

【最新&高速エンコード全テクニック::宝島社/2003】
Palm機を一歩リードしている。標準でPalm用の動画再生ソフトと、パソコン用の[変換]ソフトが付属しているので、PDAで手軽に動画を持ち運ぶことができるのだ。 クリエ

【ここからはじまるコンピュータの世界|基本知識編::TAC出版事業部/TAC情報処理講座|編/2005】
す。ただし、アナログ電話機などを接続したり、パソコンの信号をISDNの信号形式に[変換]するためにTA(ターミナルアダプタ)やDSUが必要になります。参考 チャネルは論

【サバイバル・バイブル::小学館/柘植久慶|著/2005】
一切ワープロやパソコンを使用せず、旧態然とした手書きを続けている。そうすることで[変換](ワープロ)により漢字が自動的に出てくる、という楽な道を避けて頭の働きが鈍くなら

【YOMIURI PC|2005年1月号(第10巻第1号、通巻117号)::読売新聞社/2005】
を送信先生→生徒質問への回答と演奏データに対しての指導パソコンで録音してMP3に[変換]1「サウンドレコーダー」。赤い「●」ボタンで録音開始2録音したファイルは、「マイ

【アサヒカメラ|2001年5月号(第86巻第6号、通巻894号)::朝日新聞社/2001】
間ともおさらばだ。モノクロ写真が欲しければ、パソコン上でカラー画像からモノクロに[変換]するだけ。 デジタルカメラは機種によってCFカード、スマートメディア、メモリース

【陰月の冠者::小学館/霜島ケイ|著/2000】
が、私の使っているパソコンはなぜか「ヨウキ」と何度入力しても、最優先で「陽気」と[変換]してくれます。気づかないで原稿を打っていて、あとで読み返すと、けっこうこれが笑え

てなかたちに整形して結果を表示してくれます。
あとは Vimのウィンドウに出力すればOKですね。