モノノフ日記

普通の日記です

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率があまりにも悪いので外しました。レンズはあんまり置いてないのかも。