Skip to content

Instantly share code, notes, and snippets.

@tridungle
Created May 11, 2021 08:03
Show Gist options
  • Save tridungle/67e213cdea98d89d3097845d9fddc3d1 to your computer and use it in GitHub Desktop.
Save tridungle/67e213cdea98d89d3097845d9fddc3d1 to your computer and use it in GitHub Desktop.
function getPageType() {
var path = window.location.pathname;
if (path.split('-')[0] == "/Hotel_Review") { return "search"; }
if (path.split('-')[0] == "/Hotels") { return "details"; }
return "unrecognized";
}
function get_location_name() {
var PT = getPageType();
if (PT === "details") {
if(window.geoName)
return window.geoName;
else
return "no_location_found";
}
if (PT === "search") {
return $("[property='v:locality']").eq(0).text();
}
return '';
}
function get_checkin() {
try {
var checkin = window.ta.widgets.calendar.getPageInDate();
}catch(err) {
return "no_checkin_date_found";
}
if(checkin)
return convertDateToString(checkin);
else
return "no_checkin_date_found";
}
function get_checkout() {
try {
var checkout = window.ta.widgets.calendar.getPageOutDate();
}catch(err){
return "no_checkout_date_found";
}
if(checkout)
return convertDateToString(checkout);
else
return "no_checkout_date_found";
}
function get_currency() {
var docdomain = document.domain.split('.');
var domain = docdomain[docdomain.length - 1];
if ($('#CURRENCYPOP .link').length) {
return $.trim(
$('#CURRENCYPOP .link').text()
);
}
if (domain == "uk") {
return "GBP";
} else if (domain == "it"
|| domain == "fr"
|| domain == "es"
|| domain == "de"
|| domain == "nl"
|| domain == "ie"
|| domain == "gr") {
return "EUR";
}
return "USD";
}
function is_price_display_per_night() {
return true;
}
function get_lang() {
return window.bingMapsLang;
}
function get_page_num() {
var num;
$('#ACCOM_OVERVIEW .deckTools .pagination .pageNumbers').each(function () {
$this = $(this);
num = $.trim($this.find('span.current').text());
});
if(num)
return num;
else
return "no_page_number_found";
}
var marker = false;
function execute() {
var currency = get_currency();
var checkin = get_checkin();
var checkout = get_checkout();
var location = get_location_name();
var language = get_lang();
var ea = 'tripadvisor';
var pdpn = is_price_display_per_night();
var host_name = window.location.host;
var page_num = get_page_num();
var d = new Date();
var datestr = d.getFullYear() + "-" + ("0" + (d.getMonth() + 1)).slice(-2) + "-" + ("0" + d.getDate()).slice(-2);
var dtime = datestr + " " + d.getHours() + ":" + d.getMinutes() + ":" + d.getMinutes(); // "2014-12-08 11:37:25"
var hotelsArrAll = [];
var hotelObj = {};
$('#ACCOM_OVERVIEW .listing').each(function () {
$this = $(this);
id1 = $this.attr('data-locationid');
name = $.trim($this.find('#property_'+id1).text());
var abc = $.trim($this.find('.price').text()).split('*');
price = abc[0];
partner = $.trim($this.find('.partnerImg img').attr('alt'));
var compHotelObj = {}
$this.find('.hasPartner .textLinks .provider').each(function () {
$this2 = $(this);
if($.trim($this2.find('span.providerName').text()).toLowerCase() != "")
compHotelObj[$.trim($this2.find('span.providerName').text()).toLowerCase()] = $.trim($this2.find('.js_buildProviderRHS .lowestPrice').attr('title'));
});
hotelObj = {
id: id1,
n: name,
p: price,
cp: partner,
ch: compHotelObj
};
hotelsArrAll.push(hotelObj);
});
try {
if(hotelsArrAll && hotelsArrAll[0] && hotelsArrAll[0].p && hotelsArrAll[0].p != 0){
var args_post = {
dt: dtime,
ci: checkin,
co: checkout,
lo: location,
cu: currency,
ea: ea,
pdpn: pdpn,
h: hotelsArrAll,
pn: page_num,
hn: host_name
};
//RANK INSERTION
/* for(var key in args_post.h){
if(args_post.h.hasOwnProperty(key)){
args_post.h[key].rank = parseInt(key) + 1;
var indx = 1;
var ArrAll = [];
for(var key2 in args_post.h[key].ch){
if(args_post.h[key].ch.hasOwnProperty(key2)){
obj = {
name: key2,
price: args_post.h[key].ch[key2],
rank: indx
};
ArrAll.push(obj);
indx++;
}
}
args_post.h[key].ch = ArrAll;
}
} */
var args_final = {
namespace: "etb",
source: ea,
page: "search",
contents: btoa(unescape(encodeURIComponent(JSON.stringify(args_post)))),
date: datestr
};
var args_arr = [];
args_arr.push(args_final);
if (window.console) {
console.debug(args_post);
}
$.ajax({
type: 'POST',
url: 'http://172.16.43.109/dts/s/a/n',
crossDomain: true,
data: btoa(unescape(encodeURIComponent(JSON.stringify(args_arr)))),
dataType: 'json',
async: true,
cache: false,
timeout: 5000,
success: function() {
marker=true;
var msg = "!!! SUCCESSS from myscript !!!\nSuccessfully submitted to PDT: " + hotelsArrAll.length + " hotels for " +
location + ", " + checkin + " - " + checkout + ".";
$("body").prepend("<div id='crawler'>" + msg + "</div>");
$("#crawler-debug").append(" | SUCCESSS");
},
error: function(err) {
var msg = "!!! ERROR !!!\nError submitting to PDT: " + hotelsArrAll.length + " hotels for " +
location + ", " + checkin + " - " + checkout + ".\nError: " + err.statusText;
$("body").prepend("<div id='crawler'>" + msg + "</div>");
$("#crawler-debug").append(" | ERROR");
}
});
} else {
var msg = "!!! TRY AGAIN !!!\nPrices not found, skipping submitting to PDT: " + hotelsArrAll.length + " hotels for " +
location + ", " + checkin + " - " + checkout + ".";
$("#crawler-debug").append(" | TRY AGAIN");
}
} catch(err) {
console.log(err);
$("#crawler-debug").append(" | "+err);
}
}
function initJQuery() {
var theNewScript = document.createElement("script");
theNewScript.type = "text/javascript";
theNewScript.src = "http://code.jquery.com/jquery-1.11.2.min.js";
document.getElementsByTagName("head")[0].appendChild(theNewScript);
var waitForLoad = function () {
if (typeof jQuery != "undefined") {
init();
} else {
window.setTimeout(waitForLoad, 1000);
}
};
window.setTimeout(waitForLoad, 1000);
}
function init() {
$("body").prepend("<hr style='border: 1px solid !important; z-index:5500'><div id='crawler-debug'></div>");
execute();
var hcs_timer = setInterval(function() {
/* if($("#js_itemlist_error_pos1").text().contains(nsObject.validatedArgs.no_results_text)){
marker=true;
$("#crawler-debug").append(" | no-results");
$("body").prepend("<div id='crawler'>!!! NORESULTS !!!</div>");
} */
if(marker == false) {
execute();
} else
clearInterval(hcs_timer);
},2500);
}
(function() {
initJQuery();
}) ();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment