private CharactersList GetMembers() { CharactersList result = new CharactersList(); foreach (var guild in GuildEnum.GetValues(typeof(GuildEnum))) { var response = HttpStatusCode.NoContent; string responseString = null; int counter = 0; do { response = RequestManager.SendGETRequest($"{ TibiaSiteGuildUrl }{ guild.ToString() }", out responseString); counter++; } while (String.IsNullOrEmpty(responseString) && counter < 4); if (!String.IsNullOrEmpty(responseString)) { var parsedHtmlPage = PageAnalyzer.ParseHtmlPage(responseString); result.Character.AddRange(PageAnalyzer.AnalyzePage(parsedHtmlPage, (GuildEnum)guild)); } } return(result); }
private void ProcessResponse(string responseString) { var guild = JsonConvert .DeserializeObject <GuildDO.RootObject> (responseString); string membersListAsString = BuildStringMembers(guild); GuildEnum guildTypeEnum = (GuildEnum)System.Enum.Parse (typeof(GuildEnum), guild.guild.data.name); StoreGuildMembersInDb(membersListAsString, guildTypeEnum); }
public void Proceed() { foreach (var guild in GuildEnum.GetValues(typeof(GuildEnum))) { bool isRequestOk = RequestManager.SendGETRequest( $"{ TibiaAPIGuildUrl }{ guild.ToString() }.json", out var responseString) == HttpStatusCode.OK && !String.IsNullOrEmpty(responseString); if (isRequestOk) { ProcessResponse(responseString); } } }
private void StoreGuildMembersInDb(string members, GuildEnum guild) { using (SqlConnection connection = new SqlConnection(ConnectionString)) { string sql = $"INSERT INTO [dbo].[MembersList] ([Members], [Guild], [Date]) " + $"VALUES (@MembersList, @Guild, @Date)"; using (SqlCommand cmd = new SqlCommand(sql, connection)) { connection.Open(); cmd.Parameters.AddWithValue("@MembersList", OleDbType.VarWChar).Value = members; cmd.Parameters.AddWithValue("@Guild", OleDbType.VarWChar).Value = (int)guild; cmd.Parameters.AddWithValue("@Date", OleDbType.DBDate).Value = DateTime.Now; cmd.ExecuteNonQuery(); } } }
private void StoreDeathInDatabase(RootObject death, string characterName, string deathString, string characterGuild) { string sql = $"INSERT INTO [dbo].[DeathList] ([CharacterName], [Reason], [Guild], [Killers], [Level], [Date]) VALUES" + $"(@CharacterName, @Reason, @Guild, @Killers, @Level, @Date)"; var guildEnumAsInt = (int)GuildEnum.Parse(typeof(GuildEnum), characterGuild); using (SqlConnection cnn = new SqlConnection(ConnectionString)) using (SqlCommand cmd = new SqlCommand(sql, cnn)) { cnn.Open(); cmd.Parameters.AddWithValue("@CharacterName", OleDbType.VarWChar).Value = characterName; cmd.Parameters.AddWithValue("@Reason", OleDbType.VarWChar).Value = death.reason; cmd.Parameters.AddWithValue("@Guild", OleDbType.Integer).Value = guildEnumAsInt; cmd.Parameters.AddWithValue("@Killers", OleDbType.VarWChar).Value = deathString; cmd.Parameters.AddWithValue("@Level", OleDbType.Integer).Value = death.level; cmd.Parameters.AddWithValue("@Date", OleDbType.DBDate).Value = DateTime.Parse(death.date.date); cmd.ExecuteNonQuery(); } }
private void ProcessResponse(string responseString, string characterNameInProcess, GuildEnum playerGuild) { var deaths = JsonConvert .DeserializeObject <DeathsDO.RootObject> (responseString); foreach (var item in deaths.characters.deaths) { var death = JsonConvert .DeserializeObject <RootObject> (item.ToString()); bool isOwnDeath = death.involved.Count == 1 && death.involved[0].name == characterNameInProcess; bool hasAnyDeaths = death.involved.Count() > 0; bool isWorthDeathLevel = death.level >= 250; if (isOwnDeath) { continue; } if (hasAnyDeaths && isWorthDeathLevel) { string deathString = BuildDeathString(death.involved); bool isInDatabase = DoesDeathExistInDatabase( characterNameInProcess, death.date.date); if (!isInDatabase) { StoreDeathInDatabase(death, characterNameInProcess, deathString, playerGuild.ToString()); } } } }
public static List <Character> AnalyzePage(HtmlNodeCollection collection, GuildEnum guild) { List <Character> list = new List <Character>(); for (int j = 0; j < collection.Count(); j++) { if (collection[j].ChildNodes.Count.Equals(11)) { Character character = new Character(); if (j == 10) { for (int i = 1; i < collection[j].ChildNodes.Count; i += 2) { if (collection[j].ChildNodes[9].InnerText == "offline") { continue; } switch (i) { case 1: var index = collection[j].ChildNodes[i].InnerText.Replace(" ", " ").LastIndexOf(" ("); if (index > 0) { character.CharacterName = collection[j].ChildNodes[i].InnerText.Replace(" ", " ").Substring(0, index); } else { character.CharacterName = collection[j].ChildNodes[i].InnerText.Replace(" ", " "); } break; case 3: character.Vocation = collection[j].ChildNodes[i].InnerText; break; case 5: character.Level = int.Parse(collection[j].ChildNodes[i].InnerText); break; case 9: character.Status = collection[j].ChildNodes[i].InnerText; break; } } character.Guild = guild; list.Add(character); } else { for (int i = 2; i < collection[j].ChildNodes.Count; i += 2) { if (collection[j].ChildNodes[10].InnerText == "offline") { continue; } switch (i) { case 2: var index = collection[j].ChildNodes[i].InnerText.Replace(" ", " ").LastIndexOf(" ("); if (index > 0) { character.CharacterName = collection[j].ChildNodes[i].InnerText.Replace(" ", " ").Substring(0, index); } else { character.CharacterName = collection[j].ChildNodes[i].InnerText.Replace(" ", " "); } break; case 4: character.Vocation = collection[j].ChildNodes[i].InnerText; break; case 6: character.Level = int.Parse(collection[j].ChildNodes[i].InnerText); break; case 10: character.Status = collection[j].ChildNodes[i].InnerText; break; } } character.Guild = guild; if (!String.IsNullOrEmpty(character.Status)) { list.Add(character); } } } } return(list); }