AMPでAmazonJSプラグインを使えるようにした | WordPress



AMP で AmazonJS を使う

Amazonアソシエイト(アフィリエイト)の商品紹介を、WordPressで生成したブログ上に、キレイに貼り付けてくれる便利なプラグインに AmazonJS があり、有名だ。

一方、スマートフォン等の携帯端末向けに、高速なウェブブラウジングを実現する手段として、Google社も推奨するAMP(Accelerated Mobile Pages Project)という枠組みがある。

AMP に対応させると、Googleの検索結果に引っかかりやすくなり、また、高速なブラウジングが可能となるため、閲覧者はストレス無くページを閲覧することが可能となる。
(その結果、PV数が増えるということで、対応するブログも多くなってきた。)

ただ、AmazonJS は Javascript で動作するのだが、AMP は限定した Javascript のみに対応しており、AmazonJS は動作しない。

ただ、AmazonJS の Javascript は、Amazonから API を介して必要な商品情報を取得する仕組みになっているが、この処理を、php に書いてあげることで、正常に動作させることが可能となる。

こちら↓の方が、「AMP」というプラグインでAMP化を実現した際に、AmazonJS を使用する例を記載してくださっている。

AMPでAmazonアフィリエイト(アソシエイト)に本格的に対応した話(WordPress AmazonJSを使う)

今回は、これを真似て、Simplicity2 でAMP化を実現した際に、AmazonJS を使用することとする。

Simplicity2 でAMP化し、AmazonJS を利用

SimplicityというWordPressテーマは、Simplicity 2.3.1 から AMP に対応している。

Simplicity 2.3.1 以降が、WordPress にインストールされている前提で進める。

wp-content/themes/simplicity2/lib/amp.php というファイルを編集する。

まず、万が一の場合を想定し、バックアップをとっておく。

$ cd /DIRECTORY_OF_WORDPRESS/wp-content/themes/simplicity2/lib/
$ cp amp.php amp.php.bak

標準では、AmazonJS 関連のエントリーがあった場合は、URLをhttpsに変換する等の処理が入っているが、一部重複するため、Amazonアソシエイト関連の処理は、コメントアウトする。

$ vi amp.php
[コメントアウトする部分]
 //Amazon商品リンクのhttp URLをhttpsへ
  $the_content = str_replace('http://rcm-jp.amazon.co.jp/', 'https://rcm-fe.amazon-adsystem.com/', $the_content);
  $the_content = str_replace('"//rcm-fe.amazon-adsystem.com/', '"https://rcm-fe.amazon-adsystem.com/', $the_content);
  $the_content = str_replace("'//rcm-fe.amazon-adsystem.com/", "'https://rcm-fe.amazon-adsystem.com/", $the_content);
  //Amazon商品画像のURLをhttpsへ
  $the_content = str_replace('http://ecx.images-amazon.com', 'https://images-fe.ssl-images-amazon.com', $the_content);
  //Amazonデフォルトの埋め込みタグを置換する
  /*
  $pattern = '/<iframe([^>]+?)(src="https:\/\/rcm-fe.amazon-adsystem.com\/[^"]+?").*?><\/iframe>/is';
  $append = '<amp-iframe$1$2 width="120" height="240"frameborder="0">'.$amp_placeholder.'</amp-iframe>';
  */
/*  $pattern = '/<iframe([^>]+?)(src="https?:\/\/rcm-fe.amazon-adsystem.com\/[^"]+?t=([^&"]+)[^"]+?asins=([^&"]+)[^"]*?").*?><\/iframe>/is';
  $amazon_url = 'https://www.amazon.co.jp/exec/obidos/ASIN/$4/$3/ref=nosim/';
  $append = PHP_EOL.'<amp-iframe$1$2 width="120" height="240" frameborder="0">'.$amp_placeholder.'</amp-iframe><br><a href="'.$amazon_url.'" class="aa-link"></a>'.PHP_EOL;
*/

Amazonから商品リンクを引っ張ってくるためのライブラリをダウンロードし、

wp-content/themes/simplicity2/lib/amp.php

と同じディレクトリに格納する。

ダウンロード先 → github: AmazonWordpressApi

次に、いよいよ、AmzonJS の Javascript を書き換えるための phpコードを書く。

$ vi amp.php

先程、Amazonアソシエイト関連の処理をコメントアウトした直後の、83行目辺りに、以下のように記載する。

// AMAZON JS対応
$matchNum = preg_match_all('/data-asin="([^"]{1,})"/', $the_content, $matches);
include "aws_apai.php";
foreach ($matches[1] as $asin) {
$html = getAsinInfo($asin);
$the_content = preg_replace('/<div data-role="amazonjs".*?<\/div>/',$html, $the_content,1);
}

amp.phpの末尾に以下を追記する。

//AmazonJS用function
function getAmazonInfoHtml($product) {
// 画像サイズを横幅最大65pxとする
$imgWidthMag= $product["imageWidth"] / 65;
$imgWidth = $product["imageWidth"] / $imgWidthMag;
$imgHeight = $product["imageHeight"] / $imgWidthMag;
$html;
$html .= '<div class="amazonjs_item">';
$html .= '<div class="amazonjs_image">';
$html .= '<a href='. $product["url"] . 'class="amazonjs_link" data-role="amazonjs_product" data-asin="'. $product["asin"] .'" title="'. $product["name"] .'" target="_blank">';
$html .= '<amp-img src="'. $product["image"] .'" width="'. $imgWidth .'" height="'. $imgHeight .'" alt="'. $product["name"] .'"></a>';
$html .= '</div>';
$html .= '<div class="amazonjs_info">';
$html .= '<h4>';
$html .= '<a href="'. $product["url"] . '" class="amazonjs_link" data-role="amazonjs_product" data-asin="B00HV671GW" title="'. $product["name"] .'" target="_blank">';
$html .= $product["name"] .'</a></h4>';
$html .= '<ul>';
$html .= '<li>'. $product["publisher"] . '</li>';
if (isset($product["fprice"]) and !empty($product["fprice"])) {
$html .= '<li class="amazonjs_price" title="価格および発送可能時期はデータを取得した時点のものであり、変更される場合が
あります。商品の販売においては、購入の時点で [Amazon.co.jp または Javari.jp] に表示されている価格および発送可能時期の>情報が適用されます。">';
if (isset($product["ListFprice"]) and !empty($product["ListFprice"])) {
$html .= '<b>参考価格</b><span class="amazonjs_listprice">'. $product["ListFprice"]. '</span><br>';
}
$html .= '<b>価格</b>'. $product["fprice"] . '<span></span></li>';
}
if (isset($product["releaseDate"]) ) {
$html .= '<li><b>発売日</b>'. str_replace("-", "/",$product["releaseDate"]) . '</li><li>';
} else if(isset($product["publicationDate"])) {
$html .= '<li><b>発売日</b>'. str_replace("-", "/",$product["publicationDate"]) . '</li><li>';
}
$html .= '<b>商品ランキング</b>'.number_format($product["salesRank"]) . '位</li>';
$html .= '</ul>';
$html .= '</div>';
return $html;
}

あとは、Simplicity2 の設定から、AMPを有効化すればOKだ。

WordPressの通常のブログ投稿画面からAmazonJS で Amazonアソシエイトのリンクを貼れば、AMPでもキレイに表示されるはずだ。



シェアする

  • このエントリーをはてなブックマークに追加

フォローする