Created
January 10, 2010 08:31
-
-
Save azu/273387 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// ==UserScript== | |
// @name Amazon Lowest Price Checker | |
// @namespace http://gigi-net.net | |
// @include http://www.amazon.co.jp/* | |
// ==/UserScript== | |
(function(){ | |
//価格を3ケタ区切りにする関数 | |
function SetPrice(price){ | |
var num = new String(price).replace(/,/g, ""); | |
while(num != (num = num.replace(/^(-?\d+)(\d{3})/, "$1,$2"))); | |
return num; | |
} | |
//価格を数値に変換 | |
function ConvertPrice(price){ | |
var result=""; | |
for(var i =0;i<6;i++){ | |
price = price.replace(/\D+/,"") | |
result =price; | |
} | |
return parseInt(result); | |
} | |
//APIURL定義 | |
var api_url ="http://api.kakaku.com/WebAPI/ItemSearch/Ver1.0/ItemSearch.aspx?ApiKey=b0572c65d75b8edf330bf88354b8d761"; | |
//商品ページかどうか判定 | |
a = document.getElementById("buyboxTable"); | |
if(a ==null){ | |
var flag =0; | |
}else{ | |
var flag =1; | |
} | |
if(flag ==1){ | |
//ロード中メッセージ表示 | |
var title =document.getElementsByTagName("h1"); | |
var check_lowest =document.createElement("div"); | |
check_lowest.innerHTML ="<img src='http://img.f.hatena.ne.jp/images/fotolife/g/gigi-net/20090421/20090421143419.gif?1240292104' style='vertical-align:middle'>価格.comから最低価格を読み込んでいます。"; | |
title[0].parentNode.appendChild(check_lowest); | |
//製品型番を取得 | |
var kataban =""; | |
try{ | |
var dom_kataban =document.getElementById("productDetailsDiv").childNodes[0]; | |
for(var i=0;i<dom_kataban.childNodes.length;i++){ | |
if(dom_kataban.childNodes[i].innerHTML.indexOf("メーカー型番") !=-1){ | |
kataban = dom_kataban.childNodes[i].innerHTML; | |
} | |
} | |
}catch(e){ | |
var kataban =""; | |
} | |
if(kataban !=""){ | |
kataban =kataban.replace(/<.*>/,""); | |
}else{ | |
check_lowest.innerHTML ="<b>Error:</b>商品の型番が取得できませんでした。"; | |
title[0].parentNode.appendChild(check_lowest); | |
} | |
//価格comAPIを用いて型番から最安値を取得 | |
xml_url =api_url +"&Keyword="+encodeURIComponent(kataban)+"&CategoryGroup=ALL&SortOrder=pricerank&HitNum=5"; | |
//Amazon.comの価格を取得 | |
var ap =0; | |
try{ | |
var amazon_price = document.getElementById("buyboxPriceBlock"); | |
amazon_price = amazon_price.getElementsByTagName("table")[0]; | |
amazon_price = amazon_price.getElementsByTagName("tbody")[0] | |
amazon_price = amazon_price.getElementsByTagName("tr"); | |
var table = amazon_price[0].getElementsByTagName("td"); | |
if(table[0].getElementsByTagName("b")[1].getAttribute("class") =="price"){ | |
ap = table[0].getElementsByTagName("b")[1].innerHTML; | |
}else if(table[0].getElementsByTagName("span")[0].getAttribute("class") =="price"){ | |
ap = table[0].getElementsByTagName("span")[0].innerHTML; | |
} | |
}catch(e){ | |
try{ | |
var ap =0; | |
var amazon_price = document.getElementById("priceBlock"); | |
amazon_price = amazon_price.getElementsByTagName("table")[0]; | |
amazon_price = amazon_price.getElementsByTagName("tbody")[0] | |
amazon_price = amazon_price.getElementsByTagName("tr"); | |
for(var i=0;i<amazon_price.length;i++){ | |
var table = amazon_price[i].getElementsByTagName("td"); | |
if(table[0].innerHTML.indexOf("価格") == 0){ | |
if(table[1].getElementsByTagName("b")[0].getAttribute("class") =="priceLarge"){ | |
ap = table[1].getElementsByTagName("b")[0].innerHTML; | |
}else if(table[1].getElementsByTagName("span")[0].getAttribute("class") =="priceLarge"){ | |
ap = table[1].getElementsByTagName("span")[0].innerHTML; | |
} | |
} | |
} | |
}catch(e){ | |
var ap =0; | |
} | |
} | |
ap = ConvertPrice(ap); | |
//価格表示関数 | |
function ShowPrice(x){ | |
var parser = new DOMParser(); | |
var xml = parser.parseFromString( x.responseText, "text/xml" ); | |
if(xml.childNodes[0].childNodes[0].textContent =="ItemNotFound"){ | |
check_lowest.innerHTML="<b>Error:</b>価格.comで該当商品が見つかりませんでした。"; | |
}else{ | |
var dom_price = xml.getElementsByTagName("ProductInfo")[0].getElementsByTagName("Item")[0].getElementsByTagName("LowestPrice"); | |
var pageurl = xml.getElementsByTagName("ProductInfo")[0].getElementsByTagName("Item")[0].getElementsByTagName("ItemPageUrl"); | |
price = dom_price[0].textContent; | |
var sa =ap-price; | |
check_lowest.innerHTML ="<b>最低価格:<span class='priceLarge'> ¥ "+SetPrice(price)+"</span></b>"; | |
if(sa>0&&ap!=0&&sa<100000){ | |
check_lowest.innerHTML += " <font size=3> Amazonより<span class='priceLarge'> ¥ "+SetPrice(sa)+"</span>安く買えます。</font>"; | |
} | |
check_lowest.innerHTML +="<font size=3><a target='_blank' href="+pageurl[0].textContent+">価格.comを見る</a></font>"; | |
check_lowest.style.fontSize ="18px"; | |
} | |
title[0].parentNode.appendChild(check_lowest); | |
} | |
//APIからXMLを読み込んで表示する。 | |
if(kataban !=""){ | |
GM_xmlhttpRequest({ | |
method:"GET", | |
url:xml_url, | |
onload:ShowPrice | |
}); | |
}; | |
//著作表示 | |
var powered =document.createElement("div"); | |
powered.innerHTML +=" <center>powered by <a href ='http://kakaku.com/'>価格.com</a></center>"; | |
document.body.appendChild(powered); | |
} | |
})(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment