トップ «前の日記(2009年06月11日(Thursday)) 最新 次の日記(2009年06月25日(Thursday))» 編集

たいへん日記

私へ●たいはかせの日記、と言うよりは雑記です.
日々の出来事を書いていくのではなく、普段から思っていることをとりとめもなく書いていくつもりです.
とかなんとか言いながらも日々の行動の記録が大半を占めているあたりがニントモカントモ...

2006|04|05|06|07|08|09|10|11|12|
2007|01|02|03|04|05|06|07|08|09|10|11|12|
2008|01|02|03|04|05|06|07|08|09|10|11|12|
2009|01|02|03|04|05|06|07|08|09|10|11|12|
2010|01|02|03|04|05|06|07|08|09|10|11|12|
2011|01|02|03|04|05|06|07|08|09|10|11|12|
2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|03|04|05|06|07|08|09|10|11|12|
2022|01|02|03|04|05|06|07|08|09|10|11|12|
2023|01|02|03|04|05|06|07|08|09|10|11|12|
2024|01|02|03|12|

2009年06月16日(Tuesday) 肩の荷をおろす日々

_ [FreeBSD] Amazon Product Advertising API

「Amazon Product Advertising API」もしくは「Amazon Web サービス」と呼ばれるサービスへのリクエストに認証が必要になるぞ、との件についてのお話です.
この項は、http://kerop.info/tattler/20090512.htmlhttp://kerop.info/tattler/20090518.htmlの続きなのよ.

さてさて、うちの図書館で使っている蔵書検索システムでも「Amazon Web サービス」によって Amazon の商品情報や関連コンテンツにアクセスしています.
具体的には、ASIN をキーにして Amazon から書影、解説文、曲目リストを得て、データベース内の書誌情報とともに表示させています.
この一連の動作を認証付きリクエストに対応させようとがんばっていたのですが、ようやく対応できました(^Q^).
とっかかりには時間がかかりましたが、準備が整ってしまえば簡単に片づいたの.以下は、PHPスクリプトの当該部分です.

$key = '[Secret Access Key]';
$req2 = 'ItemId=' . $ASIN;
$req6 = 'Timestamp=' . date('Y-m-d\TH%3\Ai%3\As\Z');
$req[0] = 'AWSAccessKeyId=1KWB7D6XFQ6QP78THH02';
$req[1] = 'IdType=ASIN';
$req[2] = $req2;
$req[3] = 'Operation=ItemLookup';
$req[4] = 'ResponseGroup=EditorialReview%2CImages%2CTracks';
$req[5] = 'Service=AWSECommerceService';
$req[6] = $req6;
$reqcurl = join('\&', $req);
$req = join('&', $req);
$message = array('GET', 'webservices.amazon.co.jp', '/onca/xml', $req);
$message = join("\n", $message);
$hash = hash_hmac('sha256', $message, $key, 'true');
$hash = base64_encode($hash);
$hash = urlencode($hash);
$amazon_url = "/usr/local/bin/curl http://webservices.amazon.co.jp/onca/xml\?" . $reqcurl . "&Signature=" . $hash;
$amazon_info = exec($amazon_url);

_ [Secret Access Key] はAmazon Webサービスの Secret Access Key、$ASIN は表示するレコードにあらかじめ入力されているASINです.
上記のスクリプトを動かすと、$amazon_info に Amazon からの情報が XML で書き込まれます.
あとは必要な部分を取り出し、整形し、表示させれば完成なのよ.

_ 解説文の抽出・成形はこんな感じです

$amazon_review_start_1 = strpos($amazon_info,"");
$amazon_review_end_1 = strpos($amazon_info,"
");
$amazon_review_length_1 = $amazon_review_end_1 - $amazon_review_start_1;
$amazon_review_1 = substr($amazon_info,$amazon_review_start_1,$amazon_review_length_1);
$amazon_review_start_2 = strpos($amazon_review_1,"");
$amazon_review_end_2 = strpos($amazon_review_1,"
");
$amazon_review_length_2 = $amazon_review_end_2 - $amazon_review_start_2;
$amazon_review = u2s(substr($amazon_review_1,$amazon_review_start_2,$amazon_review_length_2));
$amazon_review = str_replace("","",$amazon_review);
$amazon_review = str_replace("<","<",$amazon_review);
$amazon_review = str_replace(">",">",$amazon_review);

きっともっと簡単な方法があるに違いないのでしょうが、今のはかせにはこれが精一杯.
同様に曲目リスト、書影を $amazon_info から抽出・成形して表示させます.
これでおしまい.
5月から懸念の件でしたが、なんとか解決なのです(^Q^).