Bing Search API を使いたいと思ったのでPythonでラッパーを作ってみた
Yahoo API が使えないので,Bing Search APIを使いたい.
5000トランザクション/月までなら無料で使えるのは素晴らしい.
登録
Bing Search APIのページに行き,右下の5000トランザクション/月のサインアップをクリック.
Microsoft アカウントがあるならそれでサインインし,持っていないなら登録する.
「購入手続き」とか出るが,怖がらずに進める.
キーを確認
Yahoo API とかだと,URLのクエリパラメータにアプリケーションキーを入れたりするわけだが,Bing Search API の場合は,キーをBasic認証に使う.
Basic認証のユーザとパスワードの両方にキーを入力することで,無事にアクセスできる.
キーはここにプライマリアカウントキーとして載っているので,コピー等しておく.
使ってみる
https://api.datamarket.azure.com/Bing/Search/Web?Query='京都'にアクセスすると,ユーザとパスワードが聞かれるので,両方にコピーしたキーを入力する.
feedタグを使って記述されているので,RSSリーダーに登録する画面が現れるかもしれないが,ソースを見てみたら,それっぽいのが返ってきてることがわかる.
つまり,デフォルトではXML形式で返ってくる.
https://api.datamarket.azure.com/Bing/Search/Web?Query='京都'&$format=jsonにアクセスすると,今度はjson形式で返ってくる.
他にも$skip=nを指定すればn+1件目から取得でき,$top=nを指定すれば全部でn件取得できる.*1
詳しい使い方はBing API Schema Guideに書かれている.
ラッパー
色々面倒なので,Pythonのラッパーを作った.
調べたら,pybing - PyBing is a Python wrapper for the Bing Search API - Google Project Hostingがあったが,APIの仕様変更で今は使えないので,自作することに.
Gistに載せた.*2 こんな感じ.
追記:
関連クエリも取得できるように更新
使い方は簡単で,キーを指定してBingクラスのインスタンスを生成して,Bing.web_searchメソッドにクエリや取得件数や取得内容を指定するだけで,リストで返ってくる.
APIを叩くときにrequestsモジュールを使ってるので,インストールしていない場合は,インストールが必要.
試しに使ってみると,こんな感じ.
>>> import json >>> from bing_api import Bing >>> bing = Bing('<キー>') >>> results = bing.web_search('京都', 3, ["Title", "Url"]) >>> print json.dumps(results, indent=2) [ { "Url": "http://www.pref.kyoto.jp/", "Title": "\u4eac\u90fd\u5e9c\u30db\u30fc\u30e0\u30da\u30fc\u30b8" }, { "Url": "http://ja.wikipedia.org/wiki/%E4%BA%AC%E9%83%BD", "Title": "\u4eac\u90fd - Wikipedia" }, { "Url": "http://kanko.city.kyoto.lg.jp/", "Title": "\u4eac\u90fd\u89b3\u5149\u30aa\u30d5\u30a3\u30b7\u30e3\u30eb\u30b5\u30a4\u30c8 \u4eac\u90fd\u89b3\u5149Navi" } ]
上のやつは,"京都"というクエリの検索結果上位3件のタイトルとURLを取得するというもの.
jsonは出力形式をわかりやすくするために使ってるだけで,必ずしも必要なわけではない.
自由に使って下さい.
何かあればコメントにでも.