BigDataの手法を使って価値のある情報を得るには、望む情報を内在する大量データが必要。そして、抽出したい情報の仕様も必要。さらに、、分析前の大量データが結果を出すのに相応しいのか、また、分析手法が妥当か?も課題である。
国内統計データとか政府が公開しているデータで分析する事例もあるようだけど、、国勢調査の結果とか自分はあまり興味がわかない。そんな中、しょっちゅう利用しているAmazonサイト自体をBigDataとして分析したらどうか?と思った*1。少なくとも自分は、Kindleの無料コミックページを毎週読んでいて、★4つ以上で、無料で、未読のコミックだけを購入して(0円で購入)読んでいる。既読のコミックと新作コミック(0円)を目で見て分類するのだけど、これが結構時間かかる。しかも、、昔に0円で読んだコミックが、一旦有料になって、再度0円になって、Amazonでは「新作」ラベルが付いたりして紛らわしい。
そんな中、if(Kindle無料コミック&&既読除外&&評価が★4つ)とか、そういう条件でコミック一覧が出せたら結構便利。AmazonのKindleページをPython等でスクレイピングする方法もあるけど、ここはひとつAmazonが提供するAPI(Amazon Product Advertising API)を使って、自分の読みたい新作無料マンガ本を検索できるようにしてみたい(昔読んだのは省いてくれる機能付き)。
■追記
APIツールを使って商品情報を取得するサンプル
#!/usr/bin/python from amazon.api import AmazonAPI AMAZON_ACCESS_KEY = 'xxxxxxxxxxxxxxx' AMAZON_SECRET_KEY = 'xxxxxxxxxxxxxxx' AMAZON_ASSOC_TAG = 'xxxxxxxxxxxxxxxx' amazon = AmazonAPI(AMAZON_ACCESS_KEY, AMAZON_SECRET_KEY, AMAZON_ASSOC_TAG,region="JP") id='4873110637' # C++プログラミング入門 (ISBN-10: 4873110637) product = amazon.lookup(ItemId=id) import inspect print inspect.getmembers(product)
■ご参考URL
ぱんぶろ様、「「Amazon API」の使い方を紹介します」
https://www.panzee.biz/archives/6222
Amazon::Product Advertising API
https://images-na.ssl-images-amazon.com/images/G/09/associates/paapi/dg/index.html
Amazon Product APIをPythonで叩く簡単な方法
http://qiita.com/zabeth129/items/00d69d451a16ea3e714a
Pythonで書かれたAPIを叩くツール
https://github.com/yoavaviram/python-amazon-simple-product-api
RESTでAPIを叩く際の署名作成手順
https://images-na.ssl-images-amazon.com/images/G/09/associates/paapi/dg/index.html?Query_QueryAuth.html
■追記
基本的なライブラリだけでAmazon Produce APIを叩く例
#!/usr/bin/python
import urllib2
import hashlib, hmac
import base64
import time
HTTPVerb = 'GET'
AMAZON_FQDN = 'ecs.amazonaws.jp'
REQUEST_URI = '/onca/xml'
AMAZON_URL = 'http://' + AMAZON_FQDN + REQUEST_URI
AMAZON_ACCESS_KEY = 'AKIxxxxxxxxxxxxxxxxxxxIQ'
AMAZON_SECRET_KEY = 'VQxxxxxxxxxxxxxxxxxxxxxxxxxc'
AMAZON_ASSOC_TAG = 'dunesakurnejp-22'
params = {
"Operation" : "ItemLookup",
"ItemId" : '4873110637', # books of C++
"Service" : "AWSECommerceService",
"AWSAccessKeyId" : xxxxxxxxxxxxxx,
"AssociateTag" : xxxxxxxxxxxxx,
"Timestamp" : time.strftime("%Y-%m-%dT%H:%M:%SZ", time.gmtime())}
params = sorted(params.items())
request = []
for (aKey,aVal) in params:
request.append("%s=%s" % (aKey, urllib2.quote(aVal.encode("utf-8"))))
sign = HTTPVerb + "\n" + AMAZON_FQDN + "\n" + REQUEST_URI + "\n" + '&'.join(request)
digest = hmac.new(AMAZON_SECRET_KEY, sign, hashlib.sha256).digest()
signature = urllib2.quote(base64.b64encode(digest))
request.append("Signature=%s" % signature)
rest_url = AMAZON_URL + '?' + '&'.join(request)
opener = urllib2.build_opener()
ret = opener.open(rest_url).read()
from xml.dom.minidom import parseString
print parseString(ret).toprettyxml(encoding="sjis")実行結果
<?xml version="1.0" encoding="sjis"?>
<ItemLookupResponse xmlns="http://webservices.amazon.com/AWSECommerceService/2011-08-01">
<OperationRequest>
<HTTPHeaders>
<Header Name="UserAgent" Value="Python-urllib/2.7"/>
</HTTPHeaders>
<RequestId>dba9d1ed-67ad-46bf-9e43-e09f4c2c77d7</RequestId>
<Arguments>
<Argument Name="AWSAccessKeyId" Value="AKXXXXXXXXXxXXXXQ"/>
<Argument Name="AssociateTag" Value="duneXXXXXXXXXXXX22"/>
<Argument Name="ItemId" Value="4873110637"/>
<Argument Name="Operation" Value="ItemLookup"/>
<Argument Name="Service" Value="AWSECommerceService"/>
<Argument Name="Timestamp" Value="2017-04-23T07:59:00Z"/>
<Argument Name="Signature" Value="ivXXXXXXXXXXXXXdo4="/>
</Arguments>
<RequestProcessingTime>0.0050621220000000</RequestProcessingTime>
</OperationRequest>
<Items>
<Request>
<IsValid>True</IsValid>
<ItemLookupRequest>
<IdType>ASIN</IdType>
<ItemId>4873110637</ItemId>
<ResponseGroup>Small</ResponseGroup>
<VariationPage>All</VariationPage>
</ItemLookupRequest>
</Request>
<Item>
<ASIN>4873110637</ASIN>
<DetailPageURL>https://www.amazon.co.jp/C-%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E5%85%A5%E9%96%80-%E3%82%B0%E3%83%AC%E3%82%B4%E3%83%AA%E3%83%BC-%E3%82%B5%E3%83%86%E3%82%A3%E3%82%A2/dp/4873110637?SubscriptionId=AKIxxxxxxxxxxxxxK6IQ&tag=dunesakurnejp-22&linkCode=xm2&camp=2025&creative=165953&creativeASIN=4873110637</DetailPageURL>
<ItemLinks>
<ItemLink>
<Description>Add To Wishlist</Description>
<URL>https://www.amazon.co.jp/gp/registry/wishlist/add-item.html?asin.0=4873110637&SubscriptionId=AKIxxxxxxxxxxxxQ&tag=dunesakurnejp-22&linkCode=xm2&camp=2025&creative=5143&creativeASIN=4873110637</URL>
</ItemLink>
<ItemLink>
<Description>Tell A Friend</Description>
<URL>https://www.amazon.co.jp/gp/pdp/taf/4873110637?SubscriptionId=AxxxxxxxxxxxxxxQ&tag=dunesakurnejp-22&linkCode=xm2&camp=2025&creative=5143&creativeASIN=4873110637</URL>
</ItemLink>
<ItemLink>
<Description>All Customer Reviews</Description>
<URL>https://www.amazon.co.jp/review/product/4873110637?SubscriptionId=AxxxxxxxxQ&tag=dunesakurnejp-22&linkCode=xm2&camp=2025&creative=5143&creativeASIN=4873110637</URL>
</ItemLink>
<ItemLink>
<Description>All Offers</Description>
<URL>https://www.amazon.co.jp/gp/offer-listing/4873110637?SubscriptionId=AKxxxxxxxxxxxQ&tag=dunesakurnejp-22&linkCode=xm2&camp=2025&creative=5143&creativeASIN=4873110637</URL>
</ItemLink>
</ItemLinks>
<ItemAttributes>
<Author>グレゴリー サティア</Author>
<Author>ダウグ ブラウン</Author>
<Creator Role="原著">Gregory Satir</Creator>
<Creator Role="原著">Doug Brown</Creator>
<Creator Role="翻訳">望月 康司</Creator>
<Creator Role="翻訳">谷口 功</Creator>
<Manufacturer>オライリー・ジャパン</Manufacturer>
<ProductGroup>Book</ProductGroup>
<Title>C++プログラミング入門</Title>
</ItemAttributes>
</Item>
</Items>
</ItemLookupResponse>下記「人工知能に関する断創録」様の記事を参考に一部改変しました。
http://aidiary.hatenablog.com/entry/20100116/1263647145
「PythonでAmazon Product Advertising APIを使う」