Basic functionality added'

This commit is contained in:
MichaelYick 2023-08-10 00:14:18 -05:00
parent fe78d17759
commit 4814d3a14f
4 changed files with 94 additions and 1 deletions

2
.gitignore vendored
View File

@ -2,4 +2,4 @@
nimcache/
nimblecache/
htmldocs/
bin/

View File

@ -0,0 +1,13 @@
# Package
version = "1.0.0"
author = "Michael Yick"
description = "Estimates how much money a piece of software makes on steam using information about its reviews."
license = "AGPL-3.0-only"
srcDir = "src"
bin = @["SteamMoneyEstimator"]
binDir = "bin"
# Dependencies
requires "nim >= 1.6.10"

1
nim.cfg Normal file
View File

@ -0,0 +1 @@
-d:release -d:ssl

View File

@ -0,0 +1,79 @@
import httpclient
import os
import htmlparser
import xmltree
import strutils
import re
import typetraits
var client = newHttpClient()
let steamURL = os.paramStr(1)
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
echo "Link: " & os.paramStr(1)
echo "Price: " & $price
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
echo "Estimated revenue (including steam cut): " & $estimatedRevenue