AmazonJSプラグインがAPIエラーで使えなくなった

数週間前のことである。僕のブログに貼ってあるAmazonへの商品リンクが、すべての記事で表示されなくなってしまった。AmazonJSというプラグインを使っているのだが、くるくるが回ったままになってしまう。

調べてみると、Amazonアソシエイトでは、30日以内に売り上げが発生していない場合、PA-APIが利用できなくなる、という規約変更がさり気なく行われていたことがわかった。PA-API (Product Advertising API) というのは、ASINを渡すことによって、商品タイトルや値段、画像のURLなどを返してくれるサービスである。

もちろん、PA-APIを使わずともAmazonアソシエイトのリンクを貼ることは可能であるが、その莫大な手間を考えればAmazonJSやRinkerなどのプラグインを使わずに商品リンクを貼ることは現実的とは言えない。

おかげさまで先日売り上げが発生したため、AmazonJSはまた正常に動くようになった。だが、また30日間売り上げが発生しないことがあれば、同じようにエラーになってしまうということだ。これはマズい。ということで、今回は、回復するまでの間に僕が行った緊急の対策を紹介しようと思う。

AmazonJSの場合は、amazonjs asin="xxx"というショートコードを設置することになるわけだが、ひとまずプラグインを停止してしまおう。

続いて、functions.phpにオリジナルのショートコードを設定する。ちなみに、AmazonJSのプラグインを停止せずに以下を設定すると、あまり喜ばしくないことが起こるだろう。

// functions.php
function amazonLink($atts) {
    $atts = shortcode_atts(array(
        'asin' => '',
        'title1' => '関連商品',
    ), $atts);
    return '<div class="amazonjs_item"><a target="_blank" href="https://www.amazon.co.jp/dp/'.$atts['asin'].'/?tag=トラッキングID/">Amazonで検索: <span class="title1">'.$atts['title1'].'</span></a></div>';
}
add_shortcode('amazonjs', 'amazonLink');

記事内のショートコードのパラメーターとして、asinだけでなくtitle1を設定する。title1が存在しない場合は「Amazonで検索: 関連商品」と表示されるようになっている。AmazonJSで使っていた"title"をそのまま使いたければ、"title1"にする必要はない。その辺は適宜。

ひとまず、超突貫工事ではあるが、これでなんとか商品ページへのリンクを貼り続けることができた。AmazonのURLの簡易的なフォーマットは次のとおりである。
www.amazon.co.jp/dp/[ASIN]/?tag=[トラッキングID]/

以後余談である。今回のことで、AmazonJSからRinkerへの乗り換えを検討することになった。というのも、Rinkerにはキャッシュ機能がついているため、APIが切れてもなんとか使えるとのことだ。それだけでも乗り換える価値がありそうだ。使い方はAmazonJSとは大きく異なり、カスタム投稿タイプみたいな感じて商品リンクをWordPress上で一元管理しておき、ショートコードにはそのpost_idを入れるという仕様である。post_idは複数の記事で使いまわすこともできるし、アフィリエイトしまくりな人には確かに便利かもしれない。しかも、Amazonだけでなく、楽天やYahoo!の検索画面へのリンクも自動生成してくれる。

しかし一方で、ちょっとしたものをサクッと紹介したいようなときでさえも、管理画面で商品リンクを新規作成しなければならず、ショートコードにASINを入れるだけのAmazonJSと比べると、これが結構手間なのだ。いくつかの記事で試してみたのだが、やっぱり億劫である。以下Rinkerを使った商品リンクの見本(画像)である。

まあまあいい感じに見えるが、Rinkerへのクレジットが入っていることや、Yahoo!ショッピングの表記が間違っていること(!が存在しない)、ボタンの色が主張しすぎていることなどが嬉しくなく、すぐに使用をやめてしまった。クレジットを消したり、その他カスタマイズするためには、プラグインの制作者に寄付をしなければならないそうだ。まあ、ソースコードをいじればどのようにもカスタマイズできそうだが、そこはルールに従っておくべきだろう。

それで、結局のところ、AmazonJSを使い続けることにした。自分でカスタマイズしてあるだけあって、無駄のないデザインである。以下は若干カスタマイズしたAmazonJSの見本だ。

気づいた方もいるかもしれないが、右下のAmazonロゴは画像ではなく、Font Awesomeを使っている。実にいい感じだ。

div.amazonjs_item::after {
    font-family: "Font Awesome 5 Brands";
    content: "\f270";
    position: absolute;
    bottom: 1px;
    right: 4px;
    font-size: 24px;
    color: #ddd;
}

それから、楽天へのリンクもないよりはあった方がいいと思い、これまた突貫工事で作ってみた。rakuten2 keyword="xxx" title="xxx"というショートコードによって、以下のように表示させることができた。URLは楽天アフィリエイトのウェブサイトからでコピペしなければならないと思っていたのだが、そんな必要は全くなかった。楽天アフィリでの検索画面へのURLは意外とシンプルで、以下のような形式のURLを生成して、UTF-8でエンコードすればいいらしい。

//楽天リンク ver.2
function rakutenLink2($atts) {
    $atts = shortcode_atts(array(
        'keyword' => '',
        'title' => $atts['keyword'],
    ), $atts);
    $url = 'https://hb.afl.rakuten.co.jp/hgc/楽天アフィリエイトID/?pc=https://search.rakuten.co.jp/search/mall/'.$atts['keyword'].'/&m=https://search.rakuten.co.jp/search/mall/'.$atts['keyword'].'/';
    $encoded_url = mb_convert_encoding($url, "utf-8");
    return '<div class="rakuten_item"><a target="_blank" href="'.$encoded_url.'">楽天で検索: <span class="title">'.$atts['title'].'</span></a></div>';
}
add_shortcode('rakuten2', 'rakutenLink2');

上のコードを読んでいただければわかると思うが、titleは省略可能であり、省略した場合はkeywordの文字列がそのまま表示されるようにしてある。つまり、上のサンプルの場合、「rakuten2 keyword="梶井基次郎 檸檬"」と記述するだけでOKなのである。

そうは言っても、楽天へのリンクは本当に必要性があるときだけ設置すればいいと僕は思う。アフィリ界隈では、Amazon、楽天、Yahoo!へのリンクが必須だと言われているが、そんなの関係ない。おれは筋金入りのAmazon派だ。

ということで、今回はAmazonのPA-APIが切れてしまったことで、Amazonへのリンクについて考察した話でした。参考にしていただければ幸いです。

これまた余談ですが、僕のポリシーとしては、自分のブログをアフィリエイトでギラギラな感じにしたくない。もちろん、僕が本当にお勧めする上質な商品については、ちゃんと紹介したいし、するべきだと思う。一方で、昨今ネットを検索すれば、あまりにも適当なまとめ記事やランキング記事ばかりが出てきて、どの記事も似たり寄ったりだ。そのようなアフィリ目的のクソページのせいで、本当に知りたい情報がかえって検索しにくくなったとさえ思うこの頃である。

それではいけないと、僕は思う。YouTuberが動画で語るように、ブロガーはテキストで語らなければならない。文章よりもリンクの方が主張しているような記事は、絶対に書きたくない。余談は以上です。読んでいただきありがとうございました。

買い物しようよ!

コメントを書き込む

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

コメント

おや、コメントがまだありません。