🌐

Amazon Advertising APIを叩くまで by JS

5 min read

はじめに

業務にてAmazonのadvertising-apiを調べていたのですが、まだまだ日本語記事が出回っておらず、公式の英語ドキュメントのみでした。
私自身苦労したので、ここで一部公式を抜粋しながら認証を通して、実際にAPIを叩くところまで紹介していきます!!

なお今回は、jsを使い、ウェブブラウザからサードパーティとして、認証情報を取得してAPIを叩きます

Advertising APIって?

The Amazon Advertising API lets you programmatically manage your advertising operations.

いわゆる広告操作をプログラムで管理できるということですね!
以下公式ドキュメント
https://advertising.amazon.com/API/docs/en-us/what-is/amazon-advertising-api

APIの種類
  • sponsored brand -> 商品検索結果の上部に掲載される広告
  • sponsored display -> 設定したターゲティングに基づきさまざまな場所に表示される広告
  • sponsored product -> 設定したキーワードが検索されると表示される広告
  • Amazon DSP -> Amazon以外の外部広告

今回は、APIを叩くまでが目標なので詳細は、省かせていただきます。
Amazon広告ついて詳しく知りたい方は、以下の記事からどうぞ!!
【Amazon 広告のキホン!】メリットや種類・仕組みを徹底解説!

セキュリティプロファイルの作成

https://developer.amazon.com/loginwithamazon/console/site/lwa/overview.html

  1. 上記のリンクからセキュリティプロファイルを作成
  2. 作成した、プロファイルの設定ボタンからウェブ設定を選択し、編集をクリック
  3. その後、許可されたオリジンと許可された返信URLに任意のURLを登録
    今回は、テストケースになるので、どちらともhttp://localhost:3000で登録します。
    なおこのURLは、複数登録が可能です!
  4. クライアントIDとクライアントシークレットをコピー(後程使用)

セキュリティプロファイルの作成方法詳細は、以下のリンクから
https://developer.amazon.com/ja/docs/login-with-amazon/register-web.html

実装

  1. login with amazonボタンをユーザーがクリック後、同意フォームにリダイレクト
    (ユーザーが認証を許可後、YOUR_RETURN_URLにリダイレクトされる。この時、paramsにはcodeが含まれる)
  2. paramscodeを使い、access_tokenrefresh_tokenを取得
  3. access_tokenを使い、ユーザーのprofileを取得
  4. access_tokenprofileIdを使い、apiを叩く

この流れで、認証を打破していきます!

login with amazonボタンをサイト内に設置
クリック後、以下のURL(同意フォーム)にリダイレクトさせます
https://www.amazon.com/ap/oa?client_id=YOUR_LWA_CLIENT_ID&scope=advertising::campaign_management&response_type=code&redirect_uri=YOUR_RETURN_URL

ユーザーが認証を許可すると以下の状態でYOUR_RETURN_URLにリダイレクトされます。
http://localhost:3000?code=xxxxxxxxxxxxxxxxxxx&scope=cpc_advertising%3Acampaign_management

paramsの中にaccess_tokenと交換できるcodeが含まれているため、以下のようにaccess_tokenを取得します。

curl  \
    -X POST \
    -H "Content-Type:application/x-www-form-urlencoded;charset=UTF-8" \
    --data "grant_type=authorization_code&code=AUTH_CODE&redirect_uri=YOUR_RETURN_URL&client_id=YOUR_CLIENT_ID&client_secret=YOUR_SECRET_KEY" \
    https://api.amazon.co.jp/auth/o2/token
// nodejs
const exchangeAccessToken = async (code) => {
 const response = await fetch("https://api.amazon.co.jp/auth/o2/token", {
   method: 'post',
   headers: {
     "Content-Type": "application/json;charset=UTF-8"
   },
   body: JSON.stringify({
     grant_type: 'authorization_code',
     code: YOUR_AUTH_CODE,
     redirect_uri: 'http://localhost:3000',
     client_id: YOUR_CLIENT_ID,
     client_secret: YOUR_CLIENT_SECRET,
   })
 }).then(res => res.json()).catch((err) => false)
 return response
}

そのaccess_tokenを使って以下のようにprofileを取得

  curl \
    -X GET \
    -H "Content-Type:application/json" \
    -H "Authorization: Bearer YOUR\_ACCESS\_TOKEN" \
    -H "Amazon-Advertising-API-ClientId: YOUR_CLIENT_ID" \
    https://advertising-api-fe.amazon.com/v2/profiles
// nodejs
const getProfile = async(access_token) => {
  const response = await fetch('https://advertising-api-fe.amazon.com/v2/profiles', {
    method: 'get',
    headers: {
      "Content-Type": "application/json",
      "Authorization": "Bearer " + YOUR_ACCESS_TOKEN,
      "Amazon-Advertising-API-ClientId": YOUR_CLIENT_ID
    }
  }).then(res => res.json()).catch(error => false)
  return response
)}

access_tokenは、1時間のみ有効
refresh_tokenは、対象ユーザーに対して期間関係なく使えるもので、以下のようにaccess_tokenを交換することができます

curl \               
    -X POST \
    -H "Content-Type:application/x-www-form-urlencoded;charset=UTF-8" \
    --data "grant_type=refresh_token&client_id=YOUR_CLIENT_ID&refresh_token=YOUR_REFRESH_TOKEN&client_secret=YOUR_CLIENT_SECRET" \
    https://api.amazon.com/auth/o2/token

profileIdaccess_tokenを取得できたら、以下のようにすることでAPIが叩けます

  curl \
    -X GET \
    -H "Content-Type:application/json" \
    -H "Authorization: Bearer YOUR\_ACCESS\_TOKEN" \
    -H "Amazon-Advertising-API-ClientId: YOUR_CLIENT_ID" \
    -H "Amazon-Advertising-API-Scope": YOUR_PROFILE_ID
    https://advertising-api-fe.amazon.com/v2/sp/campaigns
const getSpCampaigns = async() => {
  const response = await fetch('https://advertising-api-fe.amazon.com/v2/sp/campaigns', {
    method: 'get',
    headers: {
      "Content-Type": "application/json",
      "Authorization": "Bearer " + YOUR_ACCESS_TOKEN,
      "Amazon-Advertising-API-ClientId": YOUR_CLIENT_ID,
      "Amazon-Advertising-API-Scope": YOUR_PROFILE_ID
    }
  }).then(res => res.json()).catch(error => false)
  return response
}

終わりに

実際にAPIを叩くまで長いですよね。
私自身まだ駆け出しなので、苦労しましたが、ドキュメントを早く理解して、すぐ実装できるようになりたいです!切実に、、、
https://advertising.amazon.com/API/docs/en-us/what-is/amazon-advertising-api

Discussion

ログインするとコメントできます