/** * SageOfChaos : Total Halo Reach Competitive Games: 906 */ public async Task GetHaloReachStatsFromBungie_Goldenflow(string gamerTag) { // Arrange // Do nothing // Act HaloReachStatModel result = await _sut.GetHaloReachStatsFromBungie(gamerTag); // Assert Assert.IsTrue(result.TotalGames == 906); Assert.IsTrue(result.TotalKills == 12501); Assert.IsTrue(result.TotalDeaths == 8656); Assert.IsTrue(result.TotalAssists == 1970); Assert.IsTrue(result.KillDeathRatio == float.Parse("1.44")); Assert.IsTrue(result.KillGameRatio == float.Parse("13.80")); Assert.IsTrue(result.DeathGameRatio == float.Parse("9.55")); Assert.IsTrue(result.KillHourRatio == float.Parse("99.43")); Assert.IsTrue(result.DeathHourRatio == float.Parse("68.85")); Assert.IsTrue(result.TotalMedals == 15872); Assert.IsTrue(result.MedalGameRatio == float.Parse("17.52")); Assert.IsTrue(result.MedalHourRatio == float.Parse("126.24")); }
public async Task <HaloReachStatModel> GetHaloReachStatsFromBungie(string gamerTag) { HaloReachStatModel haloStatModel = new HaloReachStatModel(); if (string.IsNullOrWhiteSpace(gamerTag)) { return(await Task.FromResult(haloStatModel)); } else { WebClient client = new WebClient(); string downloadedString = client.DownloadString(Constants.HaloReachConstants.UrlBase + gamerTag); HtmlDocument doc = new HtmlDocument(); doc.LoadHtml(downloadedString); List <string> cleanedResult = new List <string>(); // TODO: This currently gets the right divs, but it also grabs others that I don't need. // Need to collect the ones that I need and then parse what I need out of them foreach (HtmlNode node in doc.DocumentNode.SelectNodes("//div[contains(@class, 'careerStatsHome')]")) { string value = node.InnerText; cleanedResult.AddRange(GetCleanAndSplitHaloReachStatsFromBungie(value)); } //foreach (string html in cleanedResult) //{ // Console.WriteLine(html); //} haloStatModel = ParseHaloReachStatsFromBungie(cleanedResult); return(await Task.FromResult(haloStatModel)); } }
private HaloReachStatModel ParseHaloReachStatsFromBungie(List <string> htmlStats) { HaloReachStatModel haloStatModel = new HaloReachStatModel(); for (int i = 0; i < htmlStats.Count; i++) { string stat = htmlStats[i]; int indexOfFirstNumber = stat.IndexOfAny("0123456789".ToCharArray()); string statName = stat.Substring(0, (indexOfFirstNumber > 0) ? indexOfFirstNumber : stat.Length); if (stat.Contains(Constants.HaloReachConstants.TotalGames, StringComparison.OrdinalIgnoreCase)) { haloStatModel.TotalGames = int.Parse(htmlStats[i + 1], NumberStyles.AllowThousands); } else if (statName.Equals(Constants.HaloReachConstants.TotalPlaytime, StringComparison.OrdinalIgnoreCase)) { haloStatModel.TotalPlaytime = (stat.Replace($"{Constants.HaloReachConstants.TotalPlaytime}", "")); } else if (statName.Equals(Constants.HaloReachConstants.TotalKills, StringComparison.OrdinalIgnoreCase)) { haloStatModel.TotalKills = int.Parse(stat.Replace($"{Constants.HaloReachConstants.TotalKills}", ""), NumberStyles.AllowThousands); } else if (statName.Equals(Constants.HaloReachConstants.TotalDeaths, StringComparison.OrdinalIgnoreCase)) { haloStatModel.TotalDeaths = int.Parse(stat.Replace($"{Constants.HaloReachConstants.TotalDeaths}", ""), NumberStyles.AllowThousands); } else if (statName.Equals(Constants.HaloReachConstants.TotalAssists, StringComparison.OrdinalIgnoreCase)) { haloStatModel.TotalAssists = int.Parse(stat.Replace($"{Constants.HaloReachConstants.TotalAssists}", ""), NumberStyles.AllowThousands); } else if (statName.Equals(Constants.HaloReachConstants.KillDeathRatio, StringComparison.OrdinalIgnoreCase)) { haloStatModel.KillDeathRatio = float.Parse(stat.Replace($@"{Constants.HaloReachConstants.KillDeathRatio}", "")); } else if (statName.Equals(Constants.HaloReachConstants.KillGameRatio, StringComparison.OrdinalIgnoreCase)) { haloStatModel.KillGameRatio = float.Parse(stat.Replace($@"{Constants.HaloReachConstants.KillGameRatio}", "")); } else if (statName.Equals(Constants.HaloReachConstants.DeathGameRatio, StringComparison.OrdinalIgnoreCase)) { haloStatModel.DeathGameRatio = float.Parse(stat.Replace($@"{Constants.HaloReachConstants.DeathGameRatio}", "")); } else if (statName.Equals(Constants.HaloReachConstants.KillHourRatio, StringComparison.OrdinalIgnoreCase)) { haloStatModel.KillHourRatio = float.Parse(stat.Replace($@"{Constants.HaloReachConstants.KillHourRatio}", "")); } else if (statName.Equals(Constants.HaloReachConstants.DeathHourRatio, StringComparison.OrdinalIgnoreCase)) { haloStatModel.DeathHourRatio = float.Parse(stat.Replace($@"{Constants.HaloReachConstants.DeathHourRatio}", "")); } else if (statName.Equals(Constants.HaloReachConstants.TotalMedals, StringComparison.OrdinalIgnoreCase)) { haloStatModel.TotalMedals = int.Parse(stat.Replace($"{Constants.HaloReachConstants.TotalMedals}", ""), NumberStyles.AllowThousands); } else if (statName.Equals(Constants.HaloReachConstants.MedalGameRatio, StringComparison.OrdinalIgnoreCase)) { haloStatModel.MedalGameRatio = float.Parse(stat.Replace($@"{Constants.HaloReachConstants.MedalGameRatio}", "")); } else if (statName.Equals(Constants.HaloReachConstants.MedalHourRatio, StringComparison.OrdinalIgnoreCase)) { haloStatModel.MedalHourRatio = float.Parse(stat.Replace($@"{Constants.HaloReachConstants.MedalHourRatio}", "")); } } return(haloStatModel); }