AmazonWebServise AWSECommerceService ItemSearch

...
https://code.google.com/p/crypto-js/
http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/hmac-sha256.js
http://crypto-js.googlecode.com/svn/tags/3.0.2/build/components/enc-base64-min.js



http://docs.aws.amazon.com/AWSECommerceService/latest/DG/AnatomyOfaRESTRequest.html
http://docs.aws.amazon.com/AWSECommerceService/latest/DG/rest-signature.html

http://associates-amazon.s3.amazonaws.com/signed-requests/helper/index.html

http://www.ajaxtower.jp/ecs/
http://www.ajaxtower.jp/ecs/signature/
view source

JavaScript

function sha256(stringToSign, secretKey) {
  var hex = CryptoJS.HmacSHA256(stringToSign, secretKey);
  return hex.toString(CryptoJS.enc.Base64);
} 

function timestamp() {
    var date = new Date();
    var y = date.getUTCFullYear().toString();
    var m = (date.getUTCMonth() + 1).toString();
    var d = date.getUTCDate().toString();
    var h = date.getUTCHours().toString();
    var min = date.getUTCMinutes().toString();
    var s = date.getUTCSeconds().toString();

    m = zeroPlus(m);
    d = zeroPlus(d);
    h = zeroPlus(h);
    min = zeroPlus(min);
    s = zeroPlus(s);

    var date = y + "-" + m + "-" + d;
    var time = h + ":" + min + ":" + s;
    return date + "T" + time + "Z";
}

function zeroPlus(value){
  return ("0" + value).slice(-2);
}

function getAmazonXML(PublicKey, PrivateKey, AssociateTag, keyword) {
    var endPoint = 'ecs.amazonaws.jp' || 'webservices.amazon.com';
    var PublicKey = PublicKey;
    var PrivateKey = PrivateKey;
    var AssociateTag = AssociateTag;
    var keyword = keyword;
    keyword = encodeURIComponent(keyword);
    var parameters = [];
    parameters.push("AWSAccessKeyId=" + PublicKey);
//    parameters.push("ItemId=" + barcode);
//    parameters.push("Operation=ItemLookup");
    parameters.push("Operation=ItemSearch");
    parameters.push("Keywords=" + keyword);
    parameters.push("SearchIndex=Books");
    parameters.push("ItemPage=1");

    parameters.push("Service=AWSECommerceService");
    parameters.push("Timestamp=" + encodeURIComponent(timestamp()));
    parameters.push("Version=2011-08-01");
parameters.push("AssociateTag=" + AssociateTag);

    parameters.sort();
    var paramString = parameters.join('&');

    var signingKey = "GET\n" + endPoint + "\n" + "/onca/xml\n" + paramString

    var signature = sha256(signingKey,PrivateKey);
        signature = encodeURIComponent(signature);

    var amazonUrl =  "http://" + endPoint + "/onca/xml?" + paramString + "&Signature=" + signature;

    return amazonUrl;
    console.log(amazonUrl);
}

$(function(){
  $('#btn').on('click', function(){
    var PublicKey = $('#access_key').val();
    var PrivateKey = $('#secret_key').val();
    var AssociateTag = $('#associate_tag').val();
    var keyword = $('#keyword').val();
    var url = getAmazonXML(PublicKey, PrivateKey, AssociateTag, keyword);
    $('#url').attr('href', url).text(url);
    return false;
  });
/*
  $.get(url, function(d){
    console.log(d);
  });
*/
});


// localStorage
$('input').each(function(){
  var key = $(this).attr('name');
  var val = localStorage.getItem('aws-' + key);
  $(this).val(val);
});

$('input').on('keyup', function(){
  var key = $(this).attr('name');
  var val = $(this).val();
  localStorage.setItem('aws-' + key, val);
});

CSS

h2{
  font-size:48px;
  font-weight:bold;
}
form{
  margin:80px;
}
label{
  display:block;
}

span{
  display:inline-block;
  width:160px;
}

input{
  width:400px;
}

HTML

ページのソースを表示 : Ctrl+U , DevTools : F12

view-source:https://hi0a.com/demo/-js/js-aws-signature/

ABOUT

hi0a.com 「ひまアプリ」は無料で遊べるミニゲームや便利ツールを公開しています。

プログラミング言語の動作デモやWEBデザイン、ソースコード、フロントエンド等の開発者のための技術を公開しています。

必要な機能の関数をコピペ利用したり勉強に活用できます。

プログラムの動作サンプル結果は画面上部に出力表示されています。

環境:最新のブラウザ GoogleChrome / Windows / Android / iPhone 等の端末で動作確認しています。

画像素材や音素材は半分自作でフリー素材配布サイトも利用しています。LINK参照。

動く便利なものが好きなだけで技術自体に興味はないのでコードは汚いです。

途中放置や実験状態、仕様変更、API廃止等で動かないページもあります。