ニュース取得系APIなんてこのご時世伍萬とあるだろうと高をくくっていたら痛い目をみたのでメモ.まだ調査中…

ニュース取得APIいろいろ

とりあえずさっと調べた昨今の事情はこんな感じ

google

Google Web Search APIとCustom Search APIがあり,現在は後者推奨.それぞれ制約・特徴は,

  • Google Web Search API
    • サムネ画像取得可
    • apikeyは不要
    • 1ページは 8件まで
    • 8ページ以上は取得できない
    • つまり最大64件しかURLとれない
    • 検索結果数の値がぶれる(あくまで概算)
  • Custom Search API
    • apikeyが必要
    • サムネ画像取得可
    • 1日100リクエスト
    • 1ページ10件
    • 10ページまでしか取得できない
    • つまり100件しかURLとれない

yahoo

2013年8月14日に検索api提供終了(http://developer.yahoo.co.jp/webapi/search/)
どうやらSEM事業者やサイト運営者による不正な利用増加が理由らしいです…

Bing

Bing search APIなるものがあります(http://www.bing.com/developers/s/APIBasics.html).制約等は,

  • MicrosoftアカウントによるAPIkeyの取得が必要
  • 月間5000リクエストまで無料
  • サムネ画像取得不可
  • 検索件数は取得できない
  • 一回あたりの最大取得可能件数は50件
  • さかのぼって検索できるのは1050件まで
  • 10000リクエスト$20,それ以降従量課金制

Google Web Search API

もとはGoogle AJAX Search APIと呼ばれていたらしいです.取得件数が少ないのがネック,APIkeyの取得は不要.
2010.11.01以降は使用非推奨.ざっくりとした使い方は以下の通り.

# -*- coding: utf-8 -*-
import urllib
import urllib2
import simplejson

keyword = u'スノーボード'
keyword = urllib.quote(keyword.encode('utf-8'))
        
url = 'https://ajax.googleapis.com/ajax/services/search/news?v=1.0&q='
url += keyword

response = urllib2.urlopen(url)
results = simplejson.load(response)
#print results
results = results['responseData']['results']

# ニュースのタイトル,url,概要を取得,他にもサムネイル等取得可能
for result in results:
    title = urllib.unquote(result['title'])
    url = result['unescapedUrl']
    content = urllib.unquote(result['content'])

Custom Search API

Google Web Search API廃止以降利用を推奨されているAPI.
利用制約は上記の通り.マニュアルはhttps://developers.google.com/custom-search/json-api/v1/overviewに記載されています.
pythonから叩く場合は,API ConsoleよりAPIkeyを取得し,

#! /usr/bin/python
# -*- coding:utf-8 -*-

import urllib
import json
QUERY = ''
API = ''
NUM = 10

url = 'https://www.googleapis.com/customsearch/v1?'
params = {
    'key': API_KEY,
    'q':'スノーボード',
    'cx':'013036536707430787589:_pqjad5hr1a',
    'alt':'json',
    'lr' :'lang_en',
}

f = urllib.urlopen(url)

d = feedparser.parse(f.read())

# number of the entries
numEns = len(d.entries)

i = 0

#a list to hold the data
alist = []

#検索結果トップから10ページのリンク,タイトル,概要,更新時間を取得
while i < numEns:
  #convert unicode string to utf-8 one
  blist = []
  dlink = d.entries[i]["link"]
  ddlink = dlink.encode('utf-8')
  dsummary = d.entries[i]["summary"]
  ddsummary = dsummary.encode('utf-8')
  dtitle = d.entries[i]["title"]
  ddtitle = dtitle.encode('utf-8')
  dupdated = d.entries[i]["updated"]
  ddupdated = dupdated.encode('utf-8')

  blist.append(ddlink)
  blist.append(ddsummary)
  blist.append(ddtitle)
  blist.append(ddupdated)

  alist.append(blist)
  i = i + 1

Bing Search API

利用制約は上記の通り.マニュアルはBing API Schema Guideに記載されています.
に行って右上の5000トランザクション/月のサインアップをクリック.Microsoft アカウントがあるならそれでサインインし,持っていないなら登録.
Bing Search API の場合は,キーをBasic認証に使う.

https://api.datamarket.azure.com/Bing/Search/Web?Query='スノーボード'&$format=jsonにアクセスすると,ユーザとパスワードが聞かれるので,両方にコピーしたキーを入力する.この場合formatにjson形式を指定しているのでjsonが返ってくる(デフォルトはxml).また$skip=nを指定すればn+1件目から取得でき,$top=nを指定すれば全部でn件取得できる.skipは最大1000,topは50がMAXなのでさかのぼって検索できる最大数は1050件.詳しくは上記のマニュアル参照のこと.

pythonから叩く場合はPyBingを使える.
もしくはここのpythonラッパーがよさそう.

Share Button

ニュース検索取得APIあれこれ

<2013/10/18>