Bing API on Ruby
気をつけること
- Bing Search API – Quick Start and Code Samples に載ってるサンプル php コードで指定している Authorization ヘッダの指定の仕方は間違っているので真似しない。実際はアカウント名は空文字列、パスワードに accout_key を使う。
- なぜかクエリはシングルクォーテーションで囲まないと認識されない
- net/http, net/https のどちらでも叩ける
- HTTP メソッドは POST でも GET でもどちらでもよいっぽい
Sample code
net/http, Net::HTTP::Get ver.
require 'net/https' class BingWrapper def initialize( account_key ) @account_key = account_key @uri_base = 'https://api.datamarket.azure.com/Bing/Search/Image?$format=json&Query=' end def get( unencoded_query ) # I don't know why, but single quotaition is needed to specify a Query. uri = URI.parse( "%s'%s'" % [@uri_base, URI.encode( unencoded_query )] ) req = Net::HTTP::Get.new( uri.request_uri ) req.basic_auth( '', @account_key) res = Net::HTTP.start(uri.hostname, uri.port, :use_ssl => uri.scheme == 'https'){ |http| http.request(req) } return res.body end end
net/https, Net::HTTP::Post ver.
require 'net/https' class BingWrapper def initialize( account_key ) @account_key = account_key @uri_base = 'https://api.datamarket.azure.com/Bing/Search/Image?$format=json&Query=' end def get( unencoded_query ) # I don't know why, but single quotaition is needed to specify a Query. uri = URI.parse( "%s'%s'" % [@uri_base, URI.encode( unencoded_query )] ) https = Net::HTTP.new( uri.host, uri.port ) https.use_ssl = true https.verify_mode = OpenSSL::SSL::VERIFY_NONE req = Net::HTTP::Post.new( uri.request_uri ) req.basic_auth( '', @account_key ) res = https.request( req ) return res.body end end
余談
res = Net::HTTP.start(uri.hostname, uri.port, :use_ssl => uri.scheme == 'https'){ |http| http.request(req) }
この書き方いいなぁと思った。