Googleの「勝手にREST API」を利用して検索する (Ruby編)
Googleからは、多くのWeb APIが提供されています。もちろん検索用のAPIも公開されています。その名も「Google AJAX Search API」です。
しかし、「REST」形式のAPIは公開されていないようです。「REST」形式のAPIは直感的でとても利用しやすいので残念です。
そこで、「勝手にREST API」を利用してみようと思います。「勝手にREST API」とは、Googleで検索をした際に検索結果が表示されるURLをプログラムで作ってアクセスし、その検索結果(HTML形式)をうまく利用しようというプロジェクト名です(笑)。
始めに、あるキーワードを入力して、検索を行った結果を表示するために必要なURLをつくるための情報を調べてみました。非常に有用な以下のサイトを見つけることができました。
次に、Rubyで、Google検索をする&検索結果のHTMLを解析するためのコーディングを行いました。
コードを以下に示します。
---------------------------- ここから (google.rb)
require 'net/http'
require 'cgi'
require 'rubygems'
require 'hpricot'
require 'open-uri'
BASE_URL = "http://www.google.com/search?"
# 利用言語
LANG = "ja"
# 検索対象の言語
TARGET_LANG = "lang_ja"
# 文字コード
CHAR_SET = "utf-8"
# 検索キーワード
query = "ruby"
# 取得するデータ数
resultNum = "10"
# 検索結果として取得する最初のページ
startPage = "1"
parameters = {
:hr => LANG,
:lr => TARGET_LANG,
:ie => CHAR_SET,
:oe => CHAR_SET,
:num => resultNum,
:start => startPage,
:q => query
}
paramString = (
parameters.collect { |key,value| "#{key}=#{CGI::escape(value)}" }
).join('&')
uri = URI.parse( BASE_URL + paramString )
doc = Hpricot( open(uri) )
# クラス属性から要素を探しだす
# 省略形 (doc/"div.g")
links = []
doc.search("//div[@class='g']//a[@class='l']").each do |element|
# 各サイトのURLを抽出する
links.push element["href"]
end
# linkを出力する
puts links
---------------------------- ここまで (google.rb)
「google.rb」は、検索結果のHTMLからリンクを抽出することができます。
「google.rb」を実行すると、次のような出力を得ることができます。
http://ja.wikipedia.org/wiki/Ruby
http://www.w3.org/TR/ruby/
http://www.w3.org/TR/css3-ruby/
http://d.hatena.ne.jp/keyword/Ruby
http://www.ruby-lang.org/ja/man/
http://homepage1.nifty.com/~tetsu/ruby/
http://www.namaraii.com/rubytips/
http://www.goto.info.waseda.ac.jp/~fukusima/ruby/python-j.html
http://jp.rubyist.net/
http://www.garbagecollect.jp/ruby/mswin32/ja/
「google.rb」を利用するためには、「Hpricot」をインストールする必要があります。
インストールは以下のコマンドで行うことができます。
gem install hpricot
「Hpricot」の利用方法については、以下のサイトが参考になります。
○「Hpricot」
○「Hpricot Showcase-Ja」
○「HTMLパーサ Hpricot」
「Hpricot」は、Webを利用した開発のいろいろな場面で、利用することがそうです。ほんの少ししか利用してませんが、かなりのお気に入りです。「XPath」が利用できるのがいいですね。
p.s.
なんで、「Google AJAX Search API」利用しないんだって声が聞こえてきそうです。
理由は、「Google AJAX Search API」にいろいろな縛りがあるからです。
○Webサイトでしか利用できない(ローカルでいろいろやることはできない)
○検索結果を変更してはいけない(いらない情報を削ったりすることはできない)
○APIの利用回数が制限されているらしい(正確には確認できていません)
コメント
こんにちは、 WebOS Goodies の歩行者と申します。
ご紹介&トラックバックありがとうございます。
私もhpricotには注目していたので、
参考にさせていただきます。
そうそう、Google検索の結果を取得するなら、
SearchMash APIもお勧めですよ。
こちらのページでご紹介しています。
日本語優先検索ができないのが欠点ですが。
それでは、今後ともよろしくお願いします。
投稿者: 歩行者 | 2007年02月05日 22:30
歩行者さま
はじめまして、kazuhiroです。
コメントありがとうございます。
「WebOS Goodies」には、参考になる情報が盛りだくさんですね。
今後とも参考にさせていただきたいと思います。
「SearchMash API」の関する情報ありがとうございます。
拝見させていただきます。
こちらこそ、今後ともよろしくお願いします。
投稿者: kazuhiro | 2007年02月06日 03:11