KeepaAPIを使ってAmazonの商品情報を取得できるようになりました。
取得した商品情報には何が乗っているでしょうか?
KeepaAPIで取得した商品情報の型を調べる
KeepaAPIで取得した商品情報の型を見てみましょう。
型を調べる時は、『type(調べたい変数)』で調べる事ができます。
api_key='(認証コード64文字)' api = keepa.Keepa(api_key) products = api.query(['B083P5P8B5'],domain='JP') print(type(products)) print(type(products[0]))
ASINから取得した商品情報(products)は、List型です。(青色)
List型だった為、productsの中には複数の商品情報が入っていることになります。
今回は1商品しか取得していないので、1つですが。。。
調べたいASINをリストとして複数書けば、複数取得も可能です。
では、本命の商品情報について調べましょう。(赤色)
<class 'list'> <class 'dict'>
『dict』と書いてます。これはDictionary型だという事です。
Dictionary型には、KeyとValueが存在します。
Keyが分からない事にはValueを取得する事ができません。
Dictionary型のKeyを取得する
Dictionary型のKeyを取得します。
api = keepa.Keepa(api_key) products = api.query('B083P5P8B5',domain='JP') for item in products[0].keys(): print(item)
Dictionaryのkeys()という関数でKeyを取得する事が可能です。
keyの数だけループが回るように作りました。
そして、keyが何なのか出力します。
結果はこんな感じ
csv
categories
imagesCSV
manufacturer
title
(長いので省略)
offersSuccessful
g
categoryTree
data
DictionaryのKeyが分かったのでValueを表示
全てを表示してもいいのですが、長くなってしまうので、今回は商品名を取得しましょう。
api = keepa.Keepa(api_key) products = api.query('B083P5P8B5',domain='JP') print(products[0]['title'])
これで商品名を取得する事ができます。
結果は下記の通り
ルービックケージ (Rubik's Cage)
商品名を取得する事ができました。
他にもいろいろな情報が取得できるので、Keyの部分を変えて表示してみましょう。
KeepaAPIで取得した商品情報のkeyの型を調べる
Keyが分かりましたがValueが必ずしも文字とは限りません。
そこでDictionaryの中のKeyの型を更に調べます。
Keyを取得した方法にtypeも一緒に表示させてみました。
api = keepa.Keepa(api_key)
products = api.query('B083P5P8B5',domain='JP')
for item in products[0].keys():
print(item + ':' + str(type(products[0][item])))
結果はこんな感じになりました。
csv:<class 'list'>
categories:<class 'list'>
imagesCSV:<class 'str'>
manufacturer:<class 'str'>
title:<class 'str'>
(長いので省略)
offersSuccessful:<class 'bool'>
g:<class 'int'>
categoryTree:<class 'list'>
data:<class 'dict'>
なるほど・・・Dictionary型の中にDictionary型が。。。
全てのKeyが分かるように関数を組みます。
型がDictionaryだったら、そのDictionaryのKeyを取得するように再帰的に関数を回しましょう!!
Dictionaryの時は再帰的に関数を
まずは、今までの内容を関数にします。
def Search_DictKey(dictionary):
for item in dictionary.keys():
print(item + ':' + str(type(dictionary[item])))
関数名はSearch_DictKeyにしました。引数にはDictionaryが入ります。
api = keepa.Keepa(api_key)
products = api.query('B083P5P8B5',domain='JP')
for product in products:
Search_DictKey(product)
これで先ほどと変わらない結果になりました。
次に関数に型がDictionaryならという条件を追加します。
def Search_DictKey(dictionary):
for item in dictionary.keys():
print(item + ':' + str(type(dictionary[item])))
if type(dictionary[item]) is dict:
Search_DictKey(dictionary[item])
if分を使って、Dictionaryかどうかの判断をしました(黄色)
そして、Dictionary型の時は、もう一度同じ関数を実行します。
これを再帰関数と呼びます。同じことを書かなくていいから覚えておくと便利です。
出力の結果は。。。
やってみてもらえればわかりますが、再帰的に回っているところが分かりませんでしたorz
そこで、引数を追加し、区切りをわかりやすくしましょう。
def Search_DictKey(dictionary,arg=''):
for item in dictionary.keys():
print(arg + item + ':' + str(type(dictionary[item])))
if type(dictionary[item]) is dict:
Search_DictKey(dictionary[item],arg + '\t')
引数に区切り文字となるものを貰うようにしました。※省略時は空文字
再帰的に回るときは頭にタブ(\t)がつくようにし、段落ができるようになりました。
下記は出力の一部抜粋
data:<class 'dict'>
AMAZON_time:<class 'numpy.ndarray'>
AMAZON:<class 'numpy.ndarray'>
df_AMAZON:<class 'pandas.core.frame.DataFrame'>
これで取得した商品情報のDictionary型のKeyを全て取得する事ができました。
まとめ
今回は、取得した商品情報の型を調べました。
Dictionary型の場合は、KeyとValueが存在し、Dictionaryに登録されているKeyを取得するようにします。
そしてDictionaryのValueがDictionaryの場合は、再帰的に関数を回し、全てのKeyを取得できるようにしました。
まだKeeaAPIから取得した商品情報の詳細までには辿り着いていませんが、Keyが分かるだけで大きな一歩を踏み出せています。
業務でプログラミング(C#/VB/Python)を作っている。
挫折を何回も繰り返し、幾度の壁を乗り越えてきた。
乗り越えてきた事を忘れないように記録に残す。
同じ思いをしている人への情報提供になれたらと思う。
基本は初心者に向けたプログラムの情報を提供する。
コメント
はじめましてコメント失礼致します。
こちらの記事を参考にkeepa api からAmazon 中古最安値 ランキング 出品数を取得を試みているのですが、どうもうまく行きません。ご教授おねがいできるでしょうか。不躾なコメントで申し訳ございません。
はじめまして。
質問ありがとうございます。
内容が理解できない為、質問を質問で返して申し訳ありません。
商品情報が取得出来ていないのでしょうか?
それとも、商品情報が取得出来ているけど、取得したデータの中でどこに何があるか分からないという意味でしょうか?
情報としては、下記ブログが分かりやすく説明されております。
https://tooledbuppan.com/keepa-api-3/
もし取得が目的であるなら、Seleniumを使う事も視野に入れてもいいかもしれません。
ブラウザ操作なので、処理時間は、APIよりかなり遅くなります。
ブラウザの画面から取得する為、
[検索]の結果の画面のtab[Amazon価格履歴]の[統計]からランキングを取得したり、
tab[Data]から必要な情報を取得したり
集計された結果を取得した方が楽だと思います。