2018/12/05

PythonでAmazonのAPIを叩いてみた

どうも。

Python(3.6.5)でAmazon Product Advertising APIを使用するサンプルコードを書いてみました。 自分でコードを書かなくてもGitHubには便利なpython-amazon-simple-product-apiというものがあるので本格的にAPIを叩きたいなら そちらをお勧めします。

今回はPythonの勉強がてら自分でコードを書いてみました。

目次

  • Amazonアソシエイトのアカウントをもっていること
  • アクセスキー、シークレットキーを発行していること

以下のAmazonアソシエイトのページにはPHPとJavaとROR(Ruby On Rails)が載っているのでそれを参考にしました。

# -*- coding: utf-8 -*-
import time
from datetime import datetime
from urllib.parse import quote
import hmac
import hashlib
import base64
import urllib.request

def main():
    
    # アクセスキーID
    access_key_id = "【アクセスキーID】"
    
    # シークレットキー
    secret_key = "【シークレットキー】"
    
    # アソシエイトタグ
    associate_tag = "【アソシエイトタグ】"

    # UTC(協定世界時)のタイムスタンプ(ISO形式)
    utc = datetime.utcfromtimestamp(time.time()).isoformat(timespec='milliseconds') + "Z"

    params = {
        "AWSAccessKeyId": access_key_id,
        "AssociateTag": associate_tag,
        "BrowseNodeId": "492352", # "プログラミング"カテゴリの売れ筋ランキング
        "Operation": "BrowseNodeLookup",
        "ResponseGroup": "TopSellers",
        "Service": "AWSECommerceService",
        "Timestamp": utc
    }    
    
    # パラメータをキーで昇順にソートする
    query_string = "&".join([quote(k) + "=" + quote(v) for k, v in sorted(params.items())])
    
    # リージョン
    endpoint = "webservices.amazon.co.jp"
    
    uri = "/onca/xml"
    
    # クエリ文字列を生成する
    string_to_sign = "GET\n{e}\n{u}\n{qs}".format(e=endpoint, u=uri, qs=query_string)
    
    # APIに必要な signature を生成する
    signature = base64.b64encode(hmac.new(secret_key.encode('utf-8'), string_to_sign.encode('utf-8'), hashlib.sha256).digest())
    
    # URLを生成する
    request_url = "https://{e}{u}?{qs}&Signature={s}".format(e=endpoint, u=uri, qs=query_string, s=quote(signature))

    with urllib.request.urlopen(request_url) as response:
        html = response.read().decode('utf-8')
    
    print(html)

if __name__ == '__main__':
    main()

結果はXMLで返ってくるよ

[広告]

独学プログラマー Python言語の基本から仕事のやり方まで

関連記事

スポンサーリンク

スポンサーリンク

スポンサーリンク

コメント

非公開コメント