0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Amazon SP-API をpythonで動かしてみた【実コードあり】(part1 auth : 準備編からaccess_token取得まで)

Posted at

この記事は、2022年8月18日に企業ブログで掲載したものの転記となります。

■□■ はじめに ■□■

みなさーん Amazon さんにお世話になっていますか ??
私はAmazonさんにもAWSさんにも日頃からお世話になりまくりですw

今回はAmazonが公式で提供しているSP-APIというものあり実際に使った際にちょっと難しかった点や
ハマった点等を記事で残そうとおもいます。

SP-APIとは、公式の説明(日本語翻訳)

販売パートナーAPI(SP-API)はRESTベースのAPIであり、Amazonの販売パートナーが注文、出荷、支払いなどのデータにプログラムでア> クセスできるようにします。SP-APIを使用するアプリケーションは、販売効率を高め、必要な労力を削減し、顧客への応答時間を改善して、> 販売パートナーがビジネスを成長させるのに役立ちます。

要は主に出品者の方が使うんですが、プログラムで商品情報だったり、売上データだったりをとってこれるっていうことですね。
実際使ってみるとドキュメント全部英語だったり、ハマりどころが結構おおかったので記事にしてみました。

Amazon Sp-API 公式概要ページ
Amazon Sp-API ドキュメント top

■□■ SP-APIを使うにあたり前提 ■□■

  1. 出品者sellerセントラルのアカウントはすでにあるものとします。
  2. sellerセントラルのアカウント上でreflesh_tokenは作成されたものとします。
  3. AWSアカウントはすでに保持している状態とします。

■□■ とりあえずコード化するまえに手で ■□■

Postmanというツールがるので使ってみましょう。
無料だし、初めての方は直感的で一番わかりやすいと思います。

まず開くとこんな画面がでます。さぁ、ここから冒険が始まります。

スクリーンショット 2022-07-01 10.34.29.png

一番はじめはrefresh_tokenからaccess_tokenを作成するんですが、
ここで初期準備を始めましょう!

そしてまずここで躓きます。
ドキュメントをみて、、、おい・・・
access_tokenってどうやってつくるんだよ・・・

ってなんと。。。ドキュメントのAuthorization APIではなくて、auth APIを使いますw
authの方はドキュメント上に記載がなくて、ユーザガイドにしれっと記載があるんですね・・・

まずは必要な情報です。★★★がついているのは出品者情報なのでこれは取得している前提です
リフレッシュトークンを取得するにはAWSのIAMユーザーが必要になります。なのでIAMユーザーもある前提です。
※IAMユーザーの権限は次回パートにて記載しています。

method : POST
url : https://api.amazon.com/auth/o2/token
grant_type : "refresh_token" (固定)
refresh_token : ★ デベロッパーセントラルで生成したリフレッシュトークン
client_id : ★ クライアントID(デベロッパーセントラル > LWA認証情報)
client_secret : ★ クライアント機密情報(デベロッパーセントラル > LWA認証情報)

成功するとこんな感じになります。

スクリーンショット 2022-07-01 10.47.41.png

失敗するとこんなエラーが返って来たりします。(これはrefresh_tokenを間違えたときのエラーです。)

{
    "error_description": "The request has an invalid grant parameter : refresh_token. User may have revoked or didn't grant the permission.",
    "error": "invalid_grant"
}

Postmanつかっててすごいなぁと思ったのは、画面はじに
</>Code snippet っていうのがあってこれを押すと
下のような感じで実際のコードが取得できるんですよね。
これだいぶ参考になりました。

スクリーンショット 2022-07-01 11.05.36.png

■□■ コード化するとこんな感じになります ■□■

ここまでをpythonコードにするとこんな感じになります。
関数の一部抜粋なのでカスタマイズしてください。

import json
import urllib
import requests

def xxx () -> dict :

        # ApiCallに必要な情報を宣言
        url = 'https://api.amazon.com/auth/o2/token'

        headers = {
            'Content-Type': 'application/x-www-form-urlencoded'
        }

        # keyの並び順とかでエラーになったりするので順番はこの順番のままがよいです
        payload = {
            'grant_type': 'refresh_token',
            'refresh_token': '★ここは自分の値をいれてね',
            'client_id': '★ここは自分の値をいれてね',
            'client_secret': '★ここは自分の値をいれてね'
        }

        # payloadは url形式指定なので変換する
        # grant_type=refeash&refresh_token=xxxx&....
        str = urllib.parse.urlencode(payload)

        # 実際にリクエストを飛ばします
        response = requests.post(url, headers=headers, data=str)
        response.raise_for_status()

        # response.txtは文字列でかえってくるので辞書型に変換する
        token_info_dict = json.loads(response.text)

        # 実際の返却はこんな感じ
        # token_info_dict
        # { "access_token": "Atza|IwExxx"
        #   "refresh_token": "Atzr|IwEBIxxxxx",
        #   "token_type": "bearer",
        #   "expires_in": 3600}

		return token_info_dict

さてここまできてaccess_tokenを取得できるとあとはいろんな処理を動かすだけになります。
(まあそれも大変なんですが、、、)

次からはorder,report,feedといったところを触って行きたいと思います
ここからは結構試行錯誤してやったのでぜひ見ていただければと思います。

ではよいAmazon SP-APIライフを

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?