Exemple #1
0
        public ContinentPageSection(HAPConnection connection, ILogger logger)
        {
            this.Parsers = new List <IElementParser <IElement <IValue>, IValue, HtmlNode> >()
            {
                new Parsers.HtmlAgilityPack.Continent.NameParser {
                    Converter = new StringConverter()
                },
                new Parsers.HtmlAgilityPack.Continent.ContinentCodeParser {
                    Converter = new ContinentCodeConverter()
                },
            };

            this.GetElementsNodes = () =>
            {
                IList <(HtmlNode key, HtmlNode value)> elements = new List <(HtmlNode, HtmlNode)>();
                connection.GetNodeFunc = () => { return(connection.doc.DocumentNode); };

                elements.Add((null, connection.GetNode()));

                return(elements);
            };

            this.Parsers.ToList().ForEach(p => p.OnSuccess += (o, e) => logger.LogMessage(LogLevel.Info, new List <string> {
                $"EVT: Parsing element Success.", $"DO: {e.Element.name}"
            }));
            this.Parsers.ToList().ForEach(p => p.OnFailure += (o, e) => logger.LogException(LogLevel.Warning, new List <string> {
                $"EVT: Parsing Error on node {e.Node?.Name}.", $"DO: {e.Element.name}", $"INNER_TEXT: {e.Node?.InnerText}"
            }, e.Exception));
        }
Exemple #2
0
        public ContinentPage(HAPConnection connection, ILogger logger) : base(connection)
        {
            this.Domain = new Continent();

            this.Sections = new List <ISection <IElement <IValue>, IValue, HtmlNode> >
            {
                new ContinentPageSection(connection, logger),
                new ContinentCompetitionsPageSection(connection, logger)
            };

            this.OnBeforeParse += (o, e) => {
                logger.LogMessage(LogLevel.Milestone, new List <string> {
                    $"EVT: Started parsing.", $"URL: {e.Url}"
                });
            };

            this.OnAfterParse += (o, e) => {
                logger.LogMessage(LogLevel.Milestone, new List <string> {
                    $"EVT: Finished parsing.", $"URL: {e.Url}"
                });
            };
        }
Exemple #3
0
        public CompetitionClubsPageSection(HAPConnection connection, ILogger logger)
        {
            this.Page = new ClubPage(connection, logger);

            this.GetUrls = () =>
            {
                IList <string> urls = new List <string>();

                HtmlNode table = connection.GetNode().SelectSingleNode("//div[@id='yw1']/table[@class='items']");
                if (table == null)
                {
                    return(null);
                }

                var rows = table.SelectNodes(".//tbody/tr[td]");
                // each row is a club
                foreach (var row in rows)
                {
                    //each column is an attribute
                    HtmlNodeCollection cols = row.SelectNodes("td");

                    try
                    {
                        string clubUrl      = GetClubUrl(cols[2]);
                        string finalClubUrl = TransformUrl(clubUrl, BaseURL, SimpleClubUrlFormat, PlusClubUrlFormat, IdentifiersGetterPattern, IdentifiersSetterPattern);

                        urls.Add(finalClubUrl);
                    }
                    catch (Exception ex)
                    {
                        logger.LogException(LogLevel.Error, new List <string> {
                            "EVT: Error collecting Club urls"
                        }, ex);
                    }
                }

                return(urls);
            };
        }
Exemple #4
0
        public ContinentCompetitionsPageSection(HAPConnection connection, ILogger logger)
        {
            this.Page = new CompetitionPage(connection, logger);

            this.GetUrls = () =>
            {
                IList <string> urls = new List <string>();

                HtmlNode table = connection.GetNode().SelectSingleNode("//div[@id='yw1']/table[@class='items']");
                if (table == null)
                {
                    return(null);
                }

                var rows = table.SelectNodes(".//tbody/tr[@class='odd']|.//tbody/tr[@class='even']");
                // each row is a Competiton
                foreach (var row in rows)
                {
                    HtmlNodeCollection cols = row.SelectNodes("td");

                    try
                    {
                        string competitionUrl      = GetCompetitionUrl(cols[0]);
                        string finalCompetitionUrl = TransformUrl(competitionUrl, BaseURL);

                        urls.Add(finalCompetitionUrl);
                    }
                    catch (Exception ex)
                    {
                        logger.LogException(LogLevel.Error, new List <string> {
                            "EVT: Error collecting Competition urls"
                        }, ex);
                    }
                }

                return(urls);
            };
        }
Exemple #5
0
        public ClubPlayersPageSection(HAPConnection connection, ILogger logger)
        {
            this.Parsers = new List <IElementParser <IElement <IValue>, IValue, HtmlNode> >()
            {
                new Parsers.HtmlAgilityPack.Player.NameParser {
                    Converter = new StringConverter()
                },
                new Parsers.HtmlAgilityPack.Player.ShortNameParser {
                    Converter = new StringConverter()
                },
                new Parsers.HtmlAgilityPack.Player.BirthDateParser {
                    Converter = new DateConverter()
                },
                new Parsers.HtmlAgilityPack.Player.NationalityParser {
                    Converter = new NationalityConverter()
                },
                new Parsers.HtmlAgilityPack.Player.HeightParser {
                    Converter = new IntConverter()
                },
                new Parsers.HtmlAgilityPack.Player.PreferredFootParser {
                    Converter = new FootConverter()
                },
                new Parsers.HtmlAgilityPack.Player.PositionParser {
                    Converter = new PositionConverter()
                },
                new Parsers.HtmlAgilityPack.Player.ShirtNumberParser {
                    Converter = new IntConverter()
                },
                new Parsers.HtmlAgilityPack.Player.CaptainParser {
                    Converter = new IntConverter()
                },
                new Parsers.HtmlAgilityPack.Player.ClubArrivalDateParser {
                    Converter = new DateConverter()
                },
                new Parsers.HtmlAgilityPack.Player.ContractExpirationDateParser {
                    Converter = new DateConverter()
                },
                new Parsers.HtmlAgilityPack.Player.MarketValueParser {
                    Converter = new DecimalConverter()
                },
                new Parsers.HtmlAgilityPack.Player.ImgUrlParser {
                    Converter = new StringConverter()
                },
                new Parsers.HtmlAgilityPack.Player.ProfileUrlParser {
                    Converter = new StringConverter()
                }
            };

            this.GetChildsNodes = () =>
            {
                IList <List <(HtmlNode key, HtmlNode value)> > playersNodes = new List <List <(HtmlNode, HtmlNode)> >();
                connection.GetNodeFunc = () => { return(connection.doc.DocumentNode); };

                HtmlNode table = connection.GetNode().SelectSingleNode("//table[@class='items']");
                if (table == null)
                {
                    return(playersNodes);
                }

                var headers = table.SelectNodes(".//thead/tr[th]");
                var rows    = table.SelectNodes(".//tbody/tr[td]");
                HtmlNodeCollection headerCols = headers[0].SelectNodes("th");

                //each row is a player
                foreach (var row in rows)
                {
                    List <(HtmlNode key, HtmlNode value)> attribs = new List <(HtmlNode key, HtmlNode value)>();

                    playersNodes.Add(attribs);

                    //TODO: consider passing the whole tr instead of tds
                    //each column is an attribute
                    HtmlNodeCollection cols = row.SelectNodes("td");

                    for (int i = 0; i < cols.Count; i++)
                    {
                        var header  = headerCols[i];
                        var element = cols[i];

                        attribs.Add((header, element));
                    }
                }

                return(playersNodes);
            };

            this.Parsers.ToList().ForEach(p => p.OnSuccess += (o, e) => logger.LogMessage(LogLevel.Info, new List <string> {
                $"EVT: Success parsing.", $"DO: {e.Element.name}"
            }));
            this.Parsers.ToList().ForEach(p => p.OnFailure += (o, e) => logger.LogException(LogLevel.Warning, new List <string> {
                $"EVT: Error parsing on node {e.Node?.Name}.", $"DO: {e.Element.name}", $"INNER_TEXT: {e.Node?.InnerText}", $"INNER_HTML: {e.Node?.InnerHtml}"
            }, e.Exception));
        }