Amazon画像リンクの廃止

マイケル
みなさんこんにちは!
マイケルです!

エレキベア
こんにちクマ〜〜〜

マイケル
このブログは続けて数年になりますが、ある日Amazonから下記のようなメールが届きました。


マイケル
どうやらアフィリエイトで使用しているAmazonアソシエイトの画像リンクが廃止になってしまうようです。
リンク作成機能だけならまだしも、2024年からこれまでの画像リンクすら表示されなくなってしまうとのことです。

エレキベア
ええぇ・・・それは大変クマ・・・

マイケル
既に200記事近くAmazonの画像リンクを使ってきたので、それが全て表示されなくなるとなるとかなり痛手です・・・。

マイケル
しかし、Amazon Product Advertising API(以下、PA-API)を使えば引き続き商品情報を取得できるとのことなので、今回はこちらのAPIを使って古い画像リンクを復活させてみようかと思います。
Amazon Product Advertising API(商品情報API)

エレキベア
今後は自分でAPI経由で取得しろということクマか・・・
やったるクマ〜〜〜

マイケル
ちなみに今回作ったAmazonリンク変換ツールについては下記GitHubに公開しているので、同じように変換させたい方はこちらをご参照ください!
GitHub - nodejs-amazon-link-parser

エレキベア
Node.jsで実行できるツールを作ったのクマね
PA-APIでの商品情報取得

マイケル
今回はNode.js、TypeScriptで開発を進めます。
まずはPA-APIで商品情報を取得して新しいHTML形式で出力する処理を実装してみます。
商品情報を取得する

マイケル
APIの実行には用意されている paapi5-nodejs-sdk を使用するため、
下記コマンドでインストールします。

マイケル
そしてAPI実行で取得する項目について型を定義します。
項目の詳細については下記ドキュメントをご参照ください。
▲取得する商品情報の型定義

エレキベア
取得したいAPIに対応するレスポンスを定義するクマね

マイケル
そして下記のような形でAPIを実行します。
今回は商品のASINを受け取って、
'ItemInfo.Title',
'Images.Primary.Large',
'Offers.Listings.Price'
を実行する形で実装しました。
▲PA-APIによる商品情報取得

エレキベア
この処理を呼び出せば商品情報が取得できるのクマね
商品情報からHTMLを作成する

マイケル
次に、取得した商品情報から新しいHTML形式を作成する処理を作成します。
こちらは各々カスタマイズしたい形式に変換して問題ないですが、今回は下記のような形で定義しました。
▲出力するHTMLテンプレート

エレキベア
最終的にここで定義したHTMLに変換できればいいということクマね

マイケル
先ほど定義したAPIを使用して、受け取ったASINから商品情報を取得しHTMLに変換する処理を実装します。
▲商品アイテムHTMLの出力
▲メイン処理

マイケル
ここまででASINから新しい形式の商品アイテムHTMLを出力する処理が実装できました。
下記のように実行するとコンソールにHTMLが出力されます。
▲実行するとHTMLが出力される

▲出力されたAmazon商品のHTML例

エレキベア
(なんでチキンラーメン・・・)
これでAmazon画像リンク作成の代わりに生成できるようになったクマね
古い画像リンクの一括置換処理

マイケル
次に、廃止されて無効になってしまった画像リンクを一括置換で復活させる処理を実装してみます。
前提になりますが、これまでAmazonの画像リンク、商品アイテムリンクは下記のように定義されていました。

エレキベア
このimgタグのsrcとiframeが機能しなくなったクマね

マイケル
当ブログでは、古い記事はHTML形式のテキストファイルで管理しています。
テキストからHTMLを読み込んで操作するため、今回は cheerio というjQueryライクに操作、変換できるライブラリを使用しました。

マイケル
そして下記のようにテキストを読み込んで、
1. 各タグのプロパティからASINを取得
2. ASINから商品情報を取得
3. 商品情報から新しい形式のHTMLに変換して要素を置換
といった手順で置換を行います。
▲古いAmazonリンクの一括置換

マイケル
あとはこの処理を変換したい記事テキストファイル全てに行えば完了です!
▲メイン処理
▲正常に変換された

エレキベア
おお〜〜〜これでまた画像リンクが機能するようになったクマ

マイケル
注意点として、ファイルごとにAPIを実行することになりますが、
実行間隔を短くしすぎるとエラーになってしまう場合があったため、実行ごとに一定秒待ち時間を設けた方がよさそうです。

エレキベア
むやみに一括で変換しようとすると危ないクマね
画像リンクの商品情報更新処理

マイケル
以上で画像リンクを復活させることができましたが、商品の情報は埋め込み文字列になっているためリアルタイムに更新されません。
そのため手動で最新の情報に更新してあげる必要があります。

エレキベア
なるほどクマ
商品が価格が前の状態のままになってしまう事態も起こりそうクマね

マイケル
新しい形式のHTMLを一括で更新する処理は下記のように実装しました。
テキストを上から一行ずつチェックしていき、ASINが設定されているタグに対して再商品情報を取得、HTMLを再生成するようにしています。
▲HTMLの商品情報更新処理

エレキベア
これで完璧クマ〜〜〜
おわりに

マイケル
というわけで今回は廃止されたAmazon画像リンクを新しい形式に置換してみました!
どうだったかな??

エレキベア
独自形式だとCSSスタイルも自由に書けるからデザインの統一感は生まれそうクマね
でもわざわざAPI実行して取得となるとエンジニア以外は中々厳しそうクマ

マイケル
同じように画像リンクを多用していた人もいると思うから、中々な事態だよね・・・
似たような状態の方がいれば、今回の記事をぜひ参考にしてください!

マイケル
それでは今日はこの辺で!
アデューーー!!

エレキベア
クマ〜〜〜〜〜
【Node.js】廃止されたAmazonアソシエイト画像リンクをAmazon Product Advertising API経由で復活させる 〜完〜