internal static async Task <IEnumerable <Vote> > GetAndParseVotesAsync(VoteDumpVersion version) { var url = version == VoteDumpVersion.One ? Constants.VotesDump : Constants.VotesDump2; Debug.WriteLine($"Requesting Votes Dump via {url}"); // .Net Core removed WebClient and Http/WebRequests, so we need to use HttpClient. var request = new HttpRequestMessage(HttpMethod.Get, new Uri(url)); // Manually add the headers every request rather then using the default headers, // incase the client was rebuilt with a new name / version mid-application session request.Headers.Add("User-Agent", $"{VndbUtils.ClientName} (v{VndbUtils.ClientVersion})"); var response = await VndbUtils.HttpClient.SendAsync(request); response.EnsureSuccessStatusCode(); // Ensure we got data var gzipStream = await response.Content.ReadAsStreamAsync(); var rawContents = await VndbUtils.UnGzip(gzipStream); response.Dispose(); request.Dispose(); var results = new List <Vote>(); var votes = rawContents.Split(new[] { '\n' }, StringSplitOptions.RemoveEmptyEntries); var expectedValues = version == VoteDumpVersion.One ? 3 : 4; // Resharper "Loop can be converted to LINQ-expression won't work due to inline "out var" declaration foreach (var vote in votes) { var values = vote.Split(new [] { ' ' }, expectedValues, StringSplitOptions.RemoveEmptyEntries); if (values.Length != expectedValues) { continue; } SimpleDate date = null; if (!UInt32.TryParse(values[0], out var vnId) || !UInt32.TryParse(values[1], out var uid) || !Byte.TryParse(values[2], out var value)) { continue; } if (version == VoteDumpVersion.Two && (date = (SimpleDate)SimpleDateConverter.ParseString(values[3])) == null) { continue; } results.Add(new Vote(version, vnId, uid, value, date)); } return(results); }
internal static async Task <T> GetDumpAsync <T>(String url) where T : class { // .Net Core removed WebClient and Http/WebRequests, so we need to use HttpClient. var request = new HttpRequestMessage(HttpMethod.Get, new Uri(url)); // Manually add the headers every request rather then using the default headers, // incase the client was rebuilt with a new name / version mid-application session request.Headers.Add("User-Agent", $"{VndbUtils.ClientName} (v{VndbUtils.ClientVersion})"); var response = await VndbUtils.HttpClient.SendAsync(request); response.EnsureSuccessStatusCode(); // Ensure we got data var gzipStream = await response.Content.ReadAsStreamAsync(); var rawContents = await VndbUtils.UnGzip(gzipStream); return(JsonConvert.DeserializeObject <T>(rawContents, new JsonSerializerSettings { ContractResolver = VndbContractResolver.Instance, })); }