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; }
/// <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)); }
/// <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); }