From f03950b78054df110a104420d1f6f0b9f85fe4b2 Mon Sep 17 00:00:00 2001 From: Kevin Novak Date: Fri, 18 Oct 2019 12:05:46 -0400 Subject: [PATCH] Add bundles to steam search tabler (#11) --- public/scripts/index.js | 4 +++- services/steam-scraper.js | 31 +++++++++++++++++++++---------- 2 files changed, 24 insertions(+), 11 deletions(-) diff --git a/public/scripts/index.js b/public/scripts/index.js index bef324e..35890c9 100644 --- a/public/scripts/index.js +++ b/public/scripts/index.js @@ -159,7 +159,9 @@ function createMarkdownTable(searchData) { let reviews = extractNumberFromPercent(app.reviewsPercent) || app.reviewsPercent || ""; let reviewsCount = app.reviewsCount || ""; - result += `| ${platform} | [${title}](${link}) | ${price} | ${percentOff} | ${reviews} | ${reviewsCount} |` + NEW_LINE; + let bundlePrefix = app.type == "BUNDLE" ? "**Bundle** - " : ""; + + result += `| ${platform} | ${bundlePrefix}[${title}](${link}) | ${price} | ${percentOff} | ${reviews} | ${reviewsCount} |` + NEW_LINE; } return result; diff --git a/services/steam-scraper.js b/services/steam-scraper.js index 6c5a31a..ef0b07e 100644 --- a/services/steam-scraper.js +++ b/services/steam-scraper.js @@ -39,7 +39,7 @@ async function getSearchPageData(searchUrl) { let searchPageHtml = await _rp({ url: searchUrl }); let $ = _cheerio.load(searchPageHtml); - let searchResults = Array.from($('#search_resultsRows > a[href*="\/app\/"].search_result_row')); + let searchResults = Array.from($('#search_resultsRows > a.search_result_row')); let searchPageData = []; for (var searchResult of searchResults) { @@ -91,6 +91,7 @@ async function getGameDataFromSearchResult(searchResult) { let title = ""; let link = ""; + let type = "UNKNOWN"; let price = ""; let discounted = false; let originalPrice = ""; @@ -101,27 +102,37 @@ async function getGameDataFromSearchResult(searchResult) { title = $('div.search_name > span.title').text().trim(); link = stripQueryString(searchResult.attribs.href); + + if (link.includes('/app/')) { + type = "APP"; + } else if (link.includes('/bundle/')) { + type = "BUNDLE"; + } + price = $('div.search_price').clone().children().remove().end().text().trim(); originalPrice = $('div.search_price > span > strike').text().trim(); percentOff = extractPercent($('div.search_discount > span').text().trim()); - let reviewsSummary = $('div.search_reviewscore > span.search_review_summary').attr('data-tooltip-html'); - - if (reviewsSummary) { - reviewsSummary = reviewsSummary.trim(); - reviewsPercent = extractPercent(reviewsSummary); - reviewsCount = extractReviewsCount(reviewsSummary).replace(/,/g, ''); - } - if (originalPrice && percentOff) { discounted = true; } - headsets = await getHeadsetsFromLink(link); + if (type == "APP") { + let reviewsSummary = $('div.search_reviewscore > span.search_review_summary').attr('data-tooltip-html'); + + if (reviewsSummary) { + reviewsSummary = reviewsSummary.trim(); + reviewsPercent = extractPercent(reviewsSummary); + reviewsCount = extractReviewsCount(reviewsSummary).replace(/,/g, ''); + } + + headsets = await getHeadsetsFromLink(link); + } return { title, link, + type, originalPrice, discounted, price,