Raised This Month: $12 Target: $400
 3% 

What is your Steam worth?


Post New Thread Reply   
 
Thread Tools Display Modes
Swixel
Senior Member
Join Date: Jul 2010
Location: Sydney, Australia
Old 04-03-2012 , 19:29   Re: What is your Steam worth?
Reply With Quote #21

Yeah, I killed my hosting for that site sometime late last year.

The code you want is below ... it's ugly. Asherkin has the code I had hosted, but anyway, woo, hacky crap.

Code:
# -*- coding: utf-8 -*-
#/usr/bin/env python

""" Download the source of 
https://store.steampowered.com/account, save it as a file,
import this class.  Then load the file.

Note: This class is capable of storing multiple users,
so watch your RAM.

e.g.

    from steambreakdown import SteamBreakdown
    SB = SteamBreakdown()
    SB.newuser('alias', '/path/to/file')
    SB.saveHTML('alias','/path/to/output') # Saves to /path/to/output
    SB.sidHTMLO('alias','/out/dir/') # Saves to /out/dir/64bitsteamid
    SB.sidHTMLO('alias','/out/dir/',True) # Saves to /out/dir/64bitsteamid, prints SteamID


Many bugs found anf fixed due to their being encountered by:
    AzuiSleet, Asherkin, DarthNinja, and ChrisFPS.

"""

__version__ = '0.0.2'

from BeautifulSoup import BeautifulSoup
import os
import codecs
import datetime

# -- TODO: Graphing
#import numpy as np
#import matplotlib.mlab as mlab
#import matplotlib.pyplot as plt

# Define this
months = ['','Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec']

class SteamBreakdown:

    def __init__(self):
        self.users = {} # stored in 'alias':{'filename': filename,'data'}

    def __dcheck(self,alias,key,d,m,y):
        ck = '%s_count' % key
        sk = '%s_spend' % key
        if(y not in list(self.users[alias]['data']['dist'].keys())):
            self.users[alias]['data']['dist'][y] = {}
        if(m not in list(self.users[alias]['data']['dist'][y].keys())):
            self.users[alias]['data']['dist'][y][m] = {}
        if(ck not in list(self.users[alias]['data']['dist'][y][m].keys())):
            self.users[alias]['data']['dist'][y][m][ck] = 0
        if(sk not in list(self.users[alias]['data']['dist'][y][m].keys())):
            self.users[alias]['data']['dist'][y][m][sk] = 0.00

    def __pupdater(self, alias,key,amt,d,m,y):
        self.__dcheck(alias,key,d,m,y)
        self.users[alias]['data']['purchases'][key]['spend'] = self.users[alias]['data']['purchases'][key]['spend'] + amt
        self.users[alias]['data']['purchases'][key]['count'] = self.users[alias]['data']['purchases'][key]['count'] + 1
        self.users[alias]['data']['dist'][y][m]['%s_count' % key] = self.users[alias]['data']['dist'][y][m]['%s_count' % key] +1
        self.users[alias]['data']['dist'][y][m]['%s_spend' % key] = self.users[alias]['data']['dist'][y][m]['%s_spend' % key] + amt


    def parser(self, alias, myset=None, target=None):
        """ target: 'self', 'ingame', 'gift' """
        if(myset != None and target != None):
            for pset in myset.findAll('div',recursive=False)[1:]:
                for item in pset.findAll('div',recursive=False):
                    pmethod = item.find('div','transactionRowEvent').contents[0]
                    pamt = item.find('div','transactionRowPrice').contents[0]
                    pdate = item.find('div','transactionRowDate').contents[0]
                    pdate = pdate.replace(",","")
                    try:
                        if(pdate[0] == str(int(pdate[0]))):
                            d,m,y = pdate.split(' ')
                    except Exception, e:
                        m,d,y = pdate.split(' ')
                    m = str(months.index(m))
                    d = str(int(d))
                    y = str(y)
                    if(pamt == 'Free' or pamt == 'N/A'):
                        pamt = '0.00'
                    else:
                        pamt = pamt.replace("$","")
                    pamt = pamt.replace("-","0") # Eurofix
                    pamt = pamt.replace(",",".") # Eurofix
                    pamt = float(pamt)
                    if(pmethod == 'Wallet Credit'):
                        self.__pupdater(alias,'wall', pamt, d, m, y)
                    else:
                        self.__pupdater(alias,target, pamt, d, m, y)

    # Bool return; true = win; false = fail
    def newuser(self, alias, filename):
        if(alias in list(self.users.keys())): return False

        self.users[alias] = {}
        self.users[alias]['capabilities'] = {'mitx':False,'gift':False,'self':False,'wallet':False}
        self.users[alias]['data'] = {
            'purchases': {
                'gift':{'count':0,'spend':0.00},
                'self':{'count':0,'spend':0.00},                'mitx':{'count':0,'spend':0.00},
                'wall':{'count':0,'spend':0.00}
                },
        # Unused licence stuff
        # app_types : {'Steam Store':0,'Complimentary':0,'Retail':0},
            'soup': {},
            'dist': {},
            }

        data = codecs.open(filename,'r','utf-8').read()

        cs = [[u'¢',"¢"],[u'£',"£"],[u'¥',"¥"],[u'€',"€"],[u'¤',"¤"],[u'ƒ',"ƒ"]]
        for c in xrange(len(cs)):
            data = data.replace(cs[c][0],cs[c][1])

        self.users[alias]['currency'] = '$' # Fallback
        for c in ["$","¢","£","¤","ƒ","¥","€"]:
            if(data.find(c) > 0):
                self.users[alias]['currency'] = c
                data = data.replace(c,"$")
                break


        main_soup = BeautifulSoup(data)

        try:
            divs = main_soup.find('div', attrs={'class': 'youraccount_pages'})
        except Exception:
            return False

        # -- We're not looking at this at the moment --
        #licence_soup = divs.find('div', attrs={"class":"youraccount_page", "id":"licenses"})
        #licence_soup = licence_soup.find('div', attrs={"class":"block_content"})

        try:
            body = main_soup.find('body') 
            sjs = body.findAll('script', attrs={'type':'text/javascript'})
            for s in sjs:
                if(s.contents[0].find("g_SteamID") > 0):
                    c = s.contents[0]
                    break
            sid = c[c.find("var g_SteamID = ")+len("var g_SteamID = "):c.find(";")]
            self.users[alias]['steamid'] = sid
        except Exception:
            return False

        if(len(sid) != 17): 
            del self.users[alias]
            return False

        if(str(int(sid)) != sid):
            del self.users[alias]
            return False

        # Microtransactions            
        try:
            ingame_soup = divs.find('div', attrs={"class":"youraccount_page", "id":"ingame_transactions"})
            self.users[alias]['data']['mitx'] = ingame_soup.find('div', attrs={"class":"block_content"})
            self.users[alias]['capabilities']['mitx'] = True
        except Exception:
            pass

        try:
            transaction_soup = divs.find('div', attrs={"class":"youraccount_page", "id":"store_transactions"})
            transaction_soup = transaction_soup.findAll('div', attrs={"class":"block_content"})
        except Exception:
            return False

        try:
            self.users[alias]['data']['self'] = transaction_soup[0]
            self.users[alias]['capabilities']['self'] = True
        except Exception:
            pass

        try:
            self.users[alias]['data']['gift'] = transaction_soup[1]
            self.users[alias]['capabilities']['gift'] = True
        except Exception:
            pass

        # Process everything (except licences)
        if(self.users[alias]['capabilities']['gift']):
            self.parser(alias,self.users[alias]['data']['gift'],'gift')
        if(self.users[alias]['capabilities']['self']):
            self.parser(alias,self.users[alias]['data']['self'],'self')
        if(self.users[alias]['capabilities']['mitx']):
            self.parser(alias,self.users[alias]['data']['mitx'],'mitx')

        return True


    def render_month(self,alias,mName, sn, sp, gn, gp, mn, mp):
        x = [int(round(float(sp),0)),
            int(round(float(gp),0)),
            int(round(float(mp),0))]
        t = x[0] + x[1] + x[2]
        i = 0
        o = []
        while(len(o) < 3):
            n = x.index(max(x))
            o.append(n)
            x[n] = -1
        x = [int(round(float(sp),0)),
            int(round(float(gp),0)),
            int(round(float(mp),0))]
        while(t < 100):
            x[o[i]] = x[o[i]] + 1
            i = i + 1
            if(i == 3): i = 0
            t = x[0] + x[1] + x[2]
        out = """<div class="month"><span class="mName">%s</span>""" % mName
        if(int(x[0]) > int(0)):
            out += """<span class="self" title="%s%s" style="width:%spx;">&nbsp;</span>""" % (self.users[alias]['currency'],sn,str(x[0]*4))
        if(int(x[1]) > int(0)):
            out += """<span class="gift" title="%s%s" style="width: %spx;">&nbsp;</span>""" % (self.users[alias]['currency'],gn,str(x[1]*4))
        if(int(x[2]) > int(0)):
            out += """<span class="mitx" title="%s%s" style="width: %spx;">&nbsp;</span>""" % (self.users[alias]['currency'],mn,str(x[2]*4))
        out += """</div>"""
        return out

    def saveHTML(self,alias,outfile):
        yk = list(self.users[alias]['data']['dist'].keys())
        T = ['self','gift','mitx','wall']
        o = open(outfile,'w')
        o.write("""<!DOCTYPE html>
            <html>
            <head>
                <meta charset="utf-8">
                <title>Steam Breakdown</title>
                <style type="text/css">
                    body{background: #2e3336;font-family:Arial;color:#eeeeec;margin:0;padding:0;}
                    h1{font-size:36px;text-align:center;font-weight:300;}
                    h2{font-size:24px;text-align:center;font-weight:300;margin-top:40px;}
                    div>h2{margin-top:0;}
                    .month{display:block;border:1px solid #eeeeec;font-size:18px;padding:5px;width:500px;margin:5px auto;}
                    .month span{display:inline-block;color:#000000;}
                    .month .data{width:400px;text-align:center;display:inline-block;}
                    .month .mName{width:100px;display:inline-block;color:#eeeeec;}
                    .mid {display: block; width: 400px; margin: 15px auto;}
                    .ca {text-align: center;}
                    .b{border: 1px solid #eeeeec; padding: 5px;width:500px;}
                    .pself:before{display:inline-block;height:12px;width:12px;background: #739fd0;content:' ';}
                    .pgift:before{display:inline-block;height:12px;width:12px;background: #ad7ea8;content:' ';}
                    .pmitx:before{display:inline-block;height:12px;width:12px;background: #89e334;content:' ';}
                    .self{background: #739fd0;}
                    .gift{background: #ad7ea8;}
                    .mitx{background: #89e334;}
                    .foot{background: #000000;font-size:10px;text-align:center;margin:75px auto 0 auto;padding:15px;width:400px;}
                    a,a:visited,a:hover{color:#eeeeec;}
                </style>
            </head>
            <body>
                <h1>Steam Breakdown</h1>
                <div class="mid ca">
                    <a href="http://steamcommunity.com/profiles/%s/">View the associated Steam Profile</a>
                </div>

                <h2> Legend </h2>
                <div class="mid b">
                    <div class="box pself"> Steam store (bought for self)</div>
                    <div class="box pgift"> Steam store (gift for someone else, via Steam)</div>
                    <div class="box pmitx"> In-game Microtransaction</div>
                </div> """ % self.users[alias]['steamid'])

        for y in xrange(int(min(yk)),int(max(yk))+1):
            y = str(y)
            o.write("<h2>%s</h2>" % y)
            if(y in list(self.users[alias]['data']['dist'].keys())):
                for m in xrange(1,13):
                    m = str(m)
                    if(m in list(self.users[alias]['data']['dist'][y].keys())):
                        for t in T:
                            self.__dcheck(alias,t,0,m,y)
                        s_n = self.users[alias]['data']['dist'][y][m]['self_spend']
                        g_n = self.users[alias]['data']['dist'][y][m]['gift_spend']
                        m_n = self.users[alias]['data']['dist'][y][m]['mitx_spend']
                        sn = float(float(s_n) + float(g_n) + float(m_n))
                        if(sn != 0):
                            s_p = float(float(s_n)/float(sn))*100.0
                            g_p = float(float(g_n)/float(sn))*100.0
                            m_p = float(float(m_n)/float(sn))*100.0
                            o.write(self.render_month(alias,datetime.datetime.strftime(datetime.datetime(int(y),int(m),1),"%B"),str(s_n),str(s_p),str(g_n),str(g_p),str(m_n),str(m_p)))

        o.write("""
                <h2> Totals </h2>
                    <div class="mid ca">
                    <div class="box pself"> %s%s</div>
                    <div class="box pgift"> %s%s</div>
                    <div class="box pmitx"> %s%s</div>
                </div> """ % (self.users[alias]['currency'],self.users[alias]['data']['purchases']['self']['spend'],self.users[alias]['currency'],self.users[alias]['data']['purchases']['gift']['spend'],self.users[alias]['currency'],self.users[alias]['data']['purchases']['mitx']['spend']))

        o.write("""
                <div class="foot">
                    <p> Swixel was bored.</p>
                    <p>Python script used to generate this Copyright &copy; 2010 A.W. 'Swixel' Stanley; GPLv3. </p>
                    <p> [ <a href="http://cloudypixels.com/sb/src.php">get/view the source</a> ]</p>
                    <p>The colours are from the <a href="http://tango.freedesktop.org/">Tango Pallet</a>.</p>
                </div>
            </body>
            </html>""")
        o.close()

    def sidHTMLO(self,alias,outdir,pS=False):
        fname = "%s.html" % os.path.join(outdir,self.users[alias]['steamid'])
        self.saveHTML(alias,fname)
        if(pS): print(self.users[alias]['steamid'])
__________________
Quote:
Originally Posted by asherkin View Post
Configure your servers properly and stop blaming random things.
Swixel is offline
jackliu92
Senior Member
Join Date: Aug 2006
Old 04-04-2012 , 01:37   Re: What is your Steam worth?
Reply With Quote #22

Quote:
Found 123 Games with a value of
$1914.78 USD
__________________
jackliu92 is offline
Mucx
Member
Join Date: Mar 2011
Location: Estonia
Old 04-04-2012 , 06:10   Re: What is your Steam worth?
Reply With Quote #23

http://www.steamcalculator.com/id/drap5w7m/eu
Mucx is offline
jonnzus
Epic Member
Join Date: Oct 2010
Location: Finland
Old 04-04-2012 , 08:24   Re: What is your Steam worth?
Reply With Quote #24

10€
__________________
Quote:
367. Everyone's copyright will be broken. No exceptions.
jonnzus is offline
Baghi
Senior Member
Join Date: Mar 2012
Location: Asia Pacific
Old 04-04-2012 , 09:28   Re: What is your Steam worth?
Reply With Quote #25

My games worth more than $150 IIRC, but I only play a $10 game (i.e. CS), or $19 (CS:S/TF2) ones in a blue moon. Dunno what went into my mind when I bought BF BC2 ($19.9) and CoD MW2 ($59.9) even though the play time is still NIL.
__________________
new signature
Baghi is offline
Reply



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 06:20.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode