Compare commits

..

No commits in common. "de9ed5196897766d57e75818a381f9025849b479" and "9700444420e5558cc0e90a34bdd65467fa721075" have entirely different histories.

66
code.js
View File

@ -1,39 +1,36 @@
/** /**
* Скрипт для парсинга значков Steam * Скрипт для парсинга значков Steam
* @version 1.0.0 * @version 0.1.0
* @license Unlicense * @license Unlicense
* @author Alexander Popov <iiiypuk@fastmail.fm> * @author Alexander Popov <iiiypuk@fastmail.fm>
*/ */
/** /**
* Получает данные из элемента `div.badge_row` * Получает данные из элемента `div.badge_row`
* @param {Array} value - div.badge_row * @param {DOM} value - div.badge_row.
* @returns {Object} * @returns {Object}
*/ */
function getData(value) { function getData(value) {
/* /*
* Sctruct of Badge * Badge Sctruct:
* id: int - steam app id * id: int
* url: str - game url in store * uri: str
* card_url: str - card page url * name: str
* name: str - steam app name * dropLeft: int
* dropLeft: int - cards left drops
*/ */
// check left cards // check left cards
// для карточек, у которых нет параметра 'карточек выпадет' // для металлических карточек нет параметра 'карточек выпадет'
let cardsDropLeft = 0; let cardsDropLeft = 0;
if (value.getElementsByClassName('progress_info_bold').length > 0) { if (value.getElementsByClassName('progress_info_bold')[0]) {
cardsDropsNumber = value.getElementsByClassName('progress_info_bold')[0].innerText.match(/\d/g); cardsDropLeft = value.getElementsByClassName('progress_info_bold')[0].match(/\d/g);
if (cardsDropsNumber !== null) { cardsDropLeft = [0]; }
} }
let badgeItem = { let badgeItem = {
id: parseInt(value.childNodes[1].href.split('/')[6]), id: value.childNodes[1].href.split('/')[6],
url: `https://store.steampowered.com/app/${value.childNodes[1].href.split('/')[6]}/`, uri: value.childNodes[1].href,
card_url: value.childNodes[1].href, name: value.childNodes[3].childNodes[1].childNodes[3].childNodes[0].nodeValue.replace(/[\r\n\t]/g, ''),
name: value.getElementsByClassName('badge_title')[0].childNodes[0].textContent.replace(/[\r\n\t]/g, '').trim(), dropLeft: cardsDropLeft,
dropLeft: parseInt(cardsDropLeft),
}; };
return badgeItem; return badgeItem;
@ -41,14 +38,10 @@ function getData(value) {
/** /**
* Преобразовывает массив данных в JSON и возвращает к консоль * Преобразовывает массив данных в JSON и возвращает к консоль
* @param {Array} badgesArray - массив данных о значках * @param {Array} badgesArray - массив данных о значках.
*/ */
function exportJson(badgesArray) { function exportJson(badgesArray) {
const byteSize = str => new Blob([str]).size; console.log(JSON.stringify(badgesArray));
json = JSON.stringify(badgesArray);
console.log(json);
console.log(`Size: ${byteSize(json)} bytes.`)
} }
/** /**
@ -56,34 +49,13 @@ function exportJson(badgesArray) {
*/ */
function getBadges() { function getBadges() {
let badges = []; let badges = [];
let currentPage = 1; const collection = document.getElementsByClassName('badge_row');
// get total pages
const [baseURI, totalPages] = (function(element) {
return [
element[0].baseURI,
element[element.length - 1].text
];
})(document.getElementsByClassName('pagelink'));
while (currentPage <= totalPages) {
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)) { for (const value of Object.entries(collection)) {
badges.push(getData(value[1])); badges.push(getData(value));
}
})
.catch((err) => console.warn('Something went wrong.', err));
currentPage++;
} }
setTimeout(() => { exportJson(badges); }, 10000); // FIX IT exportJson(badges);
} }
getBadges(); getBadges();