質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

1回答

2614閲覧

python-amazon-simple-product-api でamazonの商品情報を取得したい

giro1975

総合スコア37

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

1クリップ

投稿2018/09/10 04:48

編集2018/09/10 13:53

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がリストになっていないのが原因ではないと思います。対処方法を教えてください。よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tebonz

2018/09/10 04:58

markdown で記載して、どのソースコードでどういったエラーが発生しているかわかるようにした方が回答が集まると思いますよ。
giro1975

2018/09/10 13:54

ありがとうございます。書き直してみました。また気になる点があれば教えてください。よろしくお願いします。
guest

回答1

0

ベストアンサー

python

1AMAZON_ACCESS_KEY = [''] 2AMAZON_SECRET_KEY = [''] 3AMAZON_ASSOCIATE_TAG = ['']

って箇所ですが実際には以下の様にしていますか?

python

1AMAZON_ACCESS_KEY = 'xxxxx' 2AMAZON_SECRET_KEY = 'xxxxx' 3AMAZON_ASSOCIATE_TAG = 'xxxxxx-22'

それぞれの値は配列で渡しては正常に動作しませんよ。
後者のコードで実行したところ正常に動作しましたが、前者の様に配列にした際には同様のエラーメッセージがでました。
おそらく、配列にしていることが原因かと。

投稿2018/09/10 14:00

tebonz

総合スコア198

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

giro1975

2018/09/10 15:09

ありがとうございました。解決しました。 TypeError: key: expected bytes or bytearray, but got 'list' はここのことだったんですね。 これからもよろしくお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問