RubyでAtomをパースする
Oshira.se APIから情報を検索して表示するプログラムを勉強がてら書いてみました。
Railsを使わずに、まともにRubyのコードを書くのははじめてかも。
net/httpでAtomを取得して、REXMLでXpathを使って解析しています。
Windows環境なので、ところどころで文字コードを変換しています。
ソースコード
get_atom.rb
require "rexml/document" require "iconv" require "uri" require "net/http" #引数がない場合 if ARGV.length == 0 then puts "Usage: ruby get_atom.rb keyword" exit(1) end #化けるのでUTF-8に変換 keyword = URI.encode(String(Iconv.iconv("UTF-8", "Shift_JIS", ARGV[0]))) url = URI.parse("http://api.oshira.se/news?q="+keyword+"&s=d") #GET doc = REXML::Document.new(Net::HTTP.get(url)) entries = REXML::XPath.match(doc, "feed/entry/") #順番に表示 entries.each do |entry| #コマンドプロンプトで表示するのでShift_JISに変換 puts Iconv.iconv("Shift_JIS", "UTF-8", String(REXML::XPath.match(entry, "title/text()")[0])) end
実行
ruby get_atom.rb Java
実行結果
Vintage Computer Festivalレポート【初日編】 [JAVA]とある無償配布クライアントソフトをインストー.. JavaFesta札幌 【コラム】Java API、使ってますか? 第30回 Javaアプリケーションにオブジェクトのキャッシュ機構を提供するJCache API 米モジラが「Firefox」の新版を公開、複数の問題を修正 米モジラが「Firefox」の新版を公開、複数の問題を修正 フリーの最強IE7アドオン「IE7Pro 1.2」リリース、さらに機能を追加 MSの画像フォーマット「HD Photo」、「JPEG XR」として標準化へ 米モジラが「Firefox」の新版を公開、複数の問題を修正 ウノウラボ Unoh Labs: PHPで暗号化・復号化あれこれ Javaのプロパティファイルの読込に関する質問です。「.. Google「Open Social」公開、SNSに何が起きる?:CNET Japan オンラインパネルディスカッション - CNET Japan BEAがSOAの新コンセプト「Genesis」提唱,システムの組み換えを簡素化 Mozilla,バグ修正版「Firefox 2.0.0.9」を公開,Windows版のクラッシュ問題に対応 モバゲーのゲーム開発者が語る、モバイルFlashコンテンツ作成のポイント
Windowsの環境だからなのかもしれませんが、やたらと文字コードの変換やStringにキャストを行う必要がありました。
あと、返ってきた結果によっては、iconvで変換時にエラーになります。
iconvの引数は 変換後の文字コード 変換前の文字コード なので順番が直感的にわかりにくいですね。
このままだと使い物にならないので、時間があればLinux上で試してみます。