2013年4月14日日曜日

Pythonで、Yahoo商品検索APIから gzipで結果を取得する。

WEB高速化とやらが、ブームのようです。
確かに、早いことは良いことだ。

ふと、Yahoo商品検索APIから gzipで結果を取得できないかと、調べてみた。

どうやら、リクエストの時、Accept-encoding に gzip を指定すれば良いみたい。

こんな感じ。

-- ここから --
import urllib, urllib2, gzip, StringIO, json

url = "http://shopping.yahooapis.jp/ShoppingWebService/V1/json/itemSearch?"
query = {
 'appid'     : <アプリケーションID>,
 'affiliate_type' : 'yid',
 'query'     : "sony vaio"
}
url = url + urllib.urlencode(query)
req = urllib2.Request(url)
req.add_header('Accept-encoding', 'gzip')
res = urllib2.urlopen(req)
res_data = res.read()
sf = StringIO.StringIO(res_data)
f = gzip.GzipFile(fileobj=sf).read()
json_data = json.loads(f)
-- ここまで --

req.add_header で、gzip を指定しているのが、ポイントです。

print res.headers で、確認してみます。

こんな感じ。
Date: Sun, 14 Apr 2013 06:20:01 GMT
Vary: Accept-Encoding
Content-Type: application/json; charset=utf-8
Content-Encoding: gzip
Cache-Control: private
Connection: close
Transfer-Encoding: chunked

ちなみに、gzip を指定しないと..
Date: Sun, 14 Apr 2013 06:19:19 GMT
Vary: Accept-Encoding
Content-Type: application/json; charset=utf-8
Cache-Control: private
Connection: close
Transfer-Encoding: chunked

ついでに、JSON を確認しておきましょう。
print json.dumps(json_data, sort_keys=True, indent=4)

とは言っても、元々、Yahooから取得するJSONデータは大きくないので、どれほど高速化に貢献できるのか、疑問ですけどね..(^^;;

0 件のコメント:

コメントを投稿