【KUSANAGI】WordPressプラグインAmazonJSが正しく動作しない原因

これはかな〜〜〜りハマりました。

このブログでもレビューを書いた記事には、対象書籍のAmazonリンクを貼っているのですが、普通のAmazonアフィリエイトのリンクはデザイン自体が古臭いのでなんだかなと思っていました。

そのためAmazonリンクをある程度デザインした状態のコードを出してくれるサービス「ヨメレバ」を利用していましたが、Wordpressの事なので誰かしらプラグインを作ってくれているだろうと検索すると案の定、結構人気でWordpressでAmazonアフィリエイトをやるなら定番的なプラグイン「AmazonJS」が見つかりました。

AmazonJSの導入要点のみ

AmazonJSの導入記事などでは、Wordpress管理画面のプラグインから検索してインストールの手順になっていますが、現在は検索に出てきません。

なのでWordpress公式のプラグインページからソースをダウンロード

Amazon JS — WordPress プラグイン

後は解凍したAmazonJSをpluginsディレクトリに保存してサーバにアップロードすればWordpress管理画面のプラグインに表示されますので、有効化して設定。

詳細な設定方法は省きますが、Amazonアフィリエイトのアカウントと、Amazon Product Advertising APIアカウントが必要になります。

AmazonJSプラグインがうまく機能しない

設定も完了したので、いざリンクを作ろうと商品検索を行ったのですが検索結果が下記のようにRank項目しか表示されていない!

ですがAmazonJSを使うのが初めてなので「よしよし動いた動いた」と思い商品を選択。

テンプレートはデフォルト設定が選択されているのにプレビューには何も表示されていない。

おかしいなと思い「少ない情報」や「画像(小)」、「画像(中)」に切り替えると、何とか画像のみ表示されました。

これはいよいよおかしいと他の方の記事のスクショなどを確認するとやはりプレビューにはしっかりと情報が表示されたリングが表示されています。

また商品検索結果の表示からすでに情報量が違います。

AmazonJSの説明には「WordPress 3.3 以上が必要」とあり、現在使っているWordpressのバージョンは4.8と余裕です。

さてはプラグインの開発が止まってて、最近のWordpressのバージョンでは互換性がなくて使えないのかと思い検索しても、それらしい記事は出てきません。

何個かAmazonJSが上手く動作しない時の対処法という記事は見つかりますが、内容は商品検索の国を「日本」か確認しろ的なもの。

デフォルトで日本になっているので話になりません。

一応これでもエンジニアなのでこうゆう場合はすぐにChromeのデベロッパーツールでJSの挙動を確認します。

すると下記のようなエラーが

replaceが定義されてない?

ナンノコッチャと引き続き調べます。

簡単に述べるとreplace対象のテキストが取得されていないのに、そのオブジェクトからreplace関数を使おうとすると出るエラーっぽい。

今度はAmazonJSのコードを解析し下記コードが怪しい。

結果AmazonJSの表示内容と上記コードがエラーになっていることから、商品画像以外のデータ(商品名、料金、その他)が取得されていないためエラーになり、プレビューには画像以外表示されないようだ。

取り敢えずAmazonJSの説明を熟読すると気になる記載がありました。

In first, AmazonJS converts tag from amazonjs short code in server side. Second, in window.load, amazonjs.js (it is added by plugin) will replace tag with formatted html to display Amazon Product by using jQuery template.

Google翻訳結果
最初に、AmazonJSタグはサーバ側でamazonjsショートコードから変換します。第二に、window.loadでamazonjs.jsは(それがプラグインによって追加された)jQueryのテンプレートを使って、アマゾンの製品を表示するには、HTMLタグでフォーマット置き換えます。

またAmazonJSの日本語説明記事には「WordPress 2.8以上、PHP5以上で動作します」とあります。

AmazonJS (WordPress Plugin)

サーバ側で変換?PHP5以上??

AmazonJSがうまく機能しない原因と解決策

このブログは「KUSANAGI for さくらのVPS」上でHHVMを利用しWordpressを実行しています。

ですがAmazonJSの説明にもある通り、サーバ側(PHP)でAmazon情報を取得し変換しているため、HHVMでアプリケーションを実行しているとうまく取得・変換が行われないようです。

解決法としては下記コマンドでHHVMからPHP7に切り替えてあげると無事AmazonJSが利用できるようになりました。

KUSANAGIでHHVMとPHP7のパフォーマンス計測

この際なので簡単ですがHHVMとPHP7のパフォーマンスを計測したいと思います。

ローカルPCからApacheBenchで計測

PHP7結果

Time taken for tests: 13.823 seconds
Requests per second: 72.34 [#/sec] (mean)

HHVM結果

Time taken for tests: 13.937 seconds
Requests per second: 71.75 [#/sec] (mean)

本当に些細ですがPHP7の方がパフォーマンスはいいようです。

PHP7とHHVMのパフォーマンスに関してはもっと詳しく計測してる方がたくさんいますので、気になる方は調べてみてもいいかもです。

取り敢えず私はこのままPHP7での運用をしたいと思います。

KUSANAGIでHHVMとPHP7についてまとめ

記事ではすんなり解決まで至ったように書いていますが、実際は一週間以上ハマり、途中AmazonJSプラグインを削除したりと心折れる寸前でした(笑

今回WordpressプラグインのAmazonJSがうまく実行されないことからHHVMからPHP7に切り替えましたが、AmazonJSを利用する(記事挿入時)時だけPHP7にし、その後の運用はHHVMで行っても問題なく運用できると思います。

新しいサービスを使う時はメリットも多いですが未知のバグに遭遇する機会も増えるのでいい勉強にもなりますね。



スポンサーリンク
レスポンシブ