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 = 'AKIAIZ5PZPNPJADUK6IQ' AMAZON_SECRET_KEY = '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' 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="AKIAIZ5XXXXXXXXXxK6IQ"/> <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="ivDU20vm6xAw31KJtcRheoMEL22fTZR3F759UttNdo4="/> </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=AKIAIZ5PZPNPJADUK6IQ&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=AKIAIZ5PZPNPJADUK6IQ&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=AKIAIZ5PZPNPJADUK6IQ&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=AKIAIZ5PZPNPJADUK6IQ&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=AKIAIZ5PZPNPJADUK6IQ&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を使う」