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)
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
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
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
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")
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')
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"))