예제 #1
0
        public Player GetPlayerStats(int playerId)
        {
            var requester = new WebPageRequester(_logger);

            var url = string.Format("{0}/{1}/", _PLAYERSTATS_PAGE, playerId);

            CookieContainer cookies  = null;
            var             response = requester.Get(url, ref cookies);

            var rawStats = JsonConvert.DeserializeObject <RawPlayerStats>(response);

            var position = (Enums.Position)Enum.Parse(typeof(Enums.Position), rawStats.PositionString);

            switch (position)
            {
            case Enums.Position.Goalkeeper:
                return(new Goalkeeper(rawStats));

            case Enums.Position.Defender:
                return(new Defender(rawStats));

            case Enums.Position.Midfielder:
                return(new Midfielder(rawStats));

            case Enums.Position.Forward:
                return(new Forward(rawStats));

            default:
                throw new ApplicationException("Unknown position " + position);
            }
        }
        public Dictionary<IClub,IEnumerable<string>> GetTeamNews()
        {
            var requester = new WebPageRequester(_logger);

            var url = _TEAMNEWS_PAGE;

            CookieContainer cookies = null;
            var response = requester.Get(url, ref cookies);

            var htmlDoc = new HtmlDocument();
            htmlDoc.LoadHtml(response);
            var contentElement = htmlDoc.GetElementbyId("content");
            var leagueTableBody = contentElement.SelectSingleNode("//div[@class='ffs-team-news']/ol[@class='news']");

            var items = leagueTableBody.Elements("li"); // force evaluation

            var result = new Dictionary<IClub, IEnumerable<string>>();
            foreach(var item in items)
            {
                var clubName = item.SelectSingleNode("h2").InnerText;
                var players = ParseExpectedTeam(item);

                var club = Clubs.GetClubFromName(clubName);

                result.Add(club, players.ToArray());
            }

            return result;

        }
        public Player GetPlayerStats(int playerId)
        {
            var requester = new WebPageRequester(_logger);

            var url = string.Format("{0}/{1}/", _PLAYERSTATS_PAGE, playerId);

            CookieContainer cookies = null;
            var response = requester.Get(url, ref cookies);

            var rawStats = JsonConvert.DeserializeObject<RawPlayerStats>(response);

            var position = (Enums.Position)Enum.Parse(typeof(Enums.Position), rawStats.PositionString);

            switch (position)
            {
                case Enums.Position.Goalkeeper:
                    return new Goalkeeper(rawStats);
                case Enums.Position.Defender:
                    return new Defender(rawStats);
                case Enums.Position.Midfielder:
                    return new Midfielder(rawStats);
                case Enums.Position.Forward:
                    return new Forward(rawStats);
                default:
                    throw new ApplicationException("Unknown position " + position);
            }
        }
        public TransferPageRetriever(ILogger logger, CookieContainer cookies)
        {
            _logger = logger;

            var requester = new WebPageRequester(_logger);
            _transfersPageHtmlString = requester.Get(_TRANSFERS_PAGE, ref cookies);
        }
        public Dictionary <IClub, IEnumerable <string> > GetTeamNews()
        {
            var requester = new WebPageRequester(_logger);

            var url = _TEAMNEWS_PAGE;

            CookieContainer cookies  = null;
            var             response = requester.Get(url, ref cookies);

            var htmlDoc = new HtmlDocument();

            htmlDoc.LoadHtml(response);
            var contentElement  = htmlDoc.GetElementbyId("content");
            var leagueTableBody = contentElement.SelectSingleNode("//div[@class='ffs-team-news']/ol[@class='news']");

            var items = leagueTableBody.Elements("li"); // force evaluation

            var result = new Dictionary <IClub, IEnumerable <string> >();

            foreach (var item in items)
            {
                var clubName = item.SelectSingleNode("h2").InnerText;
                var players  = ParseExpectedTeam(item);

                var club = Clubs.GetClubFromName(clubName);

                result.Add(club, players.ToArray());
            }

            return(result);
        }
        /// <returns>[Club => [Player Name => Player Return Date]]</returns>
        public Dictionary<IClub, Dictionary<string, DateTime>> GetInjuryNews()
        {
            var requester = new WebPageRequester(_logger);

            var url = _INJURYNEWS_PAGE;

            CookieContainer cookies = null;
            var response = requester.Get(url, ref cookies);

            var htmlDoc = new HtmlDocument();
            htmlDoc.LoadHtml(response);

            var contentElement = htmlDoc.GetElementbyId("content");
            var injuriesTableBody = contentElement.SelectSingleNode("//table[@class='ffs-ib ffs-ib-full-content ffs-ib-sort']/tbody");

            var items = injuriesTableBody.Elements("tr"); // force evaluation

            var result = new Dictionary<IClub, Dictionary<string, DateTime>>();

            foreach (var item in items)
            {
                var clubName = item.SelectSingleNode(".//td[@class='team']").GetAttributeValue("title", null);
                if (clubName == null)
                    continue;

                var allCols = item.SelectNodes("td");
                if (allCols.Count < 4)
                    continue;

                var playerName = allCols[0].InnerText.Trim();
                if (playerName.Contains('('))
                    playerName = playerName.Split('(')[0].Trim();

                var returnDateStr = allCols[3].InnerText.Trim();
                DateTime returnDate;
                if (!DateTime.TryParseExact(returnDateStr, "dd/MM/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal, out returnDate))
                    continue;


                var club = Clubs.GetClubFromName(clubName);

                Dictionary<string, DateTime> playerDict;
                if (!result.TryGetValue(club, out playerDict))
                {
                    playerDict = new Dictionary<string, DateTime>();
                    result.Add(club, playerDict);
                }

                if (playerDict.ContainsKey(playerName))
                    _logger.WriteErrorMessage(string.Format("Injury news already container entry for {0}({1})", playerName, clubName));
                else
                    playerDict.Add(playerName, returnDate);

                var i = 1;
            }

            return result;

        }
        public TransferPageRetriever(ILogger logger, CookieContainer cookies)
        {
            _logger = logger;

            var requester = new WebPageRequester(_logger);

            _transfersPageHtmlString = requester.Get(_TRANSFERS_PAGE, ref cookies);
        }
        /// <param name="cookies"></param>
        /// <param name="season">A string in the form 2012-2013</param>
        public IEnumerable<ClubSeasonPerformance> GetLeagueTable(CookieContainer cookies, string season)
        {
            var requester = new WebPageRequester(_logger);

            var url = string.Format("{0}&{1}={2}", _LEAGUETABLE_HOMEPAGE, _PARAM_SEASON, season);
            var response = requester.Get(url, ref cookies);

            var htmlDoc = new HtmlDocument();
            htmlDoc.LoadHtml(response);
            var bodyElement = htmlDoc.GetElementbyId("body");
            var leagueTableBody = bodyElement.SelectSingleNode("//table[@class='leagueTable home-away']//tbody");

            var rows = leagueTableBody.Elements("tr");

            return rows.Select(row => ParseLeagueTableRow(row));
        }
        public int GetCurrentGameweek(CookieContainer cookies)
        {
            var requester = new WebPageRequester(_logger);

            var response = requester.Get(_URL_HOMEPAGE, ref cookies);

            var htmlDoc = new HtmlDocument();
            htmlDoc.LoadHtml(response);
            var ismElement = htmlDoc.GetElementbyId("ism");
            var ismEventInfoPrimary = ismElement.SelectSingleNode("//div[@class='ism-event-info']");
            if (ismEventInfoPrimary == null) // hack for now - see if this still works once gameweek 1 starts :-)
                return 0;
            var ismMegaLargeParagraph = ismEventInfoPrimary.SelectSingleNode("//h3[@class='ism-event-info__sub-heading ism-pl-font']");
            var gameweekNum = ismMegaLargeParagraph.InnerText.Replace("Gameweek", "").Trim();

            return int.Parse(gameweekNum);
        }
        /// <param name="cookies"></param>
        /// <param name="season">A string in the form 2012-2013</param>
        public IEnumerable <ClubSeasonPerformance> GetLeagueTable(CookieContainer cookies, string season)
        {
            var requester = new WebPageRequester(_logger);

            var url      = string.Format("{0}&{1}={2}", _LEAGUETABLE_HOMEPAGE, _PARAM_SEASON, season);
            var response = requester.Get(url, ref cookies);

            var htmlDoc = new HtmlDocument();

            htmlDoc.LoadHtml(response);
            var bodyElement     = htmlDoc.GetElementbyId("body");
            var leagueTableBody = bodyElement.SelectSingleNode("//table[@class='leagueTable home-away']//tbody");

            var rows = leagueTableBody.Elements("tr");

            return(rows.Select(row => ParseLeagueTableRow(row)));
        }
        public int GetCurrentGameweek(CookieContainer cookies)
        {
            var requester = new WebPageRequester(_logger);

            var response = requester.Get(_URL_HOMEPAGE, ref cookies);

            var htmlDoc = new HtmlDocument();

            htmlDoc.LoadHtml(response);
            var ismElement          = htmlDoc.GetElementbyId("ism");
            var ismEventInfoPrimary = ismElement.SelectSingleNode("//div[@class='ism-event-info']");

            if (ismEventInfoPrimary == null) // hack for now - see if this still works once gameweek 1 starts :-)
            {
                return(0);
            }
            var ismMegaLargeParagraph = ismEventInfoPrimary.SelectSingleNode("//h3[@class='ism-event-info__sub-heading ism-pl-font']");
            var gameweekNum           = ismMegaLargeParagraph.InnerText.Replace("Gameweek", "").Trim();

            return(int.Parse(gameweekNum));
        }
예제 #12
0
        /// <returns>[Club => [Player Name => Player Return Date]]</returns>
        public Dictionary <IClub, Dictionary <string, DateTime> > GetInjuryNews()
        {
            var requester = new WebPageRequester(_logger);

            var url = _INJURYNEWS_PAGE;

            CookieContainer cookies  = null;
            var             response = requester.Get(url, ref cookies);

            var htmlDoc = new HtmlDocument();

            htmlDoc.LoadHtml(response);

            var contentElement    = htmlDoc.GetElementbyId("content");
            var injuriesTableBody = contentElement.SelectSingleNode("//table[@class='ffs-ib ffs-ib-full-content ffs-ib-sort']/tbody");

            var items = injuriesTableBody.Elements("tr"); // force evaluation

            var result = new Dictionary <IClub, Dictionary <string, DateTime> >();

            foreach (var item in items)
            {
                var clubName = item.SelectSingleNode(".//td[@class='team']").GetAttributeValue("title", null);
                if (clubName == null)
                {
                    continue;
                }

                var allCols = item.SelectNodes("td");
                if (allCols.Count < 4)
                {
                    continue;
                }

                var playerName = allCols[0].InnerText.Trim();
                if (playerName.Contains('('))
                {
                    playerName = playerName.Split('(')[0].Trim();
                }

                var      returnDateStr = allCols[3].InnerText.Trim();
                DateTime returnDate;
                if (!DateTime.TryParseExact(returnDateStr, "dd/MM/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.AssumeUniversal, out returnDate))
                {
                    continue;
                }


                var club = Clubs.GetClubFromName(clubName);

                Dictionary <string, DateTime> playerDict;
                if (!result.TryGetValue(club, out playerDict))
                {
                    playerDict = new Dictionary <string, DateTime>();
                    result.Add(club, playerDict);
                }

                if (playerDict.ContainsKey(playerName))
                {
                    _logger.WriteErrorMessage(string.Format("Injury news already container entry for {0}({1})", playerName, clubName));
                }
                else
                {
                    playerDict.Add(playerName, returnDate);
                }

                var i = 1;
            }

            return(result);
        }