what-to-play
Version:
Score aggregator for lists of games
61 lines • 2.27 kB
JavaScript
;
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