ざっくりと整理したのでサンプルソースをアップ。
Amazon APIのRequestへの電子署名添付(PHP版) | Yama’s Memorandum
http://memorandum.yamasnet.com/archives/Post-320.html
のソースを改変して、画像を表示させるようにしたもの。
サンプルの動作は、http://moonmile.net/php/amazon.php で確認できる。
探したい本のキーワード(例. 増田智明)を入力して、送信ボタンを押すと、画像付きのリストが表示される。先頭の行は、戻されるXMLの確認用で、そのままURLで指定するとamazon apiの返信が見られる。
実際は、複数ページで返されるので、Items/TotalResults, Items/TotalPages をチェックしないといけないだが、今回は省略。
ひとまず、これで物欲webはできそうだ。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 | <?php if ( $_POST [ "submit" ] == "送信" ) { // Access Key ID と Secret Access Key は必須です $access_key_id = '' ; // ここに Access Key ID を入力'; $secret_access_key = '' ; // 'ここに Secret Access Key を入力'; // RFC3986 形式で URL エンコードする関数 function urlencode_rfc3986( $str ) { return str_replace ( '%7E' , '~' , rawurlencode( $str )); } // 基本的なリクエストを作成します // - この部分は今まで通り $baseurl = 'http://ecs.amazonaws.jp/onca/xml' ; $params = array (); $params [ 'Service' ] = 'AWSECommerceService' ; $params [ 'AWSAccessKeyId' ] = $access_key_id ; $params [ 'Version' ] = '2009-03-31' ; $params [ 'Operation' ] = 'ItemSearch' ; // ← ItemSearch オペレーションの例 $params [ 'SearchIndex' ] = 'Books' ; $params [ 'Keywords' ] = $_POST [ 'kw' ]; // ← 文字コードは UTF-8 $params [ 'ResponseGroup' ] = 'Small,Images' ; # $params [ 'IdType' ] = 'ASIN' ; # $params [ 'ItemId' ] = '479801382X' ; // Timestamp パラメータを追加します // - 時間の表記は ISO8601 形式、タイムゾーンは UTC(GMT) $params [ 'Timestamp' ] = gmdate ( 'Y-m-d\TH:i:s\Z' ); // パラメータの順序を昇順に並び替えます ksort( $params ); // canonical string を作成します $canonical_string = '' ; foreach ( $params as $k => $v ) { $canonical_string .= '&' .urlencode_rfc3986( $k ). '=' .urlencode_rfc3986( $v ); } $canonical_string = substr ( $canonical_string , 1); // 署名を作成します // - 規定の文字列フォーマットを作成 // - HMAC-SHA256 を計算 // - BASE64 エンコード $parsed_url = parse_url ( $baseurl ); $string_to_sign = "GET\n{$parsed_url['host']}\n{$parsed_url['path']}\n{$canonical_string}" ; $signature = base64_encode (hash_hmac( 'sha256' , $string_to_sign , $secret_access_key , true)); // URL を作成します // - リクエストの末尾に署名を追加 $url = $baseurl . '?' . $canonical_string . '&Signature=' .urlencode_rfc3986( $signature ); # echo $url ; // ← この URL にアクセスすれば、API リクエストができます $response = file_get_contents ( $url ); $root = new SimpleXMLElement( $response ); foreach ( $root ->children() as $Items ) { if ( $Items ->getName() == 'Items' ) { break ; } } /* $parsed_xml = simplexml_load_string($response); $Image_URL = $parsed_xml->Items->Item->MediumImage->URL; $Title = $parsed_xml->Items->Item->ItemAttributes->Title; $Author = $parsed_xml->Items->Item->ItemAttributes->Author; $Creator = $parsed_xml->Items->Item->ItemAttributes->Creator; $Creator_Role = $parsed_xml->Items->Item->ItemAttributes->Creator['Role']; $Publ_date = $parsed_xml->Items->Item->ItemAttributes->PublicationDate; */ ?> <html> <head> <meta http-equiv= "Content-Type" content= "text/html; charset=utf-8" /> </head> <body> <?= $url ?> <hr /> <table> <? foreach ( $Items ->children() as $Item ) { if ( $Item ->getName() == 'Item' ) { ?> <tr> <td><a href= "http://amazon.co.jp/dp/<?= $Item->ASIN ?>" ><?= $Item ->ASIN ?></a> <td><img src= "<?= $Item->SmallImage->URL ?>" width= "<?= $Item->SmallImage->Width ?>" height= "<?= $Item->SmallImage->Height ?>" > <td><?= $Item ->ItemAttributes->Title ?> </tr> <? }} ?> </table> <?php } else { ?> <html> <head> <meta http-equiv= "Content-Type" content= "text/html; charset=utf-8" /> <title> </title> <body> <form method= "post" action= "amazon.php" > <table> <tr> <td>キーワード:</td> <td><input type= "text" name= "kw" /></td> </tr> <td></td> <td><input type= "submit" name= "submit" value= "送信" /></td> </tr> </table> <?php } ?> |
1234567890