ありがとう、たださん。
Amazon API認証のPROXYを書いたよ(AmazonのAPI認証導入はOSSに対する挑戦だよなぁ(4)) - ただのにっき(2009-06-19)ご提案いただいているニヤリ。
アプリ --(ASIN)→ PROXY --(ASIN+秘密キー)→ Amazon
の方法でしたら、ライセンス上問題となりませんので、対応につきご検討いただけますと幸いです。
というわけで、私も書きました。
Synopsis
すごくRESTful。とっても簡単。ASINが4534045220とすると、
- XML
- //api.dan.co.jp/asin/4534045220.xml
- YAML
- //api.dan.co.jp/asin/4534045220.yml
- JSONP
- //api.dan.co.jp/asin/4534045220/callback.name
後述の通りソースは全部公開するので、なるべく自分の鯖で動かして下さい。api.dan.co.jp でいつまでサービスを動かしておくかは例によって無保証です。
Ajax Demo:
HTML Source:
JS Source:
(function(d){ var $ = function(id){ return d.getElementById(id) }; var json2list = function(json){ if (typeof json !== 'object') { return; }else if( 'length' in json){ var ol = d.createElement('ol'); ol.start = 0; for (var i = 0, l = json.length; i < l ; i++){ var li = d.createElement('li'); li.appendChild( typeof(json[i]) === 'object' ? arguments.callee(json[i]) : d.createTextNode(json[i]) ); ol.appendChild(li); } return ol; }else{ var ul = d.createElement('ul'); ul.style.listStyleType = 'none'; var keys = []; for (var p in json) keys[keys.length] = p; keys.sort(); for (var i = 0, l = keys.length; i < l ; i++){ var p = keys[i]; var li = d.createElement('li'); li.appendChild(d.createTextNode(p + ': ')); li.appendChild( typeof(json[p]) === 'object' ? arguments.callee(json[p]) : d.createTextNode(json[p]) ); ul.appendChild(li); } return ul; } }; JSONP = { get:function(asin){ var u = '//api.dan.co.jp/asin/' + asin + '/JSONP.run'; var s = d.createElement('script'); s.charset = 'UTF-8'; s.id = s.src = u; d.body.appendChild(s); }, run:function(json){ /* console.log(json); */ $('amazon.attr').innerHTML = ''; if ('Error' in json){ $('amazon.attr').appendChild(json2list(json)); return; } $('amazon.link').href = '//www.amazon.co.jp/gp/product/' + json.ASIN + '?ie=UTF8&linkCode=as2tag=blogsofdankog-22'; if (json.Images){ $('amazon.img').src = json.Images.Primary.Medium.URL; }else{ $('amazon.img').src = '//ec1.images-amazon.com/' + 'images/G/09/nav2/dp/no-image-no-ciu._AA128_.gif'; } $('amazon.attr').appendChild(json2list(json)); } }; (function(f){ if (1 /*@cc_on -1 @*/){ /* good */ window.setTimeout(f, 100) }else{ /* evil */ window.attachEvent('onload', f) } })( function(){ JSONP.get($('asin').value); $('demo.src')[ d.body.innerText ? 'innerText' : 'textContent' ] = $('demo').innerHTML; } ); })(document);
Server Source(Perl)
なるべく api.dan.co.jp ではなく、自分の鯖で動かして下さいませ。
- CGIでもmod_perlでも動きます。
- キャッシュが効いている場合、特にチューニングしていないmod_perlでも150request/secぐらい出ました(@ api.dan.co.jp)
- awskeyは、httpdから読めて、かつGETリクエストで取れないところにおいて下さい。
- awskeyのフォーマットは
key: XXXXXXXXXXXXXXXXXXXX secret: YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
です。 - 2011年10月26日より、AssociateTagも必須になったようです。
- cache fileはhttpdから読めるところにおきます。
chmod 0666 /path/to/cache.db
- あとはcacheの寿命など、お好みに合わせて。
Enjoy!
Dan the Perl-Monging JavaScripting AWS poker
このブログにコメントするにはログインが必要です。
さんログアウト
この記事には許可ユーザしかコメントができません。