UNPKG

what-to-play

Version:

Score aggregator for lists of games

61 lines 2.27 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getData = void 0; const cheerio = require("cheerio"); const node_fetch_1 = require("node-fetch"); const querystring = require("querystring"); const util_1 = require("./util"); const search_1 = require("./search"); function absoluteUrl(relativeUrl) { return "https://www.gog.com" + relativeUrl; } async function getData(game) { const searchData = await search(game); if (!searchData) return undefined; const { name, url } = searchData; // get the score from the url because that's more reliable and accurate const html = await (0, node_fetch_1.default)(url).then(res => res.text()); const gamePage = cheerio.load(html); const scoreText = gamePage(".productcard-rating") .first() .find(".productcard-rating__score") .text(); const score = scoreText ? (0, util_1.nonNaN)(parseFloat(scoreText.split("/")[0]), undefined) : undefined; // some pages don't have a score due to there not being enough ratings return { name, score, url, }; } exports.getData = getData; async function search(game) { const gameStr = querystring.escape(game); const gogDataUrl = `https://www.gog.com/games/ajax/filtered?limit=10&search=${gameStr}`; const searchDataMaybeInvalid = await (0, node_fetch_1.default)(gogDataUrl) .then(res => res.json()); if (!(searchDataMaybeInvalid === null || searchDataMaybeInvalid === void 0 ? void 0 : searchDataMaybeInvalid.products)) (0, util_1.bug)(); const searchData = searchDataMaybeInvalid; for (const product of searchData.products) { if (!product) return (0, util_1.bug)(); if (typeof product.title !== "string") (0, util_1.bug)(); if (typeof product.url !== "string") (0, util_1.bug)(); } // find best match const bestResult = (0, search_1.closestSearchResult)(game, searchData.products, searchResult => searchResult.title.toLowerCase()); if (!bestResult) return undefined; const url = absoluteUrl(bestResult.url); const name = bestResult.title; return { name, url, }; } //# sourceMappingURL=gog.js.map