From 2c1c2dbf7ce24e1a422c856d1873ffc89c933c6c Mon Sep 17 00:00:00 2001 From: Michael Yick Date: Thu, 10 Aug 2023 22:50:11 -0500 Subject: [PATCH] List in $USD --- README.md | 13 +++-- src/SteamMoneyEstimator.nim | 105 ++++++++++++++++++++++++++++++++++-- 2 files changed, 109 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index 781b3ec..aea0508 100644 --- a/README.md +++ b/README.md @@ -4,8 +4,13 @@ Estimates how much money a piece of software makes on steam using information ab ## Usage -This will save a file locally along with printing the results: -`SteamMoneyEstimator true "https://store.steampowered.com/app/1895350/I_Wani_Hug_that_Gator/"` +`SteamMoneyEstimator {FORMAT} [URLS]` -This will simply output the results without saving a file locally -`SteamMoneyEstimator true "https://store.steampowered.com/app/1895350/I_Wani_Hug_that_Gator/"` +This will save a file locally +`SteamMoneyEstimator plain "https://store.steampowered.com/app/1895350/I_Wani_Hug_that_Gator/"` + +This will simply output the results to stdout +`SteamMoneyEstimator stdout "https://store.steampowered.com/app/1895350/I_Wani_Hug_that_Gator/"` + +Will output all urls data in a csv format +`SteamMoneyEstimator csv "https://store.steampowered.com/app/1895350/I_Wani_Hug_that_Gator/"` diff --git a/src/SteamMoneyEstimator.nim b/src/SteamMoneyEstimator.nim index faec222..3208710 100644 --- a/src/SteamMoneyEstimator.nim +++ b/src/SteamMoneyEstimator.nim @@ -6,9 +6,103 @@ import strutils import re var client = newHttpClient() -let save = parseBool(os.paramStr(1)) -let steamURL = os.paramStr(2) -let response = client.getContent(steamURL) +let save = os.paramStr(1) +if save == "csv": + writeFile("games.csv", "link,price,yearOfRelease,multiplier,reviewCount,estimatedSales,estimatedRevenue\n") +let commandLine = os.commandLineParams() +let steamURLS = commandLine[1..paramCount()-1] +for steamURL in steamURLS: + let response = client.getContent(steamURL) + + var html = htmlparser.parseHtml(response) + + var reviewCount: int + var price: float + var onSale: bool + var yearOfRelease: string + var multiplier: int + + for meta in html.findall("meta"): + case meta.attr("itemprop"): + of "reviewCount": + reviewCount = parseInt(meta.attr("content")) + of "price": + price = parseFloat(meta.attr("content")) + case meta.attr("property"): + of "og:title": + if re.find(meta.attr("content"), re"Save .[0-100]% on.*") == -1: + onSale = false + else: + onSale = true + + for date in html.findall("div"): + if date.attr("class") == "date": + yearOfRelease = date.innerText.split(" ")[2] + + ## https://vginsights.com/insights/article/how-to-estimate-steam-video-game-sales + case yearOfRelease: + of "2013": + multiplier = 79 + of "2014": + multiplier = 72 + of "2015": + multiplier = 62 + of "2016": + multiplier = 52 + of "2017": + multiplier = 43 + of "2018": + multiplier = 38 + of "2019": + multiplier = 36 + of "2020": + multiplier = 31 + of "2021": + multiplier = 31 + of "2022": ## From here onward, multiplier are made up based off instinct alone + multiplier = 31 + of "2023": + multiplier = 31 + + if onSale: + let steamID = steamURL.split("/")[4] + let response = client.getContent("https://store.steampowered.com/widget/" & steamID) + let widget = htmlparser.parseHTML(response) + for element in widget.findall("div"): + if element.attr("class") == "discount_original_price": + price = element.innerText.replace("$").parseFloat + break + + let estimatedSales = multiplier*reviewCount + let estimatedRevenue = (toFloat(estimatedSales)*price)*0.70 + + case save: + of "plain": + for name in html.findall("span"): + if name.attr("itemprop") == "name": + var output = """ + Link: $1 + Price: $2 + Year of Release: $3 + Year Multiplier (from VG Insights): $4 + Reviews: : $5 + Estimated Sales: $6 + Estimated revenue (including steam cut): $7""" % [steamURL, $price, yearOfRelease, $multiplier, $reviewCount, $estimatedSales, $estimatedRevenue] + + writeFile(name.innerText.replace("/"), output) + of "csv": + let f = open("games.csv", fmAppend) + var output = """$1,$2,$3,$4,$5,$6,$7""" % [steamURL, $price, yearOfRelease, $multiplier, $reviewCount, $estimatedSales, $estimatedRevenue] + f.writeLine(output) + f.close() + of "stdout": + echo "Link: " & steamURL + echo "Price: " & $price + echo "Year of Release: " & yearOfRelease + echo "Year Multiplier (from VG Insights): " & $multiplier + echo "Reviews: " & $reviewCount + echo "Estimated Sales: " & $estimatedSales + echo "Estimated revenue (including steam cut): " & $estimatedRevenue var html = htmlparser.parseHtml(response) @@ -69,13 +163,13 @@ if onSale: price = element.innerText.replace("$").parseFloat break echo "Link: " & os.paramStr(2) -echo "Price: " & $price +echo "Price: $" & ((price.formatFloat(ffDecimal, 2)).insertSep(',')).replace(",.", ".") & " (USD)" echo "Year of Release: " & yearOfRelease echo "Year Multiplier (from VG Insights): " & $multiplier echo "Reviews: " & $reviewCount let estimatedSales = multiplier*reviewCount echo "Estimated Sales: " & $estimatedSales -let estimatedRevenue = (toFloat(estimatedSales)*price)*0.70 +let estimatedRevenue = "$" & (((toFloat(estimatedSales)*price*0.70).formatFloat(ffDecimal, 2)).insertSep(',')).replace(",.", ".") & " (USD)" echo "Estimated revenue (including steam cut): " & $estimatedRevenue if save: @@ -91,3 +185,4 @@ Estimated Sales: $6 Estimated revenue (including steam cut): $7""" % [os.paramStr(2), $price, yearOfRelease, $multiplier, $reviewCount, $estimatedSales, $estimatedRevenue] writeFile(name.innerText, output) +>>>>>>> 3577e654b3ba336331654b056cc794678a8c2f56