💎
Google Hotel APIsのXMLファイルをRubyで作る方法
イントロダクション
Google Hotel APIsのXMLリファレンス
現在、やっている開発で「Google Travel向けの情報をGoogleにXMLファイルで送る」ということをやっているのだが、これに関する記事がGoogleの公式ドキュメントくらいしかなかったので、なかなか苦戦していた。
ーーーー
「そもそも、Rubyでドキュメント通りのXMLを作るには何を使えば良いんだろう、、」
そうした疑問を持った人はこの記事を読んで、さっさと実装できることを願っている。
少しでもGoogle Hotel APIsで苦しむエンジニアが減りますように、、、
作りたいXMLがこちら
以下、Googleに送るべきホテルリストの実際のXML。
<?xml version="1.0" encoding="UTF-8"?>
<listings>
<language>en</language>
<listing>
<id>123abc</id>
<name>Belgrave House</name>
<address format="simple">
<component name="addr1">666 Acacia Ave</component>
<component name="addr2">Floor 5</component>
<component name="city">London</component>
<component name="province">Greater London</component>
<component name="postal_code">SW1W 9TQ</component>
</address>
<country>UK</country>
<latitude>35.070374</latitude>
<longitude>-106.213648</longitude>
<phone type="main">123-456-7890</phone>
<category>hotel</category>
</listing>
</listings>
使うものはこちら
1, nokogiri(Ruby Gems)
2, xmlのインデントを読み解く根気
require 'nokogiri'
↑こんな感じでnokogiriを読み込み、、、
require 'rubygems'
require 'nokogiri'
builder = Nokogiri::XML::Builder.new(:encoding => 'UTF-8') do |x|
### XML ###
end
puts builder.to_xml
「### XML ###」と書いてある箇所に、実際のXMLの構造を書いていく
XMLを作ろう
早速さっきのXMLをRubyで生成してみる。
コードはこんな感じ。
generate_xml.rb
require 'rubygems'
require 'nokogiri'
builder = Nokogiri::XML::Builder.new(:encoding => 'UTF-8') do |x|
x.listings() {
x.language "en"
x.listing() {
x.id "123abc"
x.name "Belgrave House"
x.address(format: "simple") {
x.component("666 Acacia Ave", name: "addr1")
x.component("Floor 5", name: "addr2")
x.component("London", name: "city")
x.component("Greater London", name: "province")
x.component("SW1W 9TQ", name: "postal_code")
}
x.country "UK"
x.latitude 35.070374
x.longitude -106.213648
x.phone("123-456-7890", type: "main")
x.category "hotel"
}
}
end
puts builder.to_xml
早速実行してみよう
ruby generate_xml.rb
すると、、
<?xml version="1.0" encoding="UTF-8"?>
<listings>
<language>en</language>
<listing>
<id>123abc</id>
<name>Belgrave House</name>
<address format="simple">
<component name="addr1">666 Acacia Ave</component>
<component name="addr2">Floor 5</component>
<component name="city">London</component>
<component name="province">Greater London</component>
<component name="postal_code">SW1W 9TQ</component>
</address>
<country>UK</country>
<latitude>35.070374</latitude>
<longitude>-106.213648</longitude>
<phone type="main">123-456-7890</phone>
<category>hotel</category>
</listing>
</listings>
最初にドキュメントで見たホテルリストのXMLと全く同じ構造のものが出来上がった。
この要領でRails内のrakeタスクとして、DBのレコードを引っ張ってきたりして、値を入れていけばいい。
まとめ
このように、nokogiriを使えば、XMLを作ることができる。
少しでもGoogle Hotel APIsで苦しむエンジニアが減りますように、、、
Discussion