- 2009-06-20 (土) 3:58
- WordPress
[追記]記事公開後にプラグイン付属の検索機能が働かないことが判明し、それに関する対策も記事下部に追記してます。(2009/06/20 17:26)
このサイトで商品を紹介するのに使っているプラグイン・wp-tmkm-amazonなんですが、内部で使用しているAPIがamazon側による仕様変更でそのままでは2009年8月15日以降は使えなくなる模様です。(詳細は下記から)
Amazon アソシエイト・プログラム(アフィリエイト) 公式ブログ: Amazon アソシエイト Web サービスの名称変更および署名認証についてのお知らせ
Product Advertising API
私としては結構使い勝手の良いプラグインなんですが開発者の都合で開発はすでに打ち切り。それでも諦めきれず検索すると、wp-tmkm-amazonに手を加えて電子認証に対応したプラグインを改良したという記事を見つけました。記事末には欲しい人はコメントをと記載されていたので早速コメント。…といっても個人的に欲しいというよりは出来たら公開して欲しいと。その後は改良者である Romeo さんと開発者である ともかめ さんとの間で協議され、晴れて改訂版として公開されることになりました。
で、本題はここから。
改良者である Romeo さんによると当初は電子認証に必要なAccess Key ID / Secret Access Keyを管理画面から入力/設定するようにしたかったそうですが、反映されなかったとのこと。そこで早速ソースコードを確認して改良してみました。
まずはwp-tmkm-amazon.phpに手を加えます。変更するのは次の3カ所。
// add
の行、または
// add -->
で挟まれた部分を追加します。
function WpTmkmAmazonAdmin() {
if ( !get_option('wp_tmkm_admin_options') ){
// create default options
$tmkm_amazon_options = array(
'associatesid' => '3104com-22',
'devtoken' => '', // add
'secretkey' => '', // add
'windowtarget' => 'self',
'jacketimgsize' => 'small',
'goodsimgsize' => 'small',
'layout_type' => '0',
'devtoken' => '',
'secretkey' => '',
);
update_option('wp_tmkm_admin_options', $tmkm_amazon_options);
}
}
$tmkm_amazon_admin_html .= '<form method="post" action="' . $_SERVER['PHP_SELF'] . "?" . $_SERVER['QUERY_STRING'] . '">' . '<input type="hidden" name="action" value="save_options" />' . '<table class="form-table">' . '<tr>' . "\n" . '<th>あなたのアソシエイト ID</th>' . "\n" . '<td><input type="text" name="associatesid" value="' . $tmkm_amazon_options['associatesid'] . '" /></td>' . "\n" . '</tr>' . "\n" . // add --> '<tr>' . "\n" . '<th>あなたのAccess Key ID</th>' . "\n" . '<td><input type="text" name="devtoken" value="' . $tmkm_amazon_options['devtoken'] . '" /></td>' . "\n" . '</tr>' . "\n" . '<tr>' . "\n" . '<th>あなたのSecret Access Key</th>' . "\n" . '<td><input type="text" name="secretkey" value="' . $tmkm_amazon_options['secretkey'] . '" /></td>' . "\n" . '</tr>' . "\n" . // add --> '<tr>' . "\n" . '<tr><th>商品リンクの動作</th>' . "\n" . '<td><input type="radio" name="windowtarget" value="self"' . $selfwindow . ' /> 同じウィンドウ( target 指定なし )<br />' . "\n" . '<input type="radio" name="windowtarget" value="newwin"' . $newwindow . ' /> 新規ウィンドウ( target="_blank" )</td>' . "\n" .
function tmkm_amazon_save_options() {
// create array
$tmkm_amazon_options = array(
'associatesid' => $_POST['associatesid'],
'devtoken' => $_POST['devtoken'], // add
'secretkey' => $_POST['secretkey'], // add
'windowtarget' => $_POST['windowtarget'],
'jacketimgsize' => $_POST['jacketimgsize'],
'goodsimgsize' => $_POST['goodsimgsize'],
'layout_type' => $_POST['layout_type'],
'devtoken' => $_POST['devtoken'],
'secretkey' => $_POST['secretkey'],
);
update_option('wp_tmkm_admin_options', $tmkm_amazon_options);
$options_saved = true;
}
さらにwp-tmkm-amazon-function.phpを。こちらは上記の追加箇所以外に削除箇所があります。
//erase
で示している行を削除またはコメントアウトしてください。
function getamazonxml( $AssociatesID, $SearchString, $getmode, $SearchIndex, $ResponseGroup, $PageNum ) {
global $tmkm_amazon_config, $tmkm_amazon_settings;
// --- Build XML Link ---
/*
$xmlFeed = $tmkm_amazon_config['JPendpoint'];
$xmlFeed .= '&AWSAccessKeyId=' .$tmkm_amazon_config['DevToken'];
if( $AssociatesID == '' ) { $AssociatesID = $tmkm_amazon_config['AssociatesID']; }
$xmlFeed .= '&AssociateTag=' . $AssociatesID;
if( $getmode == 'single' ) {
$xmlFeed .= '&Operation=' .$tmkm_amazon_config['OperationLookup'];
$xmlFeed .= '&ItemId=' .$SearchString;
$xmlFeed .= '&MerchantId=All';
$xmlFeed .= '&Condition=All';
} elseif( $getmode == 'plural' ) {
$xmlFeed .= '&Operation=' .$tmkm_amazon_config['OperationSearch'];
$xmlFeed .= '&Keywords=' .$SearchString;
$xmlFeed .= '&SearchIndex=' .$SearchIndex;
}
$xmlFeed .= '&Version=' .$tmkm_amazon_config['Version'];
$xmlFeed .= '&ContentType=' .$tmkm_amazon_config['ContentType'];
$xmlFeed .= '&ResponseGroup=' .$ResponseGroup;
if( $PageNum == '' ) { $PageNum = $tmkm_amazon_config['Pagenum']; }
$xmlFeed .= '&ItemPage=' .$PageNum;
*/
// $xmlFeed .= '&f=xml';
//$tmkm_amazon_options = get_option('wp_tmkm_admin_options');
$tmkm_amazon_settings = get_option('wp_tmkm_admin_options'); // add
$options['Service'] = $tmkm_amazon_config['Services'];
$options['AWSAccessKeyId'] = $tmkm_amazon_settings['devtoken']; // add
//erase $options['AWSAccessKeyId'] = $tmkm_amazon_config['DevToken'];
$options['Version'] = $tmkm_amazon_config['Version'];
//erase if( $AssociatesID == '' ) { $options['AssociateTag'] = $tmkm_amazon_config['AssociatesID']; }
if( $AssociatesID == '' ) { $options['AssociateTag'] = $tmkm_amazon_settings['associatesid']; } // add
else $options['AssociateTag'] = $AssociatesID;
if( $getmode == 'single' ) {
$options['Operation'] = $tmkm_amazon_config['OperationLookup'];
$options['ResponseGroup'] = $ResponseGroup;
$options['ItemId'] = $SearchString;
} elseif( $getmode == 'plural' ) {
$options['Operation'] = $tmkm_amazon_config['OperationSearch'];
$options['ResponseGroup'] = $ResponseGroup;
$options['SearchIndex'] = $SearchIndex;
$options['Keywords'] = $SearchString;
}
if( $PageNum == '' ) { $PageNum = $tmkm_amazon_config['Pagenum']; }
$options['ItemPage'] = $PageNum;
$options['Timestamp'] = gmdate('Y-m-d\TH:i:s\Z');
ksort($options);
foreach($options as $key => $val) {
$canonical_string .= "&" . $key . "=" . rawurlencode($val);
}
$canonical_string = substr($canonical_string, 1);
$string_to_sign = "GET\n" . $tmkm_amazon_config['Url'] . "\n" . $tmkm_amazon_config['Endpoint'] . "\n" . $canonical_string;
$signature = base64_encode(
hash_hmac('sha256', $string_to_sign, $tmkm_amazon_settings['secretkey'], true) // add
//erase hash_hmac('sha256', $string_to_sign, $tmkm_amazon_config['SecretKey'], true)
この変更で取得したAccess Key ID / Secret Access Keyを管理画面から設定して反映することが出来ると思います。
本当のところ、wp-tmkm-amazon-function.phpの上記で紹介した箇所を見て「あ、試行錯誤してたんだなぁ…」って思ったんです。で、反映されていない…と仰っていたのを片隅においてみてみたら次の箇所が目に付いたんです。
$tmkm_amazon_options = get_option('wp_tmkm_admin_options');
で、ここで取得した値をその下のコードで利用しようとしておられたのですが、どうもこの変数名とは違う
$tmkm_amazon_settings
という変数に取得したものとしてコードが進んでました。ということで、もしかするとこの
get_option()
で返ってきた値を納めているコードの
$tmkm_amazon_options
の部分を変えてやれば…と試したところ、すんなり。私自身もこういうミスって良くやってるよなぁ…と思ってしまいました。
これらの修正はさほど難しくない修正なのでwp-tmkm-amazon改訂版をより便利にしたいって思われている方はちょっと変更を加えてみてください。
[追記]
この改訂版プラグインの開発者 Romeo さんからコメントを通じて、上記の改変を施しても投稿画面に出てくるwp-tmkm-amazonの検索が有効にならないという情報をいただきました。確かに実際に検索してみると、
Fatal error: Call to undefined function get_option()
というエラーが出て検索できない状態でした。このエラーは「get_option()なんて関数、どこにあるかわかんないよん」といってるのです。
で、 WordPressに詳しい hiromasa さんにget_option()関数はプラグインは管理画面以外では使えないのかを尋ねたらそんなことはないということ。じゃぁ、get_option()関数を使えるようにインクルードしてやる必要があるか…と思っていたら、これまた hiromasa さんがwp-tmkm-amazon-search.phpに wp-load.phpをインクルードしたらと提案してくださいました。…というのも、amazon検索に使用しているwp-tmkm-amazon-search.phpがプラグインの独自プログラムだけで完結しているためとのこと。
…ということで、wp-tmkm-amazon-search.php の頭の方を次のように変更。(改変法則は上記と一緒です)
<?php
/******************************************************************************
* THIS FILE IS CALLED ONLY.
*****************************************************************************/
include_once('wp-tmkm-amazon-function.php');
include_once('../../../wp-load.php'); //add
$amazonparse = & new GetAmazonXmlParse();
/******************************************************************************
* INITIALIZE
*****************************************************************************/
$AssociatesID = '3104com-22';
$output = '';
$associatesid = !empty($_GET['AID']) ? $_GET['AID'] : $AssociatesID;
私のところではこれで無事動作しました。なお、 hiromasa さん曰く、プラグインディレクトリの場所を変更している場合にはwp-load.phpまでのパスが変わる場合があるので、使用している環境に応じて変更してください!
#hiromasa さん、いつもいつもありがとうございます!
- 関連記事:
- Newer: WordPress環境を吹っ飛ばす・そして個別記事表示不良の復活
- Older: ネットショップを始める前に必要なこと
Comments:2
-
Romeo 09-06-20 (土) 6:43
コメント等々ありがとうございます。
上記方法だけでは検索フォーム側にはAccess Key ID / Secret Access Keyは反映されません。
従って、いずれにせよwp-tmkm-amazon-function.phpへの記述が必要になるため、意味がないと判断し、今回の変更からは外した次第です。なお、現在問題とされている「検索キーワードを入力し、検索をかけても画面が真っ白」という現象は上記Access Key ID/Secret Access Keyが反映されていない場合に発生することがあります。
念のため、当方指定箇所へ上記を記述してあるかご確認いただき、記述がない場合は、記述した上で再度ご確認いただければ幸いです。
Trackbacks:1
- Trackback URL for this entry
- http://shinonon-web.net/2009/06/20/1023/trackback/
- Listed below are links to weblogs that reference
- wp-tmkm-amazon改訂版に手を加えました(管理画面での設定機能の追加) from ある日の小さなつぶやき
- pingback from LOVE!? » links for 2009-06-27 09-06-28 (日) 15:01
-
[...] wp-tmkm-amazon改訂版に手を加えました(管理画面での設定機能の追加) – ある日の小さなつぶやき 電子認証に必要なAccess Key ID / Secret Access Keyを管理画面から入力/設定したい方はみや [...]











