Yahoo! JAPAN の「アップグレード版ウェブ検索API」

2011年3月31日付けで Yahoo!検索 Web API のサービスが変更されていた.
http://developer.yahoo.co.jp/webapi/search/premium.html
(ずっと GoogleAJAX を利用していたため,気付かなかったのだ)

平たく言えば,従来型の 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
における手続きは以下のとおり:

  1. 基本情報・・・Yahoo! JAPAN ID の確認 & 連絡先メールアドレスの設定
  2. 開発するアプリケーションの選択・・・「アップグレード版検索APIを使ったアプリケーション」を選択
  3. アプリケーションの基本情報・・・アプリケーション名は "MyFirstYahooSearchApplication", サイトURLは「Webアプリケーションでないため,URLなし」を選択,そしてアプリケーションの説明を空欄とした.
  4. ガイドラインの確認・・・「同意する」をチェック.

登録ボタンをクリックすると,確認画面が出てくる.
登録内容を確認して,もう一度登録ボタンをクリックすると登録が完了し,アップグレード版検索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']