python-amazon-simple-product-api を使用して、amazonの商品情報を取得したいです。
しかし TypeError: key: expected bytes or bytearray, but got 'list' が生じてしまいます。
環境 jupyter note bookを使用しています。
import os from amazon.api import AmazonAPI # pip install python-amazon-simple-product-api # 環境変数から認証情報を取得する。 AMAZON_ACCESS_KEY = [''] AMAZON_SECRET_KEY = [''] AMAZON_ASSOCIATE_TAG = [''] # AmazonAPIオブジェクトを作成する。キーワード引数Regionに'JP'を指定し、Amazon.co.jpを選択する。 amazon = AmazonAPI(AMAZON_ACCESS_KEY, AMAZON_SECRET_KEY, AMAZON_ASSOCIATE_TAG, Region='JP') # search()メソッドでItemSearch操作を使い、商品情報を検索する。 # キーワード引数Keywordsで検索語句を、SearchIndexで検索対象とする商品のカテゴリを指定する。 # SearchIndex='All'はすべてのカテゴリから検索することを意味する。 products = amazon.search(Keywords='kindle', SearchIndex='All') for product in products: # 得られた商品(AmazonProductオブジェクト)について反復する。 print(product.title) # 商品名を表示。 print(product.offer_url) # 商品のURLを表示。 price, currency = product.price_and_currency print(price, currency) # 価格と通貨を表示。
を実行。※AMAZON_ACCESS_KEY 、AMAZON_SECRET_KEY、AMAZON_ASSOCIATE_TAG は伏せています。
すると次のエラー結果となります。
TypeError Traceback (most recent call last) <ipython-input-10-a7b91ebdccca> in <module>() ----> 1 for product in products: # 得られた商品(AmazonProductオブジェクト)について反復する。 2 print(product.title) # 商品名を表示。 ~\Anaconda3\lib\site-packages\amazon\api.py in __iter__(self) 542 Yields a :class:`~.AmazonProduct` for each result item. 543 """ --> 544 for page in self.iterate_pages(): 545 for item in getattr(page.Items, 'Item', []): 546 yield AmazonProduct( ~\Anaconda3\lib\site-packages\amazon\api.py in iterate_pages(self) 559 while not self.is_last_page: 560 self.current_page += 1 --> 561 yield self._query(ItemPage=self.current_page, **self.kwargs) 562 except NoMorePages: 563 pass ~\Anaconda3\lib\site-packages\amazon\api.py in _query(self, ResponseGroup, **kwargs) 571 An lxml root element. 572 """ --> 573 response = self.api.ItemSearch(ResponseGroup=ResponseGroup, **kwargs) 574 root = objectify.fromstring(response) 575 if (hasattr(root.Items.Request, 'Errors') and ~\Anaconda3\lib\site-packages\bottlenose\api.py in __call__(self, **kwargs) 257 return self._maybe_parse(cached_response_text) 258 --> 259 api_url = self.api_url(**kwargs) 260 261 # throttle ourselves if need be ~\Anaconda3\lib\site-packages\bottlenose\api.py in api_url(self, **kwargs) 187 188 # calculate sha256 signature --> 189 digest = hmac.new(self.AWSSecretAccessKey, data, sha256).digest() 190 191 # base64 encode and urlencode ~\Anaconda3\lib\hmac.py in new(key, msg, digestmod) 142 method. 143 """ --> 144 return HMAC(key, msg, digestmod) ~\Anaconda3\lib\hmac.py in __init__(self, key, msg, digestmod) 40 41 if not isinstance(key, (bytes, bytearray)): ---> 42 raise TypeError("key: expected bytes or bytearray, but got %r" % type(key).__name__) 43 44 if digestmod is None: TypeError: key: expected bytes or bytearray, but got 'list'
productsがリストになっていないのが原因ではないと思います。対処方法を教えてください。よろしくお願いします。
回答1件
あなたの回答
tips
プレビュー