Yahoo! JAPAN の「アップグレード版ウェブ検索API」
2011年3月31日付けで Yahoo!検索 Web API のサービスが変更されていた.
http://developer.yahoo.co.jp/webapi/search/premium.html
(ずっと Google の AJAX を利用していたため,気付かなかったのだ)
平たく言えば,従来型の API を叩いても "Service unavailable. Too many users." というレスポンスしか返ってこない,というもの.確かに,上記ページには「同時にアクセス可能なユーザー数に制限を設けます(数セッションを上限とします)。」と記載してある.数セッションなんてすぐに埋まるに決まっているから,いわゆる総量規制と考えてよい.まぁ,過去のサービス利用はフリーライドとも捉えられるから,Yahoo! JAPAN の考え方は正しい.
そこで,現在,まともに使えるのが「アップグレード版ウェブ検索API」であり,その利用には Yahoo!プレミアム会員や yahoo! BB会員などの資格が必要となった.また,アプリケーション ID も「アップグレード版ウェブ検索API」専用の ID が必要となる.
アップグレード版検索API専用アプリケーションIDの取得
Yahoo!JAPAN デベロッパーネットワーク
https://e.developer.yahoo.co.jp/webservices/register_application
における手続きは以下のとおり:
- 基本情報・・・Yahoo! JAPAN ID の確認 & 連絡先メールアドレスの設定
- 開発するアプリケーションの選択・・・「アップグレード版検索APIを使ったアプリケーション」を選択
- アプリケーションの基本情報・・・アプリケーション名は "MyFirstYahooSearchApplication", サイトURLは「Webアプリケーションでないため,URLなし」を選択,そしてアプリケーションの説明を空欄とした.
- ガイドラインの確認・・・「同意する」をチェック.
登録ボタンをクリックすると,確認画面が出てくる.
登録内容を確認して,もう一度登録ボタンをクリックすると登録が完了し,アップグレード版検索API専用IDが表示される.
Python から Yahoo!JAPAN ウェブ検索APIを叩く
#coding: utf-8 # Yahoo!JAPAN アップグレード版ウェブ検索 API の利用 # (注意) エラーハンドリングを含まない. import urllib2 from BeautifulSoup import BeautifulSoup #Yahoo!JAPAN アップグレード版ウェブ検索 API のURL url="http://search.yahooapis.jp/PremiumWebSearchService/V1/webSearch?appid=%s&query=%s&results=%d&start=%d" #検索パラメータ appid = "application ID" query = "Evernote" #クエリ resultsPerQuery = 20 #クエリあたりに返してもらう件数 #BeautifulSoup を使って XML を解析し,{title, url} の組を作る. pages = [] for count in range(5): # Yahoo! JAPAN へ5回,問い合わせる(総計 5 * resultsPerQuery 件) start = resultsPerQuery * count + 1 requesturl = url % (appid, query, resultsPerQuery, start) response = urllib2.urlopen(requesturl).read() soup = BeautifulSoup(response) results = soup.findAll('result') for result in results: pages.append({'title':result.find('title').text, 'url':result.find('url').text}) #収集した結果の表示 for idx in range(len(pages)): print pages[idx]['title'], pages[idx]['url']