コード例 #1
0
        // 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);
            }
        }
コード例 #2
0
        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);
        }