« 「XMLHttpRequest」をつかってJavaScriptで通信する? | メイン | 「Simple API」と「Prototype Window」で見えるブックマークを作ろう!(第1回) »

Googleの「勝手にREST API」を利用して検索する (Ruby編)

  はてなブックマークに追加 このエントリを livedoor クリップへ追加

Googleからは、多くのWeb APIが提供されています。もちろん検索用のAPIも公開されています。その名も「Google AJAX Search API」です。


しかし、「REST」形式のAPIは公開されていないようです。「REST」形式のAPIは直感的でとても利用しやすいので残念です。


そこで、「勝手にREST API」を利用してみようと思います。「勝手にREST API」とは、Googleで検索をした際に検索結果が表示されるURLをプログラムで作ってアクセスし、その検索結果(HTML形式)をうまく利用しようというプロジェクト名です(笑)。

始めに、あるキーワードを入力して、検索を行った結果を表示するために必要なURLをつくるための情報を調べてみました。非常に有用な以下のサイトを見つけることができました。

  ○「Google 検索の 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の利用回数が制限されているらしい(正確には確認できていません)




Ads BOARD








最近のエントリーとその関連エントリー

トラックバック

このエントリーのトラックバックURL:
http://kazuhiro.ty.land.to/blog/mt-tb.cgi/143

この一覧は、次のエントリーを参照しています: Googleの「勝手にREST API」を利用して検索する (Ruby編):

» 開発ミーティング@Mixing そして旧友と飲み from Cazperのつれづれ日記
[晴]上巳 朝、Yahooオークションで出品していたオーディオ機器を落札者宛に送付。今回は、Yahooゆうパックを利用し、近くのファミリーマートに持ち込む... [詳しくはこちら]

コメント

こんにちは、 WebOS Goodies の歩行者と申します。
ご紹介&トラックバックありがとうございます。

私もhpricotには注目していたので、
参考にさせていただきます。
そうそう、Google検索の結果を取得するなら、
SearchMash APIもお勧めですよ。
こちらのページでご紹介しています。
日本語優先検索ができないのが欠点ですが。

それでは、今後ともよろしくお願いします。

歩行者さま

はじめまして、kazuhiroです。
コメントありがとうございます。

「WebOS Goodies」には、参考になる情報が盛りだくさんですね。
今後とも参考にさせていただきたいと思います。

「SearchMash API」の関する情報ありがとうございます。
拝見させていただきます。

こちらこそ、今後ともよろしくお願いします。

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

  Map