Skip to content

Instantly share code, notes, and snippets.

@kriswebdev
Last active August 9, 2020 14:37
Show Gist options
  • Save kriswebdev/e6a0e9e65ff8c601b87d to your computer and use it in GitHub Desktop.
Save kriswebdev/e6a0e9e65ff8c601b87d to your computer and use it in GitHub Desktop.
Better Tripadvisor: Precise ratings, website link, phone, google search (click Raw to install with e.g. Tampermonkey)
// ==UserScript==
// @name Better Tripadvisor: Precise ratings, website link, phone, google search
// @description Display the exact Tripadvisor note after the "bubbles"
// @namespace KrisWebDev
// @author KrisWebDev
// @include http://www.tripadvisor.tld/*
// @include https://www.tripadvisor.tld/*
// @version 1.5
// @grant GM_xmlhttpRequest
// @require http://code.jquery.com/jquery-2.1.4.min.js
// ==/UserScript==
this.$ = this.jQuery = jQuery.noConflict(true);
/* PRECISE RATINGS */
var coeff = 5;
var result = 0;
var sumReviews = 0;
var percentReviews = 0;
$(".reviews .row_count").each(function(index, val) {
//console.log($(this).text());
percentReviews = parseInt($(this).text().replace(/\s+/g, ''));
result += percentReviews*coeff--;
sumReviews += percentReviews;
});
if (sumReviews) {
result = (Math.round(result/sumReviews*10))/10;
$(".reviews .overallRating").text(result+" ");
}
/* HELPER FUNCTIONS */
function getHTTP(queryURL, handlerPassArg, handler) {
var http;
GM_xmlhttpRequest({
method: "GET",
url: queryURL,
timeout: 15000,
headers: {
Referer: document.URL
},
onreadystatechange: function(http) {
if (http.readyState == 4) {
if(http.status == 200) {
handler(http.responseText, handlerPassArg, queryURL);
}
http = null;
}
}
});
}
/* WEBSITE LINK, PHONE */
function appendGeneralInfo(response, jContainer, queryurl) {
var websiteURL = null;
var phoneNum = null;
var genInfoHTML = "";
if(phoneNum=response.match(/data-attr="phone"\s*value="([0-9 \+\(\)]+)"/))
genInfoHTML+='<div class="blEntry phone"><a class="ui_link" href="tel:'+phoneNum[1].replace(/ /g, '')+'" data-column="1"><span class="ui_icon phone"></span><span class="is-hidden-mobile detail">'+phoneNum[1]+'</span></a></div>';
if(websiteURL=response.match(/data-attr="website"\s*value="(https?:\/\/[^"]+)"/))
genInfoHTML+='<div class="is-hidden-mobile blEntry website ui_link " data-column="2" data-trackingkey=""><span class="ui_icon laptop detail"></span><a href="'+websiteURL[1].replace(/[\\\"'\x00-\x1F\x7F-\x9F]/g, '')+'" target="_blank"><span class="detail" style="color:#006699">Website</span></a></div>';
if (genInfoHTML)
jContainer.append(genInfoHTML);
}
/* GOOGLE SEARCH LINK */
var jBlRow=$("div.headerBL > .blRow");
if (jBlRow.length) {
var jHeader=$("h1#HEADING");
if(jHeader.length) {
var googleSearchHTML = "";
googleSearchHTML+='<div class="is-hidden-mobile blEntry website ui_link " data-column="2" data-trackingkey=""><span class="ui_icon laptop detail"></span><a href="https://www.google.com/search?ie=utf-8&q='+encodeURIComponent(jHeader.text())+'" target="_blank"><span class="detail" style="color:#006699">Google</span></a></div>';
jBlRow.append(googleSearchHTML);
}
var jUpdateListingAnchor=$("a[href^='/UpdateListing-']");
if (jUpdateListingAnchor.length)
getHTTP(jUpdateListingAnchor[0].href, jBlRow, appendGeneralInfo);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment