Amazon and Google Integration

By Stanley Phang Last update Oct 23, 2009 — Installed 1,073 times.
// ==UserScript==
// @name           Amazon and Google Integration
// @namespace      http://www.thumbedthrough.com/
// @description    Add useful information to Amazon related pages in Google results and more.
// @include        http://www.google.com/*
// ==/UserScript==
function getAmazonHrefInGoogleResults() {
    var amazonResults = [];
    // get all the search result links
    resultLinks = document.getElementsByClassName('l');
    for (var i = 0; i < resultLinks.length; i++) {
        var item = resultLinks[i];
        if (item.hostname.match(/amazon.com/)) {
            amazonResults.push(item);    }
    }
    return amazonResults;
}
function getASINfromUrl(href) {
  var asin = href.match(/\/dp\/(\w{10})/i);
  if (!asin) { asin = href.match(/\/gp\/product\/(\w{10})/i); }
  if (!asin) { asin = href.match(/keywords=(\w{10})/i); }
  if (!asin) { return null; }
  return asin[1].toUpperCase();
}
var amazonResults = getAmazonHrefInGoogleResults();
//alert(amazonResults.length); // works
//for ( var i =0; i < amazonResults.length; i++) {
for ( var i =0; i < 1; i++) {
    // right now, only show for one result item
    link = amazonResults[i];
    asin = getASINfromUrl(link.href);
    if (asin) {
    GM_xmlhttpRequest({
    method: "GET", url: link.href,
    onload: function(x){
        var aNode = document.createElement('div');
        aNode.innerHTML = x.responseText;
        var revuNrs = document.evaluate("//div[@id='customerReviews']//*[@class='tiny'][@align='right']",aNode,null,XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE,null);
        var avg = 0.0, reviews = 0;
        for (var r=0; r<5; r++) {
            var n = revuNrs.snapshotItem(r).firstChild.textContent.match(/[0-9,]+/)[0].replace(/,/,"") - 0;
            avg += (5-r) * n, reviews += n;   }
        avg /= reviews;
        color = rateColor(avg);
        //alert(avg);
        asin = getASINfromUrl(link.href);
        link.setAttribute('onmousedown',"");
        link.href = "http://www.amazon.com/gp/product/" + asin + "?ie=UTF8&tag=craetive-"
                + "20&linkCode=xm2&camp=1789&creative=9325&creativeASIN=" + asin;
        //var price = aNode.getElementsByClassName('priceLarge')[0].textContent.match(/([0-9.]+)/)[1];
        if (color) {
            rating = document.createElement('span');
            //"</span><span style='font-weight=bold;color:red'> Price: $" + (price||"Unknow") + 
            rating.innerHTML = reviews.toFixed(0) + " customers rated at </span>"+ "<span style='font-weight:bold;color:#" + color + "'>" + avg.toFixed(2) + "</span>" + "<br/>";
            link.parentNode.insertBefore(rating,link);
        }
}});}}
function rateColor(rate) {
    var red = Math.floor((rate-1)*(0x4A-0xFF)/4 + 0xFF).toString(16);
    var yellow = Math.floor((rate-1)/4 * 0xFF).toString(16);
    if (yellow == '0') yellow = '00';
    return red + yellow + '00'; }