SteamBadges/code.js

88 lines
2.4 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* Скрипт для парсинга значков Steam
* @version 1.0.0
* @license Unlicense
* @author Alexander Popov <iiiypuk@fastmail.fm>
*/
/**
* Получает данные из элемента `div.badge_row`
* @param {Array} value - div.badge_row
* @returns {Object}
*/
function getData(value) {
/*
* Badge Sctruct:
* id: int
* uri: str
* name: str
* dropLeft: int
*/
// check left cards
// для металлических карточек нет параметра 'карточек выпадет'
let cardsDropLeft = 0;
if (value[1].getElementsByClassName('progress_info_bold').length > 0) {
cardsDropsNumber = value[1].getElementsByClassName('progress_info_bold')[0].innerText.match(/\d/g);
if (cardsDropsNumber !== null) { cardsDropLeft = [0]; }
}
let badgeItem = {
id: parseInt(value[1].childNodes[1].href.split('/')[6]),
uri: value[1].childNodes[1].href,
// name: value[1].childNodes[3].childNodes[1].childNodes[3].childNodes[0].nodeValue.trim().replace(/[\r\n\t]/g, ''),
dropLeft: parseInt(cardsDropLeft),
};
// console.log(`${badgeItem.name} :: ${badgeItem.dropLeft}`);
return badgeItem;
}
/**
* Преобразовывает массив данных в JSON и возвращает к консоль
* @param {Array} badgesArray - массив данных о значках
*/
function exportJson(badgesArray) {
console.log(JSON.stringify(badgesArray));
}
/**
* Функция main()
*/
function getBadges() {
let badges = [];
let currentPage = 1;
// get total pages
const [baseURI, totalPages] = (function(element) {
return [
element[0].baseURI,
element[element.length - 1].text
];
})(document.getElementsByClassName('pagelink'));
while (currentPage <= totalPages) {
console.log(`Parse ${currentPage} page...`);
fetch(`${baseURI}?p=${currentPage}`)
.then((response) => { return response.text(); })
.then((html) => {
let parser = new DOMParser();
let doc = parser.parseFromString(html, 'text/html');
const collection = doc.getElementsByClassName('badge_row');
for (const value of Object.entries(collection)) {
badges.push(getData(value));
}
})
.catch((err) => console.warn('Something went wrong.', err));
currentPage++;
}
setTimeout(() => { exportJson(badges); }, 10000);
}
getBadges();