Last active
December 27, 2018 18:52
-
-
Save reteps/da2bf4ae147f74f025012b929874de94 to your computer and use it in GitHub Desktop.
This file contains 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 Estately + Zillow Plugin | |
// @namespace http://tampermonkey.net/ | |
// @version 0.1.1 | |
// @description Plugin | |
// @author You | |
// @match https://www.estately.com/* | |
// @grant none | |
// @run-at document-end | |
// @require https://code.jquery.com/jquery-3.3.1.min.js | |
// ==/UserScript== | |
function run() { | |
'use strict'; | |
const Http = new XMLHttpRequest(); | |
var parser = new DOMParser(); | |
var houses = JSON.parse(xpath("/html/head/script[14]").innerText)["@graph"]; | |
var provider = "https://api.allorigins.ml/get?url="; | |
let markers = document.querySelectorAll(".map-marker"); | |
var labels = document.querySelectorAll(".result-item"); | |
var numHouses = houses.length; | |
var styleText = ""; | |
if (markers.length != labels.length) { | |
numHouses = 0; | |
alert(`the # of markers is ${markers.length} and the # of houses listed is ${houses.length}. ERROR`); | |
} | |
console.log("houses received by DATA:",houses.length / 2); | |
for (var i=0; i<numHouses; i+=2) { | |
var house = houses[i].address; | |
var adjustedIndex = Math.floor(i / 2); | |
var houseMarker = markers[adjustedIndex]; | |
var houseLabel = labels[adjustedIndex]; | |
console.log(adjustedIndex,houseMarker,houseLabel); | |
var price = parseFloat(houses[i+1].offers.price); | |
var uri = `zws-id=X1-ZWz1fvm3ocr9jf_4rdd9&address=${house.streetAddress}&citystatezip=${house.postalCode}`; | |
var url = "https://www.zillow.com/webservice/GetDeepSearchResults.htm?" + uri; | |
console.log("Price:" + price); | |
styleText += modifyHouseOnPage(houseMarker, houseLabel, url, price) | |
} | |
}; | |
function addStyle(styleText) { | |
console.log("Style:" + styleText); | |
var head = document.head || document.getElementsByTagName('head')[0], style = document.createElement('style'); | |
style = document.createElement('style'); | |
style.type = 'text/css'; | |
if (style.styleSheet){ | |
style.styleSheet.cssText = styleText; | |
} else { | |
style.appendChild(document.createTextNode(styleText)); | |
} | |
head.appendChild(style); | |
} | |
function modifyHouseOnPage(houseMarker, houseLabel, url, price) { | |
let goodThreshold = 72; | |
let greatThreshold = 60; | |
let uniqueLabelTag = houseLabel.classList[3] | |
var style = ""; | |
$.getJSON('https://api.allorigins.ml/get?url=' + encodeURIComponent(url) + '&callback=?', function(data){ | |
let zpid = data.contents.split("<zpid>",-1)[1].split("</zpid>",-1)[0]; | |
let url = data.contents.split("<homedetails>",-1)[1].split("</homedetails>",-1)[0]; | |
console.log("ZPID:" + zpid); | |
console.log("URL:" + url); | |
if (zpid != undefined) { | |
var zestURL = `https://www.zillow.com/webservice/GetZestimate.htm?zws-id=X1-ZWz1fvm3ocr9jf_4rdd9&zpid=${zpid}&rentzestimate=true` | |
console.log(zestURL); | |
$.getJSON('https://api.allorigins.ml/get?url=' + encodeURIComponent(zestURL) + '&callback=?', function(data){ | |
let zestimate = data.contents.split("<rentzestimate>",-1)[1].split("</amount>",-1)[0].replace("<amount currency=\"USD\">","",-1); | |
console.log("zestimate:" + zestimate); | |
let content = `<a href="${url}">${zestimate}</a>` | |
let score = price / zestimate; | |
console.log("score:" + score); | |
var color = "" | |
// 10000 / 500 = 20 | |
if (score < greatThreshold) { | |
color = "green"; | |
} else if (score < goodThreshold) { | |
color = "yellow"; | |
} else { | |
color = "red"; | |
} | |
document.querySelector(`.${houseLabel.classList[3]}`).href = url; | |
style += ` | |
#${houseMarker.id} { | |
background-color: ${color} !important; | |
} | |
.${houseLabel.classList[3]} .result-price::after { | |
content: " $${zestimate}" !important; | |
} | |
` | |
addStyle(style); | |
}); | |
} else { | |
console.log("error"); | |
} | |
}); | |
} | |
function xpath(path) { | |
return document.evaluate(path, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; | |
} | |
window.addEventListener ("load", run); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment