プログラミングノート

一からものを作ることが好きなエンジニアの開発ブログです。

XMLの解析

XMLを解析できれば色々出来そうなので調べてみたところ、REXMLというパーサが標準で使えるらしい。ということで、とりあえず価格.comのサンプルリクエストで試してみたところ、簡単に要素を取得できた。

require "kconv"
require "rexml/document"
require "open-uri"

url = "http://api.tabelog.com/Ver1/RestaurantSearch/?Latitude=35.701&Longitude=139.754&Datum=world&SearchRange=small&Prefecture=tokyo&Station=%E6%B0%B4%E9%81%93%E6%A9%8B&ResultSet=large&SortOrder=totalscore&PageNum=1"

doc = nil

# プロキシを通す場合は open(url, :proxy => 'http://url:port')
open(url){|file|
  doc = REXML::Document.new file
}

doc.elements.each("/RestaurantInfo/Item") { |elem|
  puts elem.elements["RestaurantName"].text.tosjis
}

# 出力
# 焼肉 京城 水道橋店
# 立ち飲み処 うけもち
# ...

さらにXPathでの指定も可能。

REXML::XPath.match(doc, "//RestaurantName").each { |i|
  puts i.text.tosjis
}

これは便利そう!
XPathもちゃんと調べて使ってみよっと。