※弊社記事はたぶんにPRが含まれますので
話半分で受け取ってください。

とある博物館の売店の営業は無事に終了しました。

WordPressプラグイン – Simple Amazon ver. 2.0.5

 WordPressでAmazonの商品を表示する事が出来るプラグイン「Simple Amazon」を作ってみました。
 実はicoroでは結構前から使っており、公開しようかと思っていたのですが、そんなときにAmazonの「AWS(Associates Web Service)」が「Product Advertising API」に名称変更になり、ついでに利用するのに認証が必要になるという仕様変更が発生。「そしたら、ちゃんと動作確認してから公開するか」と思ってしばらく放置していたのですが、先日(8/4)、動作確認も出来たので公開することにしました。

 「Simple Amazon」には、Amazonの商品のASINを指定するとその商品を記事上に表示するという、ただそれだけの機能しかありません。こんなふうに。

 「商品検索なんてAmaozonでした方が早いでしょ」「ちょっと具合悪いとこなんて自分で直すわ」「でも自分でイチからプラグイン組むのはダルイわ」という、ワケが分かっている人向けのプラグインです。

 「Simple Amazon」のベースとなっているのは、「wp-tmkm-amazon」というプラグインです。このプラグイン、良くできていると思うのですが、すでに開発が止まってます(最近、有志により開発が進められているっぽいです)。
 加えて、php5で使用するとエラーを吐いたり、自分にはあまり必要ない機能もあったので、書き直させてもらいました。
 そうして出来たのがこの「Simple Amazon」です。

ダウンロード

インストール方法

 まず最初に、simpleXMLを使っているので、PHP5以上が必要です。なので、php4の方はそのままでは使えません。書き直して使ってください。
 php5を使っている方、あるいは、php4でも使えるように書き直してやったぜ、というツワモノは、以下の手順でインストールしてください。

  1. ダウンロードした zip ファイルを解凍します。
  2. simple-amazon-function.php 内の private_key、AWSAccessKeyIdの2つを編集します。private keyとAssociateTagはhttp://aws.amazon.com/で取得してください。
  3. simple-amazon フォルダを wp-content/plugins フォルダに転送します。
  4. cacheディレクトリのパーミッションを777(または707)にします。
  5. 管理画面から simple-amazon を有効化します。
  6. 管理画面にある「設定」画面内の「Simple Amazon」メニューで、ご自分のアソシエイトIDを入力します。入力しなくても機能しますが、その場合はリンクにicoroのアソシエイトIDが付与されます。(ありがとうございます!)
  7. そのほか、管理画面では、リンクウィンドウの挙動や詳細表示を設定できます。

 private_key、AWSAccessKeyIdについてちょっと補足。
 simple-amazon-function.phpを開くと、最初の方に以下のような記述があります。この中にある「AWSAccessKeyId」の値にAWSAccessKeyIdを、「private_key」の値にSecretKeyをそれぞれ入力してください。

$simple_amazon_config = array(
	'AWSAccessKeyId'=> '',	// DevToken
	'private_key'	=> '',	// SecretKey
	'litephp_path'	=> 'Lite.php',					// Lite.phpのpath
	'cache_dir'		=> WPSA_PLUGIN_DIR. '/cache/',	// cacheディレクトリのpath
	'cache_time'	=> 60*60*1						// cacheの有効時間(秒単位)
);

 ついでに、ここではcacheファイルを置くディレクトリの場所やcacheファイルの有効時間も変更する事が出来ます。

使い方

 使い方は極めてシンプルです。記事中の商品を表示したい場所に以下のように記述するだけです。

<amazon>ASIN</amazon>

「ASIN」とある部分はアマゾンの商品コードである「ASIN」に置き換えてください。wp-tmkm-amazonと違って商品検索機能はついてないので、表示したい商品のASINはAmazonで検索してください。

 simple-amazon.phpの219行目のコメントを外し、220行目をコメントアウトすると、[tmkm-amazon]ASIN[/tmkm-amazon]という記述で動作するように出来ます。これはすでにwp-tmkm-amazonを利用している場合に有効に働くと思います。

wp-tmkm-amazonとの相違点

 「Simple Amazon」はベースとなっている「wp-tmkm-amazon」と以下の点が異なっています。

  1. 商品検索機能とリスト表示機能を削除
  2. xml.phpの代わりにSimpleXML関数を使用
  3. Product Advertising APIの認証に対応
  4. cacheが機能するように修正

 商品検索機能とリスト表示機能は使わないので削除しました。

 xml.phpからSimpleXMLに切り替えたのは、wp-tmkm-amazonが吐くエラーの原因がxml.phpにあったためです。放っておくと、Apacheのエラーログが「PHP Warning: Call-time pass-by-reference has been deprecated;」で始まるエラーでいっぱいになります。これはphp.iniの中にある「allow_call_time_pass_reference」がOffになっているときに引数を参照渡ししようとすると発生するエラーらしいです(ただしphp5以上に限る)。
 このエラーを解消するにはphp.iniを開いてこれをOnにするか、.htaccessに、

php_flag allow_call_time_pass_reference on

と書けばいいのですが、そもそもこの機能は将来的にはサポートされないものらしいとかなんとか。そんなわけでxml.phpを利用している部分をSimpleXMLで書き直ししました。また、SimpleXMLを利用した事で、PHP5以上が必須となりました。

 「Product Advertising API」の認証機能は寝耳に水でしたが、結構早い時期にphpのサンプルなどが出てきたので、それを参考にして対応しました。インターネットって素晴らしいですね。

 キャッシュの機能は、一応、コードとしては存在しているのですが、存在しないディレクトリをキャッシュディレクトリとして差していたりなんだりで、ちゃんと機能していませんでした。なので、これをちゃんと機能するように修正しました。これはもしかしたら自分の環境だけかもしれません。

 あと、AWSには確か1秒に1コールまでという制限があったっと思うのですが、「Product Advertising API」でもこれは有効なんでしょうか(ググレカス)。まあ、たぶん有効だと思うのですが、だとしたら、「wp-tmkm-amazon」の仕様(転じて「Simple Amazon」の仕様)だと、キャッシュの機能が無い場合、商品が貼ってある記事にアクセスがある度に1コールするので、アクセス数が多いところはこの制限に引っかかるところが出てくるかも?
 キャッシュが有効ならば、キャッシュが効いている間はAmazonにコールする必要がないので制限を気にしなくて済みます。まあ、月間ン十万アクセスとかにならないと、そうそう引っかかる事もないとは思うのですが。

 あと、何が原因なのかよく分かりませんが、「Product Advertising API」になってからちょくちょくレスポンスの取得を失敗するようになりました。そう言う場合も、キャッシュ機能があるととりあえず安心できます。
 これ、認証失敗してるのかなぁ、と思ったのですが、どうもそういうわけでもないみたいです。理由が分かる人は教えてください。

追記

2009/08/16

 Simple Amazon Ver. 2.0.6を作成しました。

関連リンク

関連する記事