1. HOME
  2. フロントエンド
  3. Amazon引用リンクを少しだけ印象的に見せるカスタマイズ

Amazon引用リンクを少しだけ印象的に見せるカスタマイズ

フロントエンド

商品紹介記事などによく使われているAmazonアソシエイトの引用リンク。
でも、iframeを置いてみてもリンク範囲は小さいし、サイトのデザインに合わないから浮いてしまう。
それを解消するa-blog cmsのAmazon引用リンクのカスタマイズ方法をご紹介します。
この記事は「a-blog cms Advent Calendar 2017」の22日目の記事です。

iframeだとこんな感じに。
意外とリンク範囲が小さいですし、少し目立ちにくい。
カスタマイズをすれば下のように色々なスタイルを当てることができます。


アクセスキーとトラッキングIDを取得する

Amazonアソシエイトにアクセスし、Amazonアソシエイトのアカウントがすでにある場合にはサインイン、ない場合には無料アカウントを作成するを選択します。

Amazonアソシエイトの登録方法は下記の記事がわかりやすいかと思います。




ホーム画面から「トラッキングID管理」を選択



トラッキングIDを追加するを選択肢追加します
これでトラッキングIDは完了です。
「-22」がつくのは日本だからのようですね。



ナビゲーション部分から「ツール」→「Amazon Product Advertising API」を選択し、「認証情報を追加する」から追加します

シークレットキーは「認証情報を追加する」を押下後の一度しか確認ができません。
後ほどテンプレートでアクセスキーシークレットキーは使用しますので、コピーまたはCSVをダウンロードしておきましょう。
もしわからなくなった場合は最大2個までで、削除をすれば再追加も可能なので追加をしてください。

テンプレートをカスタマイズする

[php] → [ACMS] → [User] → [Hook.php]を編集します。

Hook.php内の引用ユニット拡張箇所にAmazon用のコードが(実はひっそりと)コメントアウトで記述されています。Amazonで検索すると一発で見つかります。
$Amazonからsleep(2)下の波かっこ( } )までのコメントアウトを外します。

$Amazon = new ACMS_Services_Amazon(
      'tracking_id',
      'access_key',
      'secret_access_key'
);
 if ( 1
     && $Amazon->isValid()
     && $asin = $Amazon->getAsinFromUrl($url)
) {
     $xml            = $Amazon->amazonItemLookup($asin);
     $url            = $xml->Items->Item->DetailPageURL;
     $image          = $xml->Items->Item->LargeImage->URL;
     $manufacturer   = $xml->Items->Item->ItemAttributes->Manufacturer;
     $title          = $xml->Items->Item->ItemAttributes->Title;
     $price          = $xml->Items->Item->OfferSummary->LowestNewPrice->FormattedPrice;

     $html = "<h1><a href=\"$url\">$title</a></h1>"
          ."<img src=\"$image\" width=\"150px\">"
          ."<p>$manufacturer</p>"
          ."<p>$price</p>";

     sleep(2);
}

【tracking_id】【access_key】【secret_access_key】の部分には先ほど取得したトラッキングIDとアクセスキーとシークレットキーを記述します。

あとは引用ユニットを用意しておけば、引用先URLがAmazonの場合には$htmlに書かれたソースが、Amazonではない場合は通常の引用が表示されます。

表示内容をカスタマイズ

ここからは上記まででAmazon用のユニットは表示ができますが、ソース構造やスタイルも編集したい方向けです。

$htmlは基本的に通常のHTMLを記述する形です。
初期のソースではダブルクォーテーションが複数に分かれていますが、いつのダブルクォーテーション内に記述でもOKです。
1つに繋げてしまうとわかりにくいためあえてHTMLを書くようにダブルクォーテーションで区切りドットで繋げています。
また、もちろんPHPですのでエスケープが面倒という方はシングルクォーテーションにHTMLタグを記述する形でもOKです。

このブログでは下記のような感じになっています。

$html = "<div class=\"c-amazon__wrap\">"
          ."<blockquote class=\"c-amazon\">"
          ."<a href=\"$url\" class=\"c-amazon__link clearfix\">"
          ."<img src=\"$image\" class=\"c-amazon__img\">"
          ."<div>"
          ."<p class=\"c-amazon__title\">$title</p>"
          ."<p class=\"c-amazon__description\">$manufacturer</p>"
          ."<p class=\"c-amazon__price\">$price</p>"
          ."</div>"
          ."</a>"
          ."</blockquote>"
          ."</div>";

出力に関しては【$url】【$image】【$xml】【$manufacturer】【$title】【$price】のみとなっていますが、
自由に追加が可能です。

初期のソースでは大きいサイズの画像を取得していますが、画像のサイズでも3種類ほど取得できるようです。
ImageSetsまで見に行くと3種類プラスされます。

$smallImg    = $xml->Items->Item->SmallImage->URL;
$mediumImg    = $xml->Items->Item->MediumImage->URL;
$largeImg    = $xml->Items->Item->LargeImage->URL;

$swatchImg    = $xml->Items->Item->ImageSets-> ImageSet->SwatchImage->URL;
$tinyImg    = $xml->Items->Item->ImageSets-> ImageSet->TinyImage->URL;
$thumbnailImg    = $xml->Items->Item->ImageSets-> ImageSet->ThumbnailImage->URL;

xmlのレスポンスに関しては公式ではこちらのページで確認ができるかと思います。

個人的には下記のQiitaのページがXML構造を確認するのにわかりやすいです。ぜひ参考にどうぞ。


$htmlないは完全にHTMLを記述しているだけなので、CSSも当てることができます。
このブログのAmazon引用リンクのCSSはこんな感じ。

blockquote:not(.c-amazon) {
	box-sizing: border-box;
	width: calc(100% + 20px);
	margin: 0 0 30px;
	padding: 40px 26px;
	border-radius: 7px; 
	background-color: #EBEBEB;
	background-image: url("/themes/xxxxx/images/dot.png");
	background-repeat: no-repeat;
	background-position: 0 -40px;
	line-height: 1.8;
}
.c-amazon {
	position: relative;
	padding: 40px 15px 15px;
	border: 1px solid #F90;
	border-radius: 7px;
}
.c-amazon:after {
	display: block;
	position: absolute;
	top: 0;
	left: 0;
	width: 100%;
	background-color: #F90; 
	color: #FFF;
	text-align: center;
	content: "amazon";
}
.c-amazon__link {
	display: -ms-flexbox;
	display: flex;
	color: #444;
	text-decoration: none !important;
	transition: all .2s; 

	align-items: center;
	-ms-flex-align: center;
	-ms-flex-wrap: nowrap;
	    flex-wrap: nowrap;
}
.c-amazon__link:hover {
	opacity: .6;
}
@media screen and (max-width: 767px) {
	.c-amazon__link {
		display: block;
	}
	.c-amazon__img {
		display: block;
		margin: 0 auto;
		margin-bottom: 20px;
	}
}
.c-amazon__img {
	height: 300px;
	padding-right: 20px;
}
.c-amazon__title {
	margin-bottom: 5px;
	font-size: 20px;
}
.c-amazon__description {
	margin: 0;
	color: #9AB;
	font-size: 14px;
}
.c-amazon__price {
	margin: 5px 0 0;
	color: #9AB;
	font-size: 14px;
}

以前試した時はもう少しアクセスキーの取得あたりがややこしかった気がしますが、サイトが変わって格段に簡単になったようなのでぜひまだ使ってない方はお試しください。