// Steam API call ----------------------------------------------------------------------------------------------------- #region steam internal async Task <SteamProfileRootObject> GetPlayerSteamProfile(string steamid) { if (!BaseViewModel.hasConnection()) { return(null); } string steamid64 = SteamIDConverter.Steam32to64(steamid); var srequest = new RestRequest { Method = Method.GET }; srequest.RequestFormat = DataFormat.Json; client.BaseUrl = new Uri("http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=" + BaseViewModel.STEAM + "&steamids=" + steamid64); await Task.Run(() => response = client.Execute(srequest)); if (response.StatusCode == System.Net.HttpStatusCode.OK) { return(JsonConvert.DeserializeObject <SteamProfileRootObject>(response.Content)); } else { return(null); } }
public async Task <List <FullPlayerInfo> > GetInfoFromSteamAPI(List <BasicPlayerInfo> basicPlayersInfoList) { var httpClient = new HttpClient(); var baseUrl = @"https://api.steampowered.com/ISteamUser/{0}/{1}/?steamids={2}&key={3}"; var generalInfoList = new List <GeneralPlayerInfo>(); // create a list for the data of the first request (general info about the player) var banInfoList = new List <PlayersBanInfo>(); // create a list for the data of the second request (the player's ban information) var subLists = new List <List <BasicPlayerInfo> >(); // a list to hold the result of splitting the main list into 100-items sized lists (steam api restrection on IDs per request) for (int i = 0; i < basicPlayersInfoList.Count; i += 100) { subLists.Add(basicPlayersInfoList.GetRange(i, Math.Min(100, basicPlayersInfoList.Count - i))); } IsProgressBarIndeterminate = false; LoadingText = "Retriving info from the Steam Web API"; // loop through the sublists, extract the IDs, convert them then save them to the IDs string foreach (var list in subLists) { LoadingProgressValue = (subLists.IndexOf(list) * 100) / subLists.Count(); string IDs = ""; foreach (var player in list) { string id = SteamIDConverter.ConvertToSteam64(player.Steam32); if (!string.IsNullOrWhiteSpace(id)) { if (list.IndexOf(player) < list.Count - 1) { IDs += id + ","; } else { IDs += id; } } } var formattedUrl = string.Format(baseUrl, "GetPlayerSummaries", "v2", IDs, SteamKeyText); var generalInfoResponse = await httpClient.GetAsync(formattedUrl); if (generalInfoResponse.IsSuccessStatusCode) { var content = await generalInfoResponse.Content.ReadAsStringAsync(); var generalPlayerRootList = JsonConvert.DeserializeObject <GeneralPlayerRootObject>(content); generalInfoList.AddRange(generalPlayerRootList.response.players); } else { throw new HttpRequestException(); } formattedUrl = string.Format(baseUrl, "GetPlayerBans", "v1", IDs, SteamKeyText); var banInfoResponse = await httpClient.GetAsync(formattedUrl); if (banInfoResponse.IsSuccessStatusCode) { var content = await banInfoResponse.Content.ReadAsStringAsync(); var generalPlayerRootList = JsonConvert.DeserializeObject <RootBanObject>(content); banInfoList.AddRange(generalPlayerRootList.players); } else { throw new HttpRequestException(); } } // pick the relevant info from the general info list and the ban list and combine them to a complete info list using the steamid (in 64 format) var FullPlayersInfoList = (from generalInfo in generalInfoList join banInfo in banInfoList on generalInfo.steamid equals banInfo.SteamId select new { generalInfo.steamid, generalInfo.personaname, generalInfo.profileurl, banInfo.CommunityBanned, banInfo.VACBanned, banInfo.NumberOfGameBans, banInfo.NumberOfVACBans, banInfo.DaysSinceLastBan } into intermediateList join basicInfo in basicPlayersInfoList on intermediateList.steamid equals SteamIDConverter.ConvertToSteam64(basicInfo.Steam32) orderby intermediateList.personaname select new FullPlayerInfo() { Steam32 = basicInfo.Steam32, // the id used in the full list is 32 format NameDb = basicInfo.NameDB, CurrentName = intermediateList.personaname, LastIp = basicInfo.LastIp, Steam64 = intermediateList.steamid, SteamUrl = intermediateList.profileurl, CommunityBanned = intermediateList.CommunityBanned, VACBanned = intermediateList.VACBanned, NumberOfGameBans = intermediateList.NumberOfGameBans, NumberOfVACBans = intermediateList.NumberOfVACBans, DaysSinceLastBan = intermediateList.DaysSinceLastBan }).ToList(); // set the country code for each player in the full list to later be able to view it in the datagrid foreach (var player in FullPlayersInfoList) { player.CountryCode = GeoIPInfo.GetCountryCodeFromIP(GeoIPinfoList, player.LastIp); } return(FullPlayersInfoList); }