Rubyのgoogle-api-clientでGoogle Custom Search APIを使う
Google Custom Search APIとは
Google検索の結果をJSONで取得できたら便利ですよね。
スクレイピングで頑張るという手も有りますが、ライセンスやサイトの仕様変更を気にする必要が有ります。
そんなときは Google Custom Search API を使いましょう。 手軽に検索結果のJSONを取得できます。
APIキーとCustom Searrch Engine IDの取得
このAPIを使うにはGoogleAPIのAPIキーとCustom Search EngineのIDが必要になります。
その手順については既にいくつか記事があるのでそれらを参照してください。
- google custom search engine(CSE)を使って、検索結果をjsonで取得する - ryutamaki
- google custom search apiを使ってデータを収集する方法 | WebBigData
一点だけ注意事項が有ります、Custom Search Engineの Search the entire web
は一先ずONにしておいてください。
OFFだと予め登録したドメインしか検索してくれません。
動作確認
APIキーとCSE_IDの用意ができたら、curlで動作確認してみましょう。
API_KEYとCSE_IDを取得したキーとIDで置き換えて、QUERYを検索したいワードに置き換えて実行してください。
curl 'https://www.googleapis.com/customsearch/v1?key=API_KEY&cx=CSE_ID&q=QUERY'
大量のJSONが出力されれば成功です。
google-api-client
RubyからこのAPIを使う場合はgoogle-api-ruby-clientを使うと少し手間が省けます。
gem install google-api-client
以下のコードは入力した文字列で検索して、結果のタイトルとURLを出力する例です。
#!/usr/bin/env ruby require 'google/apis/customsearch_v1' API_KEY = '' CSE_ID = '' searcher = Google::Apis::CustomsearchV1::CustomsearchService.new searcher.key = API_KEY print "QUERY> " query = gets.chomp results = searcher.list_cses(query, cx: CSE_ID) items = results.items pp items.map {|item| { title: item.title, link: item.link} }
指定できるパラメータはここに書いてあります。
developers.google.com
例えば特定のサイトのみ検索対象にしたいばあいは、site_search
を使います。
searcher.list_cses(query, cx: CSE_ID, site_search: 'example.com')
フリーエディションだと1日100件のリクエスト制限があるので検証のときは注意しましょう。
戻り値をいじくり回したいときは binding.pry
がおすすめです。