物欲購入目録日誌 写真館
スポンサーサイト
--.--.-- (--:--) スポンサー広告
Twitterでつぶやく
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
Rubyでgoogle Suggest APIを利用する
2012.05.16 (00:57) プログラミングtrackback(0)comment(0)
Twitterでつぶやく
explore-google-suggest.png



以前にGoogleのSuggest APIを用いてGoogleの推薦語を取得するスクリプトを紹介したけど、、最近やったら動かなくなっていたので、もう一度清書してみた。

実際に問題になっていた部分はgoogle APIがUTF-16の文字列を返してくることがあって、その場合にXMLのパーサーとして利用しているrexmlがエラーを返すためにうまく処理できないことがあったので修正してみた。


# 【suggest.rb】
#
# usage: $suggest.rb
#
$KCODE="u"
require 'net/http'
require 'cgi'
require 'kconv'
require 'rexml/document'

class Suggest
  # init
  def initialize()
  begin
    @http = Net::HTTP.new('www.google.co.jp', 80)
  rescue
  puts "初期化に失敗しました"
    return nil
    end
  end

  # request
  def request(query)
    query = "/complete/search?output=toolbar&q=#{CGI::escape(query)}&hl=ja"
    begin
      req = Net::HTTP::Get.new(query)
      res = @http.request(req)
      # XMLを返却
      return res.body.toutf8
    rescue
       puts "リクエストに失敗しました: #{query}"
      return nil
    end
  end

  # get
  def get(query)
    doc = REXML::Document.new(request(query))
    words = []
    doc.get_elements('//toplevel/CompleteSuggestion').each do |e|
      words << e.elements['suggestion'].attributes['data'].toutf8
    end
    # 取得した配列を返却
    return words
  end
end

# main 関数
if __FILE__ == $0
  s = Suggest.new()
  s.get(ARGV[0]).map{|s| puts s}
end


実行結果はこんなん。

$ ./suggest.sh 'アキバ'
アキバレンジャー
アキバズトリップ
アキバ総研
アキバチューナー
アキバガレージ
アキバズトリップ 攻略
あきばおー
秋葉工房
秋葉神社
秋葉

たまにsuggest結果をブラウザ経由じゃなくてテキストで簡単にほしいときなどに便利ですな。
prevhome next












トラックバックURL
→http://tachiphoto.blog61.fc2.com/tb.php/1679-334dc5a6
home
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。