【追記有】【2023年12月】Amazonアソシエイトの画像リンクが使えなくなりました【対策】

2023年11月30日、Amazonアソシエイトプログラムからメールが届きました。
(以下、メール本文から一部抜粋)

2023年11月30日(木)をもってアソシエイトツールバーの「画像リンク」及び「テキストと画像」リンクを廃止させていただきます。
画像リンク作成機能を使用して作成されたリンクは、2023年12月31日(日)以降表示されなくなりますので、画像リンクを掲載されている場合は、お早めに別のリンクへの差し替えのご対応をお願いいたします。

・・・・!?😱

画像リンクって…あの画像リンク!?
アソシエイト目的だけじゃなく、商品紹介する時にものすごく重宝していたのに… (Amazonは商品数が多いので、検索→貼り付けまでが簡単で助かっていた)

しかもわざわざサイト向けに表示デザインをカスタマイズしてて、「これできれいに表示できるようになった~✨」と満足していたばかりだったのに…これは残念すぎる…😭

くよくよしていても仕方がないので、表示されなくなる前に対応しておこう!ということで色々調べてみました。

商品紹介リンク作成サイト

今まで手動でリンクを作成してきましたが、商品紹介のリンクを作成するサービスもあるんですよね。

カエレバ、もしもアフィリエイトのかんたんリンク、Rinkerなどが有名でしょうか。

「これを機に使ってみようかな?」とも考えたのですが、どのような仕組みで生成されているのかよく分からなかったので今回は見送りました。

ひょっとしたら1月になった時点で使えなくなったりしそうなので…

Amazon Product Advertising API

Amazonからのメールには後半にこのような記載がありました。

今後も商品画像の利用をご希望の場合は、Amazon Product Advertising API(商品情報API)*から画像のリンクを取得することができます。

『Amazon Product Advertising API』についてはよく分からなかったのですが…

こちらのサイト様で詳しく解説が載っていたので、参考にさせていただきました。

コード作成まではすぐにできたのですが、生成されたPHPのコードを……どうすればいいのかが分からず😅

※ちなみにASINを設定して1商品だけ表示するタイプのものを選びました。

PHPのコードをサイトに組み込む

何とかPHPのコードを解析しようと、ChatGPTに尋ねたり、こちら↓のサイト様を参考にしたりしてみました。

試行錯誤した結果、このような形で実装することにしました。

  1. 「awsv4.php※」を <head> 付近で読み込み
    (※class AwsV4を定義しているファイル)
  2. 本文中でASINの値を定義し、「pa-api.php※」を読み込み
    (※商品情報を収集しているファイル)
  3. 最後に商品表示ボックス用のHTMLを書き出す
    (専用phpファイルから読み込み)

ここからは当サイトでの実装方法を書いていきますが、真似される方は自己責任でお願いします! 間違っている部分もあると思うので各所要確認で!🙇‍♀️

awsv4.php

「awsv4.php」には『class AwsV4』から始まるコードをまとめています。classというのは初めて見たのですが、下記サイト様を読んで何となく理解しました。本当に何となくですけどね😅

「awsv4.php」だけファイルを分けたのは、この部分を同じページ内で2回以上読み込むとエラーが出てしまった為です。同じAwsV4を定義しているからエラーになる…ということかな?

一度「AwsV4を定義していない時だけclassを定義する」という関数を試してみたのですがうまくいかなかったので… 無難にファイルを分けることにしました。

pa-api.php

「pa-api.php」は商品情報を収集している部分のコードです。コード内にASINの情報も入っていたのですが、ASINの値だけ本文中で定義しそれ以外を pa-api.php にまとめることで他のページでも使い回せるようにしました。

$payload = "{"
. " \"ItemIds\": ["
. "  \"$afbox_amazon_asin\""  //ASINの定義は本文で行う
. " ],"
. " \"Resources\": ["
. "  \"Images.Primary.Medium\","  //画像サイズ_160px
. "  \"ItemInfo.ByLineInfo\","  //ブランド
. "  \"ItemInfo.ProductInfo\","  //発売日
. "  \"ItemInfo.Title\""  //商品名
. " ],"
. " \"PartnerTag\": \"アソシエイトタグ\","
. " \"PartnerType\": \"Associates\","
. " \"Marketplace\": \"www.amazon.co.jp\""
. "}";

この部分↑で取得するデータを決めてるんだと思います。全部取得すると重くなりそうだったので、必要最低限に絞ってみました。

「pa-api.php」の後半には情報収集後に出力されたJSONデータを連想配列に変換し、更に発売日のデータから年月日だけを抜き出す処理を足しています。(元データには時間まで含まれていた為)

// JSONデータを連想配列に変換
$result = json_decode($response, true);
// 商品情報が取得できたか確認
if (isset($result['ItemsResult']['Items'][0])) {
  $item = $result['ItemsResult']['Items'][0];

  // DisplayValueから年、月、日を抜き出す
  $dateString = $item['ItemInfo']['ProductInfo']['ReleaseDate']['DisplayValue'];
  list($year, $month, $day) = sscanf($dateString, "%d-%d-%dT");
}

商品表示ボックス用のHTML

「商品表示ボックス用のHTML」も専用のphpファイルに入れて繰り返し利用できるようにしています。

pa-api.php の後半で商品情報を $item に入れているので、そこから取り出して各変数に入れ、HTMLの要素の中に入れていってます。

完成!

最終的にこんな感じになります。
【追記 2024/2/11】APIが使えなくなってしまったので、表示方法を変更したものを載せています💦
※↓最近読んだおすすめの漫画です✨

これで合ってるかは分からないのですが、とりあえず動いてるので…よし! …Amazonに負荷がかかる形になっていないと良いのですが…その辺がちょっと不安です。

最後に

APIを使ってデータ取得→商品情報表示にチャレンジしましたが、今回もほぼChatGPTにコードを書いてもらいました。少しずつですが、PHPの扱いも慣れてきた気がします。

今まで貼っていたリンクを修正するのは大変でしたが、何だかんだ以前より便利になった(ASINコードを貼るだけでデータ取得してくれるようになった)ので、結果オーライです。

あとは、2024年1月以降も無事表示されていればいいですね…ドキドキ…

APIは30日以内の売上がないと利用できなくなるみたいなので、その場合に代わりのリンクが表示されるようにしないといけないのですが… まだその対応はできていないので、これから調べておこうと思います。

追記 (2024/2/11)

Amazonアソシエイトのレポートを見ていたら恐れていたことが…
遂に30日売上がない状態になってしまいました😭

「APIが使えなくなるとどうなるのかな…?」と疑問だったのですが、どうやらPHPの読み込みができなくなるようで、つまり設置しているコード以降のページが読み込まれなくなり表示されない事態に…これはまずい…

とりあえず『A8ネットの楽天リンク』を利用したコードに修正しました。できればAPIを利用していきたかったのですが…私のサイトは趣味運営なので更新頻度も低く、売上を維持するのは難しいと判断しました…

楽天リンクも店舗での扱いがなくなると画像が表示されなくなったりするので、定期的な確認が必要になります。今は良い方法が思いつかないので、記事に貼った商品リンクを1ページにまとめて貼り付けて時々表示を確認する…という形にしようと思います。

もっとスマートな方法を思いついたら記事を書こうかな😅

関連記事
新着記事
ブログ内検索