photohitoの写真ページのカメラ名の横にアマゾンへのリンクをつけるGreasemonkey
photohitoの写真ページのカメラ名の横にAmazonへのリンクをつけるぐりもんを書いてみました。Amazon A2SをJavaScriptから初めて触ってみましたが、RESTでデータ取得できるので思ってたより簡単でした。
http://svn.coderepos.org/share/lang/javascript/userscripts/photohito_camera_to_amazon.user.js
// ==UserScript== // @name add_amazonlink_photohito // @namespace http://d.hatena.ne.jp/Kiske/ // @include http://photohito.com/photo/* // ==/UserScript== (function(){ var amazonurl = "http://webservices.amazon.co.jp/onca/xml?Service=AWSECommerceService&SubscriptionId=1A6W41HQBZ85036N26R2"; var table = document.getElementById("data_table"); var thiscameraNode = table.childNodes[1].childNodes[9].childNodes[3].childNodes[1]; var thiscamera = encodeURIComponent(thiscameraNode.textContent); if(!GM_xmlhttpRequest) { alert("XML HTTPインスタンスの生成に失敗しました"); return false; } var amazonurlcamera = amazonurl + "&AssociateTag=absoluteplayi-22&Operation=ItemSearch&Keywords="+thiscamera+"&SearchIndex=Electronics&ResponseGroups=Small&MerchantId=All&BrowseNode=3371371"; GM_xmlhttpRequest( { method: 'GET', url: amazonurlcamera, headers: { "User-Agent": "Mozilla/4.0 (compatible) Greasemonkey/0.8", "Accept": "application/atom+xml,application/xml,text/xml", }, onload: function(response) { var resultxml = response.responseText.replace( /<\?xml version="1.0" encoding="UTF-8"\?>/, ''); try{ var resultdom = new XML(resultxml); }catch(e){ GM_log(e.toString()); } var amzns = new Namespace('http://webservices.amazon.com/AWSECommerceService/2005-10-05'); var detailpageurl = resultdom..amzns::Item.amzns::DetailPageURL; var gs = document.getElementById("data_table"); var cameranode = gs.childNodes[1].childNodes[9].childNodes[3]; var a = document.createElement("a"); a.href = detailpageurl[0].text(); var icon = document.createElement("img"); icon.src = "http://photohito.com/images/amazon-mini-icon.png"; icon.alt = "Amazonで購入"; a.appendChild(icon); cameranode.appendChild(a); } }); })();
レンズ名で探すやつも作ってみたんですが、検索Hit率があまりにも悪いので外しました。レンズはあんまり置いてないのかも。