sk0r/sk0r.js

98 lines
4.2 KiB
JavaScript

const Nightmare = require('nightmare')
const nightmare = Nightmare({ show: true })
var hltv_url = "https://hltv.org";
nightmare
.goto(hltv_url)
.wait("span[data-livescore-current-map-score='']")
.wait(2000)
.evaluate(function(hltv_url) {
var match_rows = document.querySelectorAll("div.teamrows");
var matches = [];
for(var i = 0; i < match_rows.length; i++) {
var match_row = match_rows[i];
var team_rows = match_row.children;
var parent = match_row.parentElement;
var grandparent = match_row.parentElement.parentElement;
var sibling = match_row.nextElementSibling;
// if (grandparent.className === "col-box a-reset") { continue; }
// since the VOD boxes are always at the end we can just break
if (grandparent.className === "col-box a-reset") { break; }
var event_name;
var start_time;
var link;
var stars;
var lan;
var team_names = [];
var team_countries = [];
var current_scores = [];
var maps_won = [];
for (var j = 0; j < team_rows.length; j++){
var team_row = team_rows[j];
if (team_row.className.includes("teamrow")) {
var flag_el = team_row.getElementsByClassName("flag")[0];
var team_el = team_row.getElementsByClassName("team")[0];
team_countries.push(flag_el.getAttribute("title"));
team_names.push(team_el.innerText);
}
}
if (grandparent.className.includes("hotmatch-box")) {
stars = parent.getAttribute("stars");
lan = parent.getAttribute("lan");
link = grandparent.getAttribute("href");
event_name = grandparent.getAttribute("title")
start_time = "LIVE"
} else if (grandparent.className.includes("col-box-con result-box")) {
stars = grandparent.getAttribute("stars");
lan = grandparent.getAttribute("lan");
link = grandparent.getAttribute("href");
event_name = parent.previousElementSibling.getAttribute("title");
start_time = "OVER"
}
if (sibling.className === "twoRowExtra") {
score_rows = sibling.children;
for (var j = 0; j < score_rows.length; j++) {
var score_row = score_rows[j];
if (score_row.className === "livescore twoRowExtraRow") {
var score_el = score_row.querySelector("[data-livescore-current-map-score='']");
var maps_won_el = score_row.querySelector("[data-livescore-maps-won-for='']");
current_scores.push(score_el.innerText);
maps_won.push(maps_won_el.innerText);
} else if (score_row.className.includes("twoRowExtraRow won")
|| score_row.className.includes("twoRowExtraRow lost")) {
maps_won.push(score_row.innerText);
}
}
} else if (sibling.className === "middleExtra") {
start_time = sibling.getAttribute("data-unix");
}
link = hltv_url + link;
matches.push({"event_name": event_name,
"start_time": start_time,
"link": link,
"stars": stars,
"lan": lan,
"team_names": team_names,
"team_countries": team_countries,
"current_scores": current_scores,
"maps_won": maps_won});
}
return JSON.stringify(matches);
}, hltv_url)
.end()
.then(m => console.log(m))
.then(nightmare.end())
.catch(error => {
console.error(error)
});