def __init__(self, username, stats_file_name=None):
     self.key, self.domain = self.get_key_and_domain()
     self.steamuserinfo = ISteamUser(steam_api_key=self.key)
     self.steamstatsinfo = ISteamUserStats(steam_api_key=self.key)
     self.steamplayerinfo = IPlayerService(steam_api_key=self.key)
     self.steamid = self.getSteamID(username)
     self.stats_file_name = stats_file_name
     self.gameList = None
     self.achievementList = None
     logging.basicConfig(filename='example.log', level=logging.DEBUG)
Ejemplo n.º 2
0
def get_user_profile(user):
    userinfo = User()
    steamuser = ISteamUser()
    playerservice = IPlayerService()
    regex = re.compile('^\d{17}$')
    if regex.match(user):
        userinfo.steamid = user
    else:
        userinfo.steamid = steamuser.resolve_vanity_url(
            user)['response']['steamid']
    usersummary = steamuser.get_player_summaries(
        userinfo.steamid)['response']['players'][0]
    for key in list(usersummary.keys()):
        if isinstance(usersummary[key], int):
            exec('userinfo.' + key + ' = ' + str(usersummary[key]))
        else:
            exec('userinfo.' + key + ' = ' + '"' + usersummary[key] + '"')

    # Group ID '103582791429521408' is often encountered.
    # In hex, that ID is '0x170000000000000' which has 0 in the
    # lower 32bits. There is no actual group ID, just the universe,
    # account type identifiers, and the instance.
    # https://developer.valvesoftware.com/wiki/SteamID
    if userinfo.primaryclanid:
        if (int(userinfo.primaryclanid) & 0x00000000FFFFFFFF) == 0:
            userinfo.primaryclanid = None

    games_response = playerservice.get_recently_played_games(
        userinfo.steamid)['response']
    if 'games' in games_response:
        recent_games = games_response['games']
    else:
        recent_games = []
    steam_level = playerservice.get_steam_level(
        userinfo.steamid)['response']['player_level']
    for game in recent_games:
        # Sometimes, games don't have keys for 'name', or 'img_*_url' apparently.
        if 'img_icon_url' in game and 'appid' in game:
            game[
                'img_icon_url'] = "http://media.steampowered.com/steamcommunity/public/images/apps/{appid}/{hash}.jpg".format(
                    appid=game['appid'], hash=game['img_icon_url'])
            game[
                'img_logo_url'] = "http://media.steampowered.com/steamcommunity/public/images/apps/{appid}/{hash}.jpg".format(
                    appid=game['appid'], hash=game['img_logo_url'])
    userinfo.recentlyplayedgames = recent_games
    userinfo.steamlevel = steam_level

    try:
        userinfo.profileurlname = re.search(r"id\/(.*)\/",
                                            userinfo.profileurl).groups()[0]
    except:
        pass

    return userinfo
Ejemplo n.º 3
0
def get_user_profile(user):
    userinfo = User()
    steamuser = ISteamUser()
    playerservice = IPlayerService()
    regex = re.compile('^\d{17}$')
    if regex.match(user):
        userinfo.steamid = user
    else:
        userinfo.steamid = steamuser.resolve_vanity_url(user)['response']['steamid']
    usersummary = steamuser.get_player_summaries(userinfo.steamid)['response']['players'][0]
    for key in list(usersummary.keys()):
        if isinstance(usersummary[key], int):
            exec('userinfo.' + key + ' = ' + str(usersummary[key]))
        else:
            exec('userinfo.' + key + ' = ' + '"' + usersummary[key] + '"')

    # Group ID '103582791429521408' is often encountered.
    # In hex, that ID is '0x170000000000000' which has 0 in the 
    # lower 32bits. There is no actual group ID, just the universe,
    # account type identifiers, and the instance.
    # https://developer.valvesoftware.com/wiki/SteamID
    if userinfo.primaryclanid:
        if (int(userinfo.primaryclanid) & 0x00000000FFFFFFFF) == 0:
            userinfo.primaryclanid = None

    games_response = playerservice.get_recently_played_games(userinfo.steamid)['response']
    if 'games' in games_response:
        recent_games = games_response['games']
    else:
        recent_games = []
    steam_level = playerservice.get_steam_level(userinfo.steamid)['response']['player_level']
    for game in recent_games:
        # Sometimes, games don't have keys for 'name', or 'img_*_url' apparently.
        if 'img_icon_url' in game and 'appid' in game:
            game['img_icon_url'] = "http://media.steampowered.com/steamcommunity/public/images/apps/{appid}/{hash}.jpg".format(appid=game['appid'], hash=game['img_icon_url'])
            game['img_logo_url'] = "http://media.steampowered.com/steamcommunity/public/images/apps/{appid}/{hash}.jpg".format(appid=game['appid'], hash=game['img_logo_url'])
    userinfo.recentlyplayedgames = recent_games
    userinfo.steamlevel = steam_level

    try:
        userinfo.profileurlname = re.search(r"id\/(.*)\/", userinfo.profileurl).groups()[0]
    except:
        pass

    return userinfo
Ejemplo n.º 4
0
    def collect_data(self):
        now = time.time()
        data = {}

        steamuserinfo = ISteamUser(steam_api_key=self.steam_api_key)
        steamid = steamuserinfo.resolve_vanity_url(
            "entrymissing")['response']['steamid']
        playerinfo = IPlayerService(steam_api_key=self.steam_api_key)
        played_games = playerinfo.get_recently_played_games(
            steamid)['response']
        playtime = [game['playtime_2weeks'] for game in played_games['games']]
        owned_games = playerinfo.get_owned_games(steamid)['response']

        data[self.prefix + '.game_count_2w'] = [(now,
                                                 played_games['total_count'])]
        data[self.prefix + '.minutes_played_2w'] = [(now, sum(playtime))]
        data[self.prefix + '.owned_games'] = [(now, owned_games['game_count'])]

        return data
Ejemplo n.º 5
0
def get_user_profile(user):
    userinfo = User()
    steamuser = ISteamUser()
    playerservice = IPlayerService()
    regex = re.compile("^\d{17}$")
    if regex.match(user):
        userinfo.steamid = user
    else:
        userinfo.steamid = steamuser.resolve_vanity_url(user)["response"]["steamid"]
    usersummary = steamuser.get_player_summaries(userinfo.steamid)["response"]["players"][0]
    for key in list(usersummary.keys()):
        if isinstance(usersummary[key], int):
            exec("userinfo." + key + " = " + str(usersummary[key]))
        else:
            exec("userinfo." + key + " = " + '"' + usersummary[key] + '"')

    recent_games = playerservice.get_recently_played_games(userinfo.steamid)["response"]["games"]
    steam_level = playerservice.get_steam_level(userinfo.steamid)["response"]["player_level"]
    for game in recent_games:
        game[
            "img_icon_url"
        ] = "http://media.steampowered.com/steamcommunity/public/images/apps/{appid}/{hash}.jpg".format(
            appid=game["appid"], hash=game["img_icon_url"]
        )
        game[
            "img_logo_url"
        ] = "http://media.steampowered.com/steamcommunity/public/images/apps/{appid}/{hash}.jpg".format(
            appid=game["appid"], hash=game["img_logo_url"]
        )
    userinfo.recentlyplayedgames = recent_games
    userinfo.steamlevel = steam_level

    try:
        userinfo.profileurlname = re.search(r"id\/(.*)\/", userinfo.profileurl).groups()[0]
    except:
        pass

    return userinfo
def mySampleTestCode():
    # Just prints out one game so you can see the structure of the game stats.
    with open('api-config.json', 'r') as configurationFile:
        config = json.loads(configurationFile.read())
    key, domain = config['key'], config['domain']
    steamuserinfo = ISteamUser(steam_api_key=key)
    steamstatsinfo = ISteamUserStats(steam_api_key=key)
    steamplayerinfo = IPlayerService(steam_api_key=key)

    steamprofile = steamuserinfo.resolve_vanity_url('adamclmns')
    steamid = steamprofile['response']['steamid']

    print(" STEAM PROFILE DATA SAMPLE:")
    print(steamid)
    print("\n\n")

    print(" GAME DATA FOR FALLOUT 4 ")
    print()
    print("\n\n")
Ejemplo n.º 7
0
import numpy as np
import pandas as pd
from steamwebapi.api import IPlayerService

playerserviceinfo = IPlayerService()

games = ['72850', '252950', '730', '271590', '294100', '245620', '292030', '482730', '289070', '47890', '570', '268500',
         '359550', '346110', '8500', '102600', '379720', '251470', '70600', '620']

stars = {"Don't own this game on steam": 0, "Don't own this game": 0, "Disliked strongly": 1, "Disliked": 2,
         "Liked slightly": 3, "Liked": 4, "Liked strongly": 5, "Haven't played / No opinion": 0}

convertfunc = lambda x: stars[x]
dataset = pd.read_csv('Resources/Steam Game Ranking.csv', usecols=range(1, 22), index_col=[0], header=None,
                      skiprows=[0])
dataset.columns = games
dataset.index.names = ['steamid']
dataset = dataset.applymap(convertfunc)
dataset = dataset.applymap(np.int64)
dataset = dataset.replace(0, np.nan)
sdf = dataset.to_sparse()
print(dataset)
print('nUsers:', len(dataset.index), 'Sparsity:', 1 - sdf.density, 'Density:', sdf.density)
print(dataset.describe())

dataset.to_csv('Resources/userratings.csv')
Ejemplo n.º 8
0
import json
import pandas as pd
from steamwebapi.api import IPlayerService, ISteamUserStats, ISteamWebAPIUtil
from tqdm import *

playerserviceinfo = IPlayerService()
steamuserstats = ISteamUserStats()

features = ['steamid', 'appid', 'playtime_forever']


def achievementprocentage(ach):
    achieved = [i for i in ach if i['achieved'] == 1]
    return len(achieved) / len(ach)


AMOUNT = 1000

iddict = dict()

json_data = [76561198048730871, 76561198180821795, 76561198008911412]
#json_file = open('Resources/steamkey{0}.json'.format(AMOUNT), 'r')
#json_data = json.loads(json_file.read())
#json_file.close()

df = pd.DataFrame()
df.index.names = ['steamID/appID']
id = 0
for steamid in tqdm(json_data):
    response = playerserviceinfo.get_owned_games(steamid)['response']
    if len(response) > 1:
def get_owned_games(steam_id: int, steam_api_key: str) -> list:
    player_service = IPlayerService(steam_api_key=steam_api_key)
    games = player_service.get_owned_games(steam_id)['response']['games']
    return games
class SteamAchievementDataMiner():
    # Constructor
    def __init__(self, username, stats_file_name=None):
        self.key, self.domain = self.get_key_and_domain()
        self.steamuserinfo = ISteamUser(steam_api_key=self.key)
        self.steamstatsinfo = ISteamUserStats(steam_api_key=self.key)
        self.steamplayerinfo = IPlayerService(steam_api_key=self.key)
        self.steamid = self.getSteamID(username)
        self.stats_file_name = stats_file_name
        self.gameList = None
        self.achievementList = None
        logging.basicConfig(filename='example.log', level=logging.DEBUG)

    # GetSteamID
    def getSteamID(self, username):
        steamprofile = self.steamuserinfo.resolve_vanity_url(username)
        logging.debug("!!! DEBUG: - STEAM PROFILE DATA - for username %s" %
                      username)
        logging.debug(steamprofile)
        return steamprofile['response']['steamid']

    # getGameList
    def getGameList(self):
        self.gameList = self.steamplayerinfo.get_owned_games(
            self.steamid)['response']['games']
        logging.debug("!!! DEBUG: - STEAM GAME LIST FROM PROFILE")
        logging.debug(self.gameList)
        return self.gameList

    # getAchievements from gamelist
    def getAchievements(self, game_list):
        achievement_list = []
        csvRow = ""
        for game in game_list:
            appid, title = game['appid'], game['name']
            csvRow += ("appid: %s , Title: %s , " % (appid, title))

            try:
                achievements = self.steamstatsinfo.get_player_achievements(
                    self.steamid, appid)
                achievement_list.append(achievements)
                csvRow += ("achievements available: %i \n" %
                           len(achievement_list)
                           )  # !!!!! LAST FIELD IN CSV HAS NO TRAILING COMMA
            except:
                csvRow += ("achievements available: NA \n"
                           )  # !!!!! LAST FIELD IN CSV HAS NO TRAILING COMMA
                pass
                # This is incase there are no achievements for a given
                # game, or if there is an error due to rate limiting
            self.writeStatsRow(csvRow)

        self.achievementList = achievement_list
        return achievement_list

    def writeStatsRow(self, data_to_try_to_write):
        if self.stats_file_name != None:
            with open(self.stats_file_name, 'a') as file_appender:
                file_appender.write(data_to_try_to_write)
        else:
            print(data_to_try_to_write)

    @staticmethod
    def get_key_and_domain():
        with open('api-config.json', 'r') as configurationFile:
            config = json.loads(configurationFile.read())
        return config['key'], config['domain']

    @staticmethod
    def dumpToFile(fileName, dataToWrite):
        with open(fileName, 'w') as outputFile:
            outputFile.write(json.dumps(dataToWrite + "\n"))