WordPressでアマゾンの商品情報を出力するプラグイン

by oganosin. 0 Comments

前回のブログからはや一ヶ月がたとうとしている・・・。やばいですな。
でも何もしていなかった訳ではなく、wp-tmkm-amazon の代わりにWordpressでアマゾンの商品情報を出力するプラグインを自作した。アマゾンへのアクセスは前回勉強したTarzanを使用。

プラグインのソースは以下の通り。wp-tmkm-amazonとは違ってショートコードを使ってみた。これどっかで公開したいな。wordpress.org で公開するにはどうしたらいいんだろう?別途調べてみよう。

使い方。

  1. ライブラリTarzanをhttp://tarzan-aws.com/ からDLしてパスが通っている場所、もしくは下記プラグインファイルと同じ場所に配置。
  2. 順番前後しますが、Tazan内の config.inc.php にアマゾンの認証キー等を設定。ほんとはプラグインの管理画面から設定できるのがベストなんだろうな。
  3. 投稿のアマゾンの商品情報を展開したい部分にショートコードを [amazonitem type=”商品タイプ”]ASIN[/amazonitem] と記述

以上。過去記事との互換性のためにショートコードがtmkm-amazonでも動作するようにしてあります。ほんとはXSLTとか使った方がスマートなんだろうけどね。現状、音楽CDの場合には収録曲が表示されます。

<?php
/*
Plugin Name: Add amazon data
Plugin URI: http://www.oganosin.net/
Description: add amazon data html to the entry
Author: oganosin
Version: 1.0
Author URI: http://www.oganosin.net
*/

add_action('wp_head', 'add_amazon_stylesheet');
add_shortcode('tmkm-amazon', 'replace_asin');
add_shortcode('amazonitem', 'replace_asin');

function add_amazon_stylesheet(){
$filedir = get_option('siteurl') . '/wp-content/plugins/' . basename(dirname(__FILE__));
echo '<link rel="stylesheet" href="' . $filedir . '/amazon.css" type="text/css" media="screen" />';
}

function replace_asin($atts, $content){
extract(shortcode_atts(array(
'asin' => '',
'type' => 'music',
), $atts));
$html = getAmazonData($content, $type);
return $html;
}

function getAmazonData($asin, $type){
if($type == "music"){
return getAmazonData_music($asin);
}
require_once('tarzan/tarzan.class.php');
$obj = new AmazonAAWS();
$res = $obj->item_lookup(
$asin,
array(
'ResponseGroup'=>'Images,ItemAttributes',
),
AAWS_LOCALE_JAPAN);

$htmlcode = '<div>'
. '<a href="'
. $res->body->Items->Item->DetailPageURL
. '">'
. '<img src="'
. $res->body->Items->Item->MediumImage->URL
. '" /></a>'
. '<h4><a href="'
. $res->body->Items->Item->DetailPageURL
. '">'
. $res->body->Items->Item->ItemAttributes->Title
. "</a></h4>";
if((String)$res->body->Items->Item->ItemAttributes->Author != ''){
$htmlcode .= "<p><span>著者/訳者:</span>"
. $res->body->Items->Item->ItemAttributes->Author
. "</p>";
}
if((String)$res->body->Items->Item->ItemAttributes->PublicationDate != ''){
$htmlcode .= "<p><span></span>"
. $res->Body->Items->Item->ItemAttributes->PublicationDate
. "</p>";
}
$htmlcode .= "<p><span>定価:</span>"
. $res->body->Items->Item->ItemAttributes->ListPrice->FormattedPrice
. "</p>"
. "<p><span></span>"
. $res->body->Items->Item->ItemAttributes->Label
. "</p>"
. "<p><span>EAN:</span>"
. $res->body->Items->Item->ItemAttributes->EAN
. "</p>"
. "<hr />";
$htmlcode .="</div>";
return $htmlcode;
}

function getAmazonData_music($asin){
require_once('tarzan/tarzan.class.php');
$obj = new AmazonAAWS();
$res = $obj->item_lookup(
$asin,
array(
'ResponseGroup'=>'Images,ItemAttributes,Tracks',
),
AAWS_LOCALE_JAPAN);

$htmlcode = '<div>'
. '<a href="'
. $res->body->Items->Item->DetailPageURL
. '">'
. '<img src="'
. $res->body->Items->Item->MediumImage->URL
. '" /></a>'
. '<h4><a href="'
. $res->body->Items->Item->DetailPageURL
. '">'
. $res->body->Items->Item->ItemAttributes->Title;
if((String)$res->body->Items->Item->ItemAttributes->Artist != ''){
$htmlcode .= " / "
. $res->body->Items->Item->ItemAttributes->Artist;
}
$htmlcode .= "</a></h4>";
$htmlcode .= "<div><dl>";
if((String)$res->body->Items->Item->ItemAttributes->ReleaseDate != ''){
$htmlcode .= "<dt>発売日:</dt>"
. "<dd>"
. $res->body->Items->Item->ItemAttributes->ReleaseDate
. "</dd>";
}
$htmlcode .= "<dt>定価:</dt>"
. "<dd>"
. $res->body->Items->Item->ItemAttributes->ListPrice->FormattedPrice
. "</dd>"
. "<dt>レーベル:</dt>"
. "<dd>"
. $res->body->Items->Item->ItemAttributes->Label
. "</dd>"
. "<dt>JAN/EAN:</dt>"
. "<dd>"
. $res->body->Items->Item->ItemAttributes->EAN
. "</dd>"
. "</dl>"
. "</div><hr />";

if(count($res->body->Items->Item->Tracks->Disc)>1){
// multi disc
$cnt = 0;
foreach($res->body->Items->Item->Tracks->Disc as $disc){
$atr = $disc->attributes();
$htmlcode .= "<div class=\"multi\">";
$htmlcode .= "<h5>Disc. " . $atr->Number . "</h5>";
$htmlcode .= "<ol>";
foreach($disc->Track as $k => $tracktitle){
$htmlcode .= "<li>" . $tracktitle . "</li>";
}
$htmlcode .= "</ol>";
$htmlcode .= "</div>";
$cnt++;
if($cnt%2 == 0) { $htmlcode .= "<hr />"; }
}
if($cnt%2 == 1) { $htmlcode .= "<hr />"; }
}else{
//single disc
$htmlcode .= "<ol>";
foreach($res->body->Items->Item->Tracks->Disc->Track as $tracknumber => $tracktitle){
//foreach($item["tracks"]->Disc->Track as $tracktitle){
$htmlcode .= "<li>" . $tracktitle . "</li>";
}
$htmlcode .= "</ol>";
}
$htmlcode .="</div>";
return $htmlcode;
}
?>

コメントを残す

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