ATOKを簡易RSSリーダにする
昨日(d:id:atzy:20081030:p1)の続き。もう少し汎用的なサービスもATOKダイレクトで作れるかもしれない。
例えば、ATOKをRSSリーダにしてみましょう。
これで、天気もニュースも何でもATOKから呼び出せることになります(のはず)。
以下、作り方や説明など。
RSSを解釈
RSSをRubyで解釈するのも、そんなに頑張らなくてもREXMLでXPath検索すれば十分とも言えますが、どうせなので、専用のRSSパーサを使ってみます。
これを用いて、RSSから次のものをとってくることにしました。
- title
- description
- link
これだけです。
ソース
ソースは以下の通り。RSS_SITESというところは、好きなように書き換えて追加して下さい。この設定では「はてな」で呼び出すとはてなのグループのRSSが解釈されます。「朝日」で呼び出すと朝日新聞のサイトのRSSとなります。
例によって、HTTPプロキシは自分の環境に変えるか、nilにして下さい。(昨日の日記を参照。)
#! /usr/bin/ruby -Ku require 'rss' require 'kconv' require 'open-uri' RSS_SITES = { 'はてな' => "http://hatena.g.hatena.ne.jp/hatenabookmark/rss2", '読売' => "http://www.yomiuri.co.jp/adv/ad/rss/rss20.xml", '朝日' => "http://rss.asahi.com/f/asahi_newsheadlines" } PROXY_HOST = 'あなたの環境に合わせて下さい' PROXY_PORT = あなたの環境に合わせて下さい module Atok_plugin def run_process( a_request_data ) key = a_request_data['composition_string'] result_data = {} rss_source = getRss(key) return result_data if rss_source.nil? rssinfo = parseRss(rss_source) candidate_array = [] rssinfo.each{|item| candidate_array.push({'hyoki' => item[:title], 'comment' => item[:description], 'alternative' => item[:link], 'alternative_type' => "url_jump_string" }) } result_data['candidate'] = candidate_array return result_data end def getRss(key) site = RSS_SITES[key] return nil if site.nil? open(site, :proxy => "http://#{PROXY_HOST}:#{PROXY_PORT}/") {|f| rss_source = '' f.each_line {|line| rss_source << line } return rss_source } end def parseRss(rss_source) rss = RSS::Parser.parse(rss_source) infos = [] rss.items.each{|item| title = item.title if item.description description = item.description.gsub(/<\/?[^>]+>|\s+/, '') else description = '' end link = item.link infos << {:title => title, :description => description, :link => link} } return infos end end
使い方
RSS_SITESの部分に、「自分が呼び出すためのキー」「そのキーによって自分が呼び出したいRSSのURL」を対にして書いておきます。
そして、例えば「あさひ」と入力して変換、「朝日」に未確定で変換された状態において、Ctrl + Insertを押します。すると、変換候補にRSSフィードのタイトル、コメントにその内容が表示されます。(コメントは変換候補を選ぶと表示されます。)
で、仮にそのニュースをきちんと見たいならば、Shift + Enterしてください。ウェブブラウザでそのページが開けます。(このリンク先は例えば読売新聞だとうまくいきません。)
ちなみに、複数のプラグインをインストールしていて、適切なひとつだけを呼び出したい場合は、Ctrl + Shift + Insertで選択のための小さなウィンドウが出ますから、そこからプラグインを選んでください。
インストール
RSS Parserはあらかじめローカルにインストールして下さい。Rubyが入っている環境ならば % ruby setup.rb でインストールできるんじゃないかと思います。
あとは、昨日のと同じです。まだまだめんどくさいので、簡単にできる方法をジャストシステムの方で考えてほしいものです。
最後に
これはサンプル実装ですので、いろいろと不具合と言える点があると思います。
これを元にしてふくらませていけたら面白そうですね。
追記
descriptionなどが現れる「ATOKダイレクト解説」というところがコピー不可能になっているのが不満。
本当に「見るだけ」で、コピペもできない。