PythonとAmazon Product Advertising APIでアフィリエイトリンク作成
- 公開日:2018/06/17
- 更新日:2018/10/19
- 投稿者:n bit
Python3とAmazon Product Advertising APIを利用してアマゾンアソシエイトのアフィリエイトリンクを自動生成するコードを作ってみました。APIを利用してXMLデータを取得するまでの基本的な解説やレスポンス要素の一覧表などをつけています。
この記事は約 分で読めます。(文字)
Amazon Product Advertising API とは
「Amazon Product Advertising API」とはアマゾン内で取り扱いがある商品の価格やその他様々な情報をAPI経由で取得できるものです。このAPIは登録だけ行えば無料で利用することができます。
「Amazon Product Advertising API」の利用に必要なもの
「Amazon Product Advertising API」を利用するには事前に「Amazonアソシエイト」と「Amazon Product Advertising API」に登録を行い下記の3つの値を取得しておく必要があります。
- アソシエイトID:Amazonアソシエイトで取得
- アクセスキー:Amazon Product Advertising API で取得
- シークレットキー:Amazon Product Advertising API で取得
この3つの値を含めたAPIのコードを記述し、後は、商品のASINコードをAPIに渡せば該当する商品の情報が取得できます。
Amazon Product Advertising APIに必要なIDとキーを取得する
まずは登録作業を済まし3つの値を取得しておきましょう。
Amazonアソシエイトの登録
Amazonアソシエイトの登録方法ついては多くのページで詳しく解説しています。まだアマゾンアソシエイトの新規登録が完了していない方はそれらを参考にして登録を済ませておいてください。
アソシエイトIDは複数発行することができます。今回のAPI用に新しくアソシエイトIDを発行したい方は事前に発行しておきましょう。
Amazon Product Advertising APIの登録方法
Amazon Product Advertising APIの登録方法を解説していきます。すでにアマゾンアソシエイトの登録が完了している場合はとても簡単です。
Product Advertising API ページにアクセス
Amazonアソシエイトへログインして「Product Advertising API」のページにアクセスします。アマゾンアソシエイトにログインしたら
- メインメニュー > ツール > Product Advertising API
と進んでください。
Product Advertising API の利用開始
下記の画面が表示されますので「利用をはじめる」ボタンをクリックしましょう。
アクセスキーとシークレットキーの取得
アクセスキーとシークレットキーが表示されますのでそれぞれコピーして保存しておきましょう。下側の「認証情報をダウンロードする」ボタンを押すことでCSVファイルをダウンロードすることもできます。
キーの保存が完了しましたら「認証キーの管理」リンクをクリックして次のページに進みます。
Product Advertising APIの登録完了
認証キーの管理ページが表示され、先程取得したアクセスキーが表示されていれば無事にすべての登録作業が完了です。
これで3つの値全て取得完了です。
PythonでAPI用のコードを記述してXMLデータを取得する
ここからは実際にPythonでAPI用のコードを記述してXMLデータを取得していきます。
Product Advertising APIを使うときの注意点
APIを使うときにいくつかの制限事項や注意事項があります。
- 1時間のリクエスト制限は3,600回以内
- Kindleの価格は取得できない
- API経由での取得エラーが割と起こるのでその対策が必要
よほどのことがない限り1つ目のリクエスト制限はアフィリエイトリンクの作成でほぼ引っかかる事はないと思います。
Kindleの価格に関してはAPI経由でどうやっても取得することができません。どうしても取得したい方はURLを取得した後にサイトからスクレイピングして取得する必要があります。アマゾンのサイトがスクレイピングしても大丈夫なのかどうか調べていないのと、Kindleの価格がそこまで今回は必要ではなかったため取得していません。
実際に取得してみた感じでは割と取得エラーが起こります。try文か、if文を使ってエラー回避をする必要があります。私はif文を使ってリクエストコード判定を行い、正常に取得していなかった場合は再度取得するように繰り返し処理を入れています。
API経由で取得するためのPythonコード
今回は長くなるため基本的の取得処理のみ記載しています。最終はご自分のご利用環境に合わせてカスタムしていただければと思います。特にエラー回避の処理等は必須となります。
# -*- coding: utf-8 -*-
import sys
import requests
import hmac
import hashlib
import base64
import urllib.parse
from datetime import datetime
from bs4 import BeautifulSoup
class AmazonProductAdvertisingAPI:
def __init__(self, associate_id='xxxxxxxx-22'):
""" 初期化処理 """
# ハッシュ関数とエンコードをset
self.hash_func = hashlib.sha256
self.encode_func = base64.b64encode
#id,keyのset
self.ACCESS_KEY = 'xxxxxxxxxxxxxxxxxxxxxxxx'
self.SECRET_KEY = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
self.ASSOCIATE_ID = associate_id
def get_info(self, asin_code='XXXXXXXXXX'):
api_domain = 'webservices.amazon.co.jp'
api_page = '/onca/xml'
# 商品のASINコード、ASINコードがない場合はISBN-10
asin_code = asin_code
# パラメーター用のタイムスタンプを生成
time_stamp = urllib.parse.quote(datetime.now().strftime('%Y-%m-%dT%H:%M:%S'))
# URLパラメータのセット
query='AWSAccessKeyId=' + self.ACCESS_KEY + \
'&AssociateTag=' + self.ASSOCIATE_ID + \
'&ItemId=' + asin_code + \
'&Operation=ItemLookup' + \
'&ResponseGroup=Images%2CItemAttributes%2COffers%2CReviews' + \
'&Service=AWSECommerceService' + \
'&Timestamp=' + time_stamp + \
'&Version=2013-08-01'
message = '\n'.join(['GET', api_domain, api_page, query])
# HMACのSignature生成(ハッシュ値を算出)
sing_gen = hmac.new(self.SECRET_KEY.encode('utf8'), message.encode('utf8'), self.hash_func)
raw_sign = sing_gen.digest()
sign = urllib.parse.quote(self.encode_func(raw_sign))
# API用URLの生成
url = 'http://' + api_domain + api_page + '?' + query + '&Signature=' + sign
res = requests.get(url)
soup = BeautifulSoup(res.text,'lxml')
# 商品情報を取得
productgroup = self.get_productgroup(soup)
detailpageurl = self.get_url(soup)
largeimage = self.get_largeimage(soup)
title = self.get_title(soup)
price = self.get_price(soup)
amount = self.get_amount(soup)
price_time = datetime.now().strftime('%Y年%m月%d日 %H時%M分時点')
author = self.get_author(soup)
brand = self.get_brand(soup)
link_text = 'Amazon 詳細ページへ'
result = {'productgroup':productgroup, 'asin_code':asin_code, 'detailpageurl':detailpageurl, 'largeimage':largeimage, 'title':title, 'price':price, 'amount':amount, 'author':author, 'brand':brand, 'price_time':price_time, 'link_text':link_text}
return result
def get_productgroup(self, soup):
return soup.find('itemattributes').find('productgroup').text.strip()
def get_url(self, soup):
return soup.find('item').find('detailpageurl').text.strip()
def get_largeimage(self, soup):
return soup.find('largeimage').find('url').text.strip()
def get_title(self, soup):
return soup.find('itemattributes').find('title').text.strip()
def get_price(self, soup):
return soup.find('offersummary').find('formattedprice').text.strip()
def get_amount(self, soup):
return soup.find('offersummary').find('amount').text.strip()
def get_brand(self, soup):
return soup.find('itemattributes').find('publisher').text.strip()
def get_author(self, soup):
return soup.find('itemattributes').find('author').text.strip()
以下にコードの内容の補足を入れておきます。
API経由での検索方法を指定
API経由でアマゾンをどのように検索するかを指定できます。今回はASINを使って個別商品の詳細情報を取得したかったので「ItemLookup」をしています。
Operation=ItemLookup
API経由のデータ取得と整形
API用に作成したURLからrequestsを使ってxmlデータを取得し、BeautifulSoupで扱えるように変換しています。
res = requests.get(url)
soup = BeautifulSoup(res.text,'lxml')
パーサで変換した後は必要なレスポンス要素を1つずつ取得して変数に代入しています。
取得できるデータの一覧
設定次第ではAPI経由でかなりたくさんのデータが取得できます。下記の表では今回Amazonへのアフィリエイトリンクを作成するために必要となったデータを取得するためのレスポンス要素を一覧にしています。
レスポンス要素 | 説明 |
---|---|
productgroup | 商品が足している商品カテゴリー ex:Book、eBoos |
detailpageurl | 商品の詳細ページのURL |
largeimage | 大きなサイズの画像に関する情報 |
title | 商品のタイトル、または、名前 |
formattedprice | 表示用に書式設定された価格 ex:¥1,200 |
amount | 書式設定されていない数字だけの価格 ex:1200 |
publisher | 出版社名 |
author | 著者や商品のメーカー |
これ以外にも数多くの項目を取得することができます。詳しくは公式サイトの方ご確認ください。
- 公式サイト:
Product AdvertisingAPI
今日のdot
今回は「Product Advertising API」を使ってAmazon内の個別商品の詳細情報を取得する方法解説しました。こちらのコードをベースにさまざまにカスタムすることでより便利に活用することができます。
このページのコードをもとにアマゾンのアフィリエイトリンクの一括作成ツールを作りました。自分で作るのがめんどくさい方や私が作っているツールで特に問題がない方はそちらのツールをお使いください。
【フリーランス向けの完全無料Pythonプログラミング講座】
dot blogではこの記事以外にも完全無料でフリーランス向けのPythonプログラミング講座を公開中です。フリーランスとして活躍し稼ぐための強力な武器となりますよ。
Python入門講座【無料のプログラミング学習講座】
最近特に注目度が高くなってきているプログラミング言語Python。転職、フリーランス、独立・起業を検討中、日々の業務が忙しい社会人等は今こそ身に付けておきたいスキルの1つ。初心者向けにやさしいプログラミング学習内容のPython入門講座を無料で公開。