WebAPI使う基本 「ひとがご」のGoogleサジェスト結果を取得する
URLエンコード
URLエスケープともいう。
from urllib import urlencode param = { 'hl':'ja', 'q': 'ひとがご', 'output':'toolbar', } encoded_param = urlencode(param)
outputを止めて、'callback':'callback_func'にすると、callback_funcが指定されたJSONPでレスポンスを取得することができる。
URLの作成
GoogleSuggestのURL
url = 'http://www.google.co.jp/complete/search?%s' % param
HTTPアクセス
リクエストの送信及びレスポンスの取得。
import urllib2 try: res = urllib2.urlopen(url); except urllib2.HTTPError,e: print e.read() exit(0)
(おまけ)レスポンスボディのファイルへのかきこみ
response_body = res.read(); f = open('/tmp/response.xml','w') f.write(response_body) f.close()
(おまけ)レスポンスボディの整形(tidyを使う)
tidyコマンドを使って整形を行う。
from popen2 import popen2 response_body = res.read(); (pipeout,pipein) = popen2('tidy -xml -utf8 -i') pipein.write(response_body) pipein.close() for line in pipeout: print line, pipeout.close()
ってやったら、popen2は古いから、subprocessを使えと言われた。
from subprocess import * p = Popen(['/usr/bin/tidy','-xml','-utf8','-i'],shell=False,bufsize=1,stdin=PIPE,stdout=None,close_fds=True) p.stdin.write(response_body) p.stdin.close()
bufsize=1は1行ずつバッファリング。0はしないでそれ以外の正の整数ならその大きさのバッファが使われるのだそうな。
http://www.python.jp/doc/2.5/lib/node530.html
以上を踏まえて、グーグルサジェストを使って「ひとがご」のサジェストをさせた時に出力されるものを取得するスクリプトは
# -*- coding: utf-8 -*- from urllib import urlencode from urllib2 import urlopen from subprocess import * param = { 'hl':'ja', 'q': 'ひとがご', 'output':'toolbar', } encoded_param = urlencode(param) url = 'http://www.google.co.jp/complete/search?%s' % (encoded_param) print url try: res = urlopen(url); except HTTPError,e print e.read() exit(0) response_body = res.read() p = Popen(['/usr/bin/tidy','-xml','-utf8','-i'],shell=False,bufsize=1,stdin=PIPE,stdout=None,close_fds=True) p.stdin.write(response_body) p.stdin.close()
結果は以下のとおり。
<?xml version="1.0"?> <toplevel> <CompleteSuggestion> <suggestion data="人がゴミのようだ" /> <num_queries int="11000000" /> </CompleteSuggestion> <CompleteSuggestion> <suggestion data="人がゴミのようだ aa" /> <num_queries int="296000" /> </CompleteSuggestion> <CompleteSuggestion> <suggestion data="人がゴミ" /> <num_queries int="16800000" /> </CompleteSuggestion> <CompleteSuggestion> <suggestion data="人がゴミのようだ ムスカ" /> <num_queries int="38900" /> </CompleteSuggestion> <CompleteSuggestion> <suggestion data="人がゴミのようだ 名言" /> <num_queries int="153000" /> </CompleteSuggestion> <CompleteSuggestion> <suggestion data="人がゴミのよう" /> <num_queries int="17100000" /> </CompleteSuggestion> <CompleteSuggestion> <suggestion data="人がゴミのようだ youtube" /> <num_queries int="2110000" /> </CompleteSuggestion> <CompleteSuggestion> <suggestion data="人がゴミのようだ 英語" /> <num_queries int="640000" /> </CompleteSuggestion> <CompleteSuggestion> <suggestion data="まるで人がゴミのようだ" /> <num_queries int="626000" /> </CompleteSuggestion> <CompleteSuggestion> <suggestion data="なんで、人がゴミのようなん" /> <num_queries int="16000000" /> </CompleteSuggestion> </toplevel>
[参考]http://blog.livedoor.jp/dqnplus/archives/1345757.html
Google日本語入力すごいね。