Ejemplo n.º 1
0
        /// <summary>
        /// Gets an instance of Team by providing the team page URL
        /// </summary>
        /// <param name="TeamURL">The URL to the team's page</param>
        public static async Task <Team> GetInstanceAsync(string TeamURL)
        {
            var match = System.Text.RegularExpressions.Regex.Match(TeamURL, AnalyzerConstants.TeamUrlPattern, System.Text.RegularExpressions.RegexOptions.IgnoreCase);

            if (!match.Success)
            {
                ErrorHandling.Error("The URL provided is not a Team URL");
                return(null);
            }

            var parser = new UriParser(TeamURL);
            var result = await parser.ParseSingleAsync();

            var doc = new HtmlDocument();

            doc.LoadHtml(result);

            var team = new Team(doc.DocumentNode)
            {
                Url = TeamURL
            };

            return(team);
        }
Ejemplo n.º 2
0
        public static async Task <Dictionary <Season, List <string> > > ParseMatchLinksAsync(KeyValuePair <Season, Division> SeasonDiv, string teamShortName)
        {
            var matchUrls = new List <string>();
            var div       = SeasonDiv.Value;
            var season    = SeasonDiv.Key;
            var parser    = new UriParser(div.Url);
            var retVal    = new Dictionary <Season, List <string> >();

            var result = await parser.ParseSingleAsync();

            var doc = new HtmlDocument();

            doc.LoadHtml(result);

            try
            {
                var tblMatches = doc.DocumentNode.SelectSingleNode("//table[@class='league_table_matches']");
                var trMatches  = tblMatches.Elements("tr");

                foreach (var tr in trMatches)
                {
                    // skip "Spieltag X" and empty cells
                    if (tr.Elements("th").Count() > 0)
                    {
                        continue;
                    }

                    var matchUrl = tr.SelectSingleNode("td/a").GetAttributeValue("href", "");
                    if (string.IsNullOrEmpty(matchUrl))
                    {
                        throw new Exception("Could not fetch MatchUrl");
                    }

                    var teamFound = false;

                    var teamColumns = tr.SelectNodes("td/a");

                    // get 2nd and 3rd column anchors
                    for (var i = 1; i <= 2 && !teamFound; i++)
                    {
                        var col       = teamColumns[i];
                        var shortName = col.InnerText.Trim();
                        if (i == 2)
                        {
                            var regExName = System.Text.RegularExpressions.Regex.Match(col.InnerText, AnalyzerConstants.DivisonOverviewThirdColumnTeamNamePattern); // very long
                            if (!regExName.Success)
                            {
                                ErrorHandling.Log($"RegEx for getting the second team's name failed. MatchUrl: \"{ matchUrl }\"");
                                break;
                            }

                            shortName = regExName.Groups[1].Value;
                        }
                        if (shortName == teamShortName)
                        {
                            teamFound = true;
                        }
                    }

                    if (teamFound)
                    {
                        matchUrls.Add(matchUrl);
                    }
                }

                retVal.Add(season, matchUrls);
            }
            catch (Exception x)
            {
                ErrorHandling.Error($"Could not parse Matchlinks for Season \"{ season.Name }\"");
                ErrorHandling.Log($"Exception Message: { x.Message }");
            }

            return(retVal);
        }