検索エンジンからデータ取って加工してみたいな事をしたかったので API を調べたら Bing Search API が良さそうな感じがしたので使ってみた。
Bing Developer CenterBing Search API
月5000回までは無料で利用でき、Web, 画像, ニュース, ビデオ, 関連検索, スペルサジェスト の6種類のクエリーを行う事ができる。形式は XML か Json となる。
無料版であれば上記 Bing Developer Center に登録を行うだけで利用する事が可能で、お金を払えばそれ以上の検索を行う事もできる。
Bing Search API を使ってみる
API は http でアクセスするだけで簡単に利用する事ができ、ブラウザからでも動作を確認する事ができる。
https://api.datamarket.azure.com/Bing/Search/Web?$format=json&Query='Surface Pro 3'
Query に検索語句を入れるわけだがシングルクォートで囲わないといけないようだ。
Basic 認証を求められるのでユーザーは空で、パスワードに取得したアクセスキーをいれれば結果が返ってくる。
スクリプトから扱う場合も https でアクセスして json をパースするだけの簡単な作業となる。
require 'open-uri'
require 'net/https'
require 'json'
account_key = 'account_key'
uri_base = 'https://api.datamarket.azure.com/Bing/Search/Web?$format=json&Query='
query = 'Surface Pro 3'
uri = URI.parse("%s'%s'" % [uri_base, URI.encode(query)])
https = Net::HTTP.new(uri.host, uri.port)
https.use_ssl = true
https.verify_mode = OpenSSL::SSL::VERIFY_NONE
req = Net::HTTP::Get.new(uri.request_uri)
req.basic_auth('', account_key)
res = https.request(req)
json_data = JSON.load(res.body)
json_data['d']['results'].each do |value|
puts value['Title'] + ':' + value['Url']
end
実行すると検索結果の一覧が見れる。
$ ruby test-bing-web-search-api.rb
New Surface Pro 3 Tablet - The Tablet That Can Replace ...:http://www.microsoft.com/surface/en-us/products/surface-pro-3
Microsoft Surface Tablets - The Windows Tablet That Does More:http://www.microsoft.com/surface/en-us
Microsoft Surface Pro 3 review - CNET - Product reviews ...:http://www.cnet.com/products/microsoft-surface-pro-3/
# 以下略
便利だ。