private static Team AddTeamToContext(PlayerContext context, string teamName, League selectedLeague, HtmlNodeCollection nodesTeams, string patternClearHtml) { var shiftNode = 0; var manager = AddMangerToContext(context, nodesTeams, out shiftNode); var stadium = AddStadiumToContext(context, nodesTeams, selectedLeague.NationalityId, shiftNode); var wikiTeam = SeedWikipedia.GetWiki(teamName).Result; var formed = Regex.Match(Regex.Replace(nodesTeams[1].InnerText, patternClearHtml, "").Trim(), @"^\d+").ToString(); if (formed == "") { formed = "0"; } var selectedTeam = new Team { Name = teamName, Stadium = stadium, Manager = manager, League = selectedLeague, Formed = Convert.ToInt32(formed), Description = wikiTeam.Description, WikiLink = wikiTeam.Link }; context.Teams.Add(selectedTeam); context.SaveChanges(); return(selectedTeam); }
private static int GetReferee(string matchReferee, int refereeCountry, MatchContext context) { var nameReferee = matchReferee.Substring(0, 1); var surnameReferee = matchReferee.Substring(2, matchReferee.Length - 2); if (!context.Referees.Any(n => n.Name == nameReferee && n.Surname == surnameReferee)) { var wikiReferee = SeedWikipedia.GetWiki(matchReferee + " referee").Result; var referee = new Referee { Name = matchReferee.Substring(0, 1), Surname = matchReferee.Substring(2, matchReferee.Length - 2), PngImage = "No data", Nationality = context.Nationalities.FirstOrDefault(n => n.NationalityId == refereeCountry), Description = wikiReferee.Description, WikiLink = wikiReferee.Link }; context.Referees.Add(referee); context.SaveChanges(); } var refereeId = context.Referees.FirstOrDefault(n => n.Name == nameReferee && n.Surname == surnameReferee) .RefereeId; return(refereeId); }
private static Stadium AddStadiumToContext(PlayerContext context, HtmlNodeCollection nodesTeams, int idNationality, int shiftNode) { var patternStadiumCapacity = $@"(?<=\()\d.+?(?=\))| |&|\r\n|"|\r|\n|\s\s+|\t+"; var nodeStadium = nodesTeams[2 + shiftNode].InnerText; var nameStadium = Regex.Replace(nodeStadium, patternStadiumCapacity, " ") .Replace("( )", "") .Trim(); if (nameStadium == "" || Regex.IsMatch(nameStadium, @"\d")) { var nodeStadiumWithNull = nodesTeams[2].ParentNode.SelectNodes(@".//i"); if (nodeStadiumWithNull != null) { nodeStadium = nodeStadiumWithNull.First().InnerText; nameStadium = Regex.Replace(nodeStadium, patternStadiumCapacity, " ") .Replace("( )", "") .Trim(); } } if (nameStadium == "") { return(context.Stadium.FirstOrDefault(s => s.Name == "No data")); } patternStadiumCapacity = @"(?<=\()\d.+?(?=\))"; var capacityStadium = Regex.Match(nodeStadium, patternStadiumCapacity) .ToString() .Replace(",", ""); if (capacityStadium == "") { capacityStadium = "0"; } var wikiStadium = SeedWikipedia.GetWiki(nameStadium).Result; var selectedStadium = new Stadium { Name = HtmlEntity.DeEntitize(nameStadium), Capacity = Convert.ToInt32(capacityStadium), NationalityId = idNationality, Description = wikiStadium.Description, WikiLink = wikiStadium.Link }; return(selectedStadium); }
private static Manager AddMangerToContext(PlayerContext context, HtmlNodeCollection nodesTeams, out int shiftNode) { shiftNode = 0; var patternNameManager = $@"\s(?s).*"; var patternClearManager = $@"\r|\n| +.|(?=\[).+?(?=\]).|&|\r\n|\s\s+"; var patternCountryManger = $@"(?<=\[).+?(?=\])"; var countryManagerNode = nodesTeams[3].InnerText; var nameSurnameManager = Regex.Replace(nodesTeams[3].InnerText, patternClearManager, " ").Trim(); if (nameSurnameManager == "" || nameSurnameManager == " " || nameSurnameManager == "TBD") { nameSurnameManager = Regex.Replace(nodesTeams[3].ParentNode.SelectNodes(@".//i").Last().InnerText, patternClearManager, ""); if (nameSurnameManager == "" || nameSurnameManager == " " || nameSurnameManager == "TBD") { return(context.Managers.FirstOrDefault(m => m.Surname == "No data")); } } if (Regex.IsMatch(nameSurnameManager, @"\(")) { nameSurnameManager = Regex.Replace(nodesTeams[4].InnerText, patternClearManager, " "); shiftNode++; } else if (Regex.IsMatch(nameSurnameManager, "All Rights")) { nameSurnameManager = Regex.Replace(nodesTeams[2].InnerText, patternClearManager, " "); shiftNode--; } string nameManager = HtmlEntity.DeEntitize(Regex.Replace(nameSurnameManager.Trim(), patternNameManager, "")); string surnameManager = HtmlEntity.DeEntitize(Regex.Match(nameSurnameManager.Trim(), patternNameManager).ToString()); var countryManager = Regex.Match(countryManagerNode, patternCountryManger).ToString(); var wikiManager = SeedWikipedia.GetWiki(HtmlEntity.DeEntitize(nameSurnameManager)).Result; var selectedManager = new Manager { Name = nameManager, Surname = surnameManager, NationalityId = context.Nationalities.FirstOrDefault(n => n.FifaCodeCountry == Regex.Replace(countryManager, "GIB", "ENG")).NationalityId, Description = wikiManager.Description, WikiLink = wikiManager.Link }; return(selectedManager); }
private static void GetLeague(PlayerContext context) { var html = @"http://www.footballsquads.co.uk/squads.htm"; var web = new HtmlWeb { AutoDetectEncoding = false, OverrideEncoding = Encoding.GetEncoding("iso-8859-1") }; var htmldoc = web.Load(html); var nodesLeagueRow = htmldoc.DocumentNode.SelectNodes(@"//table/tr/td/a"); List <string> linkLeagues = new List <string>(); List <string> nameLeagues = new List <string>(); var linkToTeams = new List <string>(); var patternLinkLeagues = $@"\/.+"; var patternLinkTeams = $@"\/(?:.(?!\/))+$"; html = Regex.Replace(html, patternLinkTeams, "/"); foreach (var nodeLeagueRow in nodesLeagueRow) { linkLeagues.Add(Regex.Replace(nodeLeagueRow.Attributes["href"].Value, patternLinkLeagues, "")); nameLeagues.Add(nodeLeagueRow.InnerText); linkToTeams.Add(nodeLeagueRow.Attributes["href"].Value); } for (int i = 0; i < linkLeagues.Count; i++) { var wiki = SeedWikipedia.GetWiki(nameLeagues[i]).Result; var idNationality = FixingCountry(context, linkLeagues[i]); var selectedLeague = (new League { Name = nameLeagues[i], NationalityId = idNationality, SeasonYear = "2018/2019", Description = wiki.Description, WikiLink = wiki.Link }); context.Leagues.Add(selectedLeague); context.SaveChanges(); TeamInLeague(context, html + linkToTeams[i], selectedLeague); } }
private static void PlayersInTeam(PlayerContext context, string html, string teamName, League selectedLeague) { HtmlWeb web = new HtmlWeb { AutoDetectEncoding = false, OverrideEncoding = Encoding.GetEncoding("iso-8859-1") }; var htmlDoc = web.Load(html); var nodesTeams = htmlDoc.DocumentNode.SelectNodes($"//h3/text()"); var patternClearHtml = $@"\r|\n| +.|&|\r|\n"; var team = AddTeamToContext(context, HtmlEntity.DeEntitize(teamName), selectedLeague, nodesTeams, patternClearHtml); var nodesPlayerInTeam = htmlDoc.DocumentNode.SelectNodes("//table/tr"); List <Player> playerList = new List <Player>(); foreach (var player in nodesPlayerInTeam.Skip(1)) { Player footballer = new Player(); if (Regex.IsMatch(player.InnerText, @"no longer")) { break; } var nodes = player.SelectNodes(".//td"); var nameNode = HtmlEntity.DeEntitize(nodes[1].InnerText).Trim(); if (nameNode != "" && nameNode != " ") { var patternName = @"\s(?s).*"; var patternNbsp = @"<[^>]+>| "; var positionPlayer = Regex.Replace(nodes[3].InnerText, patternClearHtml, ""); var nationalityPlayer = Regex.Replace(nodes[2].InnerText, patternClearHtml, ""); int positionIdPlayer, nationalityIdPlayer; if (positionPlayer == "") { positionIdPlayer = context.Positions.FirstOrDefault(p => p.ShortCode == "No").PositionId; } else { positionIdPlayer = context.Positions.FirstOrDefault(p => p.ShortCode == positionPlayer.Trim()) .PositionId; } if (nationalityPlayer == "") { nationalityIdPlayer = context.Nationalities .FirstOrDefault(p => p.CodeCountryThreeChars == "000") .NationalityId; } else { nationalityIdPlayer = context.Nationalities.FirstOrDefault(p => p.FifaCodeCountry == Regex.Replace(Regex.Replace(Regex.Replace(Regex.Replace(Regex.Replace(Regex.Replace(Regex.Replace(nationalityPlayer.Trim(), "EMG|END", "ENG"), "SWA", "WAL"), "KVZ", "KVX"), "SEB", "SRB"), "GMB", "GAM"), "CUW", "ECU"), "NEL", "BEL")) .NationalityId; } var dateOfBirthPlayer = GetDateOfBirthPlayer(nodes, patternClearHtml); footballer.ShirtNumber = Regex.Replace(nodes[0].InnerText.Trim(), patternNbsp, "") != "" ? Convert.ToInt16(Regex.Match(nodes[0].InnerText.Trim(), @"\d+").Value) : 0; footballer.Name = Regex.Replace(nameNode, patternName, ""); footballer.Surname = Regex.Match(nameNode, patternName).ToString().Trim(); footballer.PositionId = positionIdPlayer; footballer.NationalityId = nationalityIdPlayer; footballer.Height = Regex.Replace(nodes[4].InnerText, patternNbsp, "") != "" ? Convert.ToInt16(Regex.Replace(nodes[4].InnerText.Replace(".", ""), patternNbsp, "")) : 0; footballer.Weight = Regex.Replace(nodes[5].InnerText, patternNbsp, "") != "" ? Convert.ToInt16(Regex.Replace(nodes[5].InnerText, patternNbsp, "")) : 0; footballer.DateOfBirth = dateOfBirthPlayer; footballer.TeamId = team.TeamId; var wikiSeed = SeedWikipedia.GetWiki(footballer.Name + " " + footballer.Surname).Result; footballer.WikiLink = wikiSeed.Link; footballer.Description = "0"; playerList.Add(footballer); } } context.Players.AddRange(playerList); context.SaveChanges(); GC.Collect(); }
public static void EnsureSeedDataForContext(this NationalityContext context) { if (context.Nationalities.Any()) { return; } var html = @"https://www.worldatlas.com/aatlas/ctycodes.htm"; HtmlWeb web = new HtmlWeb { AutoDetectEncoding = false, OverrideEncoding = Encoding.GetEncoding("iso-8859-1") }; var htmldoc = web.Load(html); var nodesCountries = htmldoc.DocumentNode.SelectNodes($"//main/div/article/div/table//tr/td"); var linkCoutries = new List <Nationality>(); var fifaCodes = AddFifaCodes(); for (int i = 5; i < nodesCountries.Count - 1; i++) { var wikiData = SeedWikipedia.GetWiki(Regex.Replace(nodesCountries[i].InnerText, $"\\r\\n\\s", "").Trim()).Result; linkCoutries.Add(item: new Nationality { Name = Regex.Replace(nodesCountries[i].InnerText, $"\\r\\n\\s", "").Trim(), CodeCountryTwoChars = Regex.Replace(nodesCountries[++i].InnerText, $"\\r\\n\\s", "").Trim(), PngImage = GetImageAsBase64Url(Regex.Replace(nodesCountries[i].InnerText, $"\\r\\n\\s", "").Trim()).Result, CodeCountryThreeChars = nodesCountries[++i].InnerText, Description = wikiData.Description, WikiLink = wikiData.Link, FifaCodeCountry = fifaCodes.FirstOrDefault(f => f.Key == nodesCountries[i].InnerText).Value }); i += 2; } var wikiScot = SeedWikipedia.GetWiki("Scotland").Result; linkCoutries.Add(new Nationality { Name = "Scotland", CodeCountryThreeChars = "SCO", CodeCountryTwoChars = "SC", Description = wikiScot.Description, WikiLink = wikiScot.Link, PngImage = "No data", FifaCodeCountry = "SCO" }); wikiScot = SeedWikipedia.GetWiki("Wales").Result; linkCoutries.Add(new Nationality { Name = "Wales", CodeCountryThreeChars = "WAL", CodeCountryTwoChars = "WL", Description = wikiScot.Description, WikiLink = wikiScot.Link, PngImage = "No data", FifaCodeCountry = "WAL" }); wikiScot = SeedWikipedia.GetWiki("Northern Ireland").Result; linkCoutries.Add(new Nationality { Name = "Northern Ireland", CodeCountryThreeChars = "NIR", CodeCountryTwoChars = "NX", Description = wikiScot.Description, PngImage = "No data", WikiLink = wikiScot.Link, FifaCodeCountry = "NIR" }); wikiScot = SeedWikipedia.GetWiki("Kosovo").Result; linkCoutries.Add(new Nationality { Name = "Kosovo", CodeCountryThreeChars = "KVX", CodeCountryTwoChars = "KV", Description = wikiScot.Description, PngImage = "No data", WikiLink = wikiScot.Link, FifaCodeCountry = "KVX" }); context.Nationalities.AddRange(linkCoutries); context.SaveChanges(); }