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

Google Suggest APIで電卓もどき

Google電卓ってありますよね。例えば「1+1」でググったら「2」と出たり。あれってGoogle Suggest APIからでも多少使えるみたい。なのでちょっと前にRubyとかの入門がてらにGoogle Suggest APIを使った電卓のようなものを書いたので晒してみようと思う。あらかじめ言い訳しておきますが私はプログラミングはほとんどやったことありませんので用語の使い方が変だったりソースコードが変だったりするかもしれません。それは仕様です

require 'net/http'
require 'cgi'
require 'rexml/document'


if ARGV[0] != nil then
  word = ARGV[0]
else
  print ">"
  word = gets.chop
end

#  --APIを利用して計算結果を求める--

res_xml = nil

Net::HTTP.version_1_2  #おまじない
Net::HTTP.start("www.google.co.jp", 80){ |http|
  res_xml = http.get("/complete/search?output=toolbar&q=#{CGI::escape(word)}").body
  #puts res_xml #デバグ用
}

#  --REXMLをつかって計算結果を表示する--

doc = REXML::Document.new res_xml

hash = Hash.new
doc.elements.each('toplevel/calculator_suggestion'){ |element|
  puts element.attributes["data"] #結果の表示
}

Google Suggest API
http://google.com/complete/search?output=toolbar&q="調べたい語句"
でサジェストの結果とかをXMLで返してくれるみたい。その中のcalculator_suggestionのdataの値というのが電卓の結果の様だ。たとえば"1km in m"でAPIを突っついてみた場合こんなのが返ってくる。

<?xml version="1.0"?><toplevel><calculator_suggestion data="1000 meters"/></toplevel>


このスクリプトの注意点としては
1.動かすにはREXMLが必要。
REXML - Home
2.Google Suggest APIの仕様か何かだと思うけど日本語で、例えば"1kmをmで"とかは無理っぽい。ギリシャ文字も無理っぽい。計算結果のcalculator_suggestionは返してくれないっぽい。


参考にしたページ

Net::HTTPのところ
Ruby Reference Manual

Google Suggest APIのところ
Google Suggest APIを使う: Kwappa開発室

REXMLのところ
XML処理 REXMLの使い方 - プログラムメモ

当ブログに於いて、私tasutenによって創作されたことが自明である著作物に対しては、別途明示のある場合を除き全てCC0が適用されます。