示例#1
0
文件: Program.cs 项目: pollacm/RML
        private static List <ITrophy> AssignTrophies(Week currentWeek, List <PlayerOfTheWeek> opsOfTheWeek, List <PlayerOfTheWeek> dpsOfTheWeek, ChromeDriver driver)
        {
            var trophies = new List <ITrophy>();

            //500 club
            var winners = currentWeek.Scores.Where(s => s.AwayTeam.TeamPoints >= 500 && s.AwayTeam.TeamPoints < 600).Select(s => s.AwayTeam).ToList();

            winners.AddRange(currentWeek.Scores.Where(s => s.HomeTeam.TeamPoints >= 500 && s.HomeTeam.TeamPoints < 600).Select(s => s.HomeTeam));

            var trophyAssigner = new TrophyAssigner(driver, year);

            foreach (var team in winners.OrderByDescending(t => t.TeamPoints))
            {
                trophies.Add(trophyAssigner.AssignTrophy(currentWeek, team, new FiveHundredClubTrophy(team, string.Empty)));
            }

            //600 club
            winners = currentWeek.Scores.Where(s => s.AwayTeam.TeamPoints >= 600 && s.AwayTeam.TeamPoints < 700).Select(s => s.AwayTeam).ToList();
            winners.AddRange(currentWeek.Scores.Where(s => s.HomeTeam.TeamPoints >= 600 && s.HomeTeam.TeamPoints < 700).Select(s => s.HomeTeam));
            foreach (var team in winners.OrderByDescending(t => t.TeamPoints))
            {
                trophies.Add(trophyAssigner.AssignTrophy(currentWeek, team, new SixHundredClubTrophy(team, string.Empty)));
            }

            //700 club
            winners = currentWeek.Scores.Where(s => s.AwayTeam.TeamPoints >= 700).Select(s => s.AwayTeam).ToList();
            winners.AddRange(currentWeek.Scores.Where(s => s.HomeTeam.TeamPoints >= 700).Select(s => s.HomeTeam));
            foreach (var team in winners.OrderByDescending(t => t.TeamPoints))
            {
                trophies.Add(trophyAssigner.AssignTrophy(currentWeek, team, new SevenHundredClubTrophy(team, string.Empty)));
            }

            //ballers/losers
            var largestMargin            = currentWeek.Scores.OrderByDescending(s => s.MarginOfVictory).First().MarginOfVictory;
            var ballersAndMeeksOfTheWeek = currentWeek.Scores.Where(s => s.MarginOfVictory == largestMargin);

            foreach (var score in ballersAndMeeksOfTheWeek)
            {
                if (score.HomeTeam.TeamPoints > score.AwayTeam.TeamPoints)
                {
                    trophies.Add(trophyAssigner.AssignTrophy(currentWeek, score.HomeTeam, new BallerOfTheWeekTrophy(score.HomeTeam, score.MarginOfVictory.ToString(CultureInfo.InvariantCulture))));
                    trophies.Add(trophyAssigner.AssignTrophy(currentWeek, score.AwayTeam, new LoserOfTheWeekTrophy(score.AwayTeam, score.MarginOfVictory.ToString(CultureInfo.InvariantCulture))));
                }
                else
                {
                    trophies.Add(trophyAssigner.AssignTrophy(currentWeek, score.AwayTeam, new BallerOfTheWeekTrophy(score.AwayTeam, score.MarginOfVictory.ToString(CultureInfo.InvariantCulture))));
                    trophies.Add(trophyAssigner.AssignTrophy(currentWeek, score.HomeTeam, new LoserOfTheWeekTrophy(score.HomeTeam, score.MarginOfVictory.ToString(CultureInfo.InvariantCulture))));
                }
            }

            Thread.Sleep(2000);
            //ops
            var teams = currentWeek.Scores.Select(s => s.HomeTeam).ToList();

            teams.AddRange(currentWeek.Scores.Select(s => s.AwayTeam));

            foreach (var op in opsOfTheWeek)
            {
                string additionalInfo = JsonConvert.SerializeObject(op);
                var    team           = teams.Single(t => t.TeamAbbreviation == op.TeamAbbreviation);
                trophies.Add(trophyAssigner.AssignTrophy(currentWeek, team, new OffensivePlayerOfTheWeekTrophy(team, additionalInfo)));
            }

            //dps
            foreach (var dp in dpsOfTheWeek)
            {
                string additionalInfo = JsonConvert.SerializeObject(dp);
                var    team           = teams.Single(t => t.TeamAbbreviation == dp.TeamAbbreviation);
                trophies.Add(trophyAssigner.AssignTrophy(currentWeek, team, new DefensivePlayerOfTheWeekTrophy(team, additionalInfo)));
            }

            if (currentWeek.WeekNumber == 13)
            {
                var rankingGenerator = new RankingGenerator(driver, year);
                var rankings         = rankingGenerator.GenerateRankings();

                //#1 ranked
                var topRanked     = rankings.OrderBy(r => r.Rank).First();
                var topRankedTeam = teams.Single(t => t.TeamName == topRanked.Team);
                trophies.Add(trophyAssigner.AssignTrophy(currentWeek, topRankedTeam, new TopRankedSeasonTrophy(topRankedTeam, topRanked.Team)));

                //top scoring
                var standings = new StandingsGenerator(driver, year).GenerateStandings();
                var highestScoringStanding = standings.OrderByDescending(s => s.PointsFor).First();
                var standingInfo           = JsonConvert.SerializeObject(highestScoringStanding);
                var highestScoringTeam     = teams.Single(t => t.TeamName == highestScoringStanding.Team);
                trophies.Add(trophyAssigner.AssignTrophy(currentWeek, highestScoringTeam, new HighestScoringSeasonTrophy(highestScoringTeam, standingInfo)));

                //OPOY
                driver.Navigate().GoToUrl($"http://games.espn.com/ffl/freeagency?leagueId=127291&seasonId={year}");
                driver.WaitUntilElementExists(By.Id("playerTableContainerDiv"));

                var opLink = driver.FindElement(By.XPath("//ul[@class='filterToolsOptionSet']/li/a[contains(.,'OP')]"));
                opLink.Click();

                Thread.Sleep(2000);

                var opRows       = driver.FindElements(By.XPath("//tr[contains(@class, 'pncPlayerRow')]/td[3][not(contains(.,'FA'))]/parent::tr"));
                var opsOfTheYear = new List <PlayerOfTheWeek>();
                var topPoints    = 0m;
                foreach (var opRow in opRows)
                {
                    var rowPoints = decimal.Parse(opRow.FindElement(By.XPath("./td[contains(@class, 'sortedCell')]")).Text);
                    if (rowPoints >= topPoints)
                    {
                        topPoints = rowPoints;
                    }
                    else
                    {
                        break;
                    }

                    var opOfTheYear = new PlayerOfTheWeek();
                    opOfTheYear.Name             = opRow.FindElement(By.XPath("./td[@class='playertablePlayerName']/a")).Text;
                    opOfTheYear.Team             = opRow.FindElement(By.XPath("./td[3]/a")).GetAttribute("title");
                    opOfTheYear.TeamAbbreviation = opRow.FindElement(By.XPath("./td[3]/a")).Text;
                    opOfTheYear.PlayerId         = int.Parse(opRow.FindElement(By.XPath("./td[@class='playertablePlayerName']/a")).GetAttribute("playerid"));
                    opOfTheYear.Points           = rowPoints;

                    opsOfTheYear.Add(opOfTheYear);
                }

                //DPOY
                var dpLink = driver.FindElement(By.XPath("//ul[@class='filterToolsOptionSet']/li/a[contains(.,'DP')]"));
                dpLink.Click();
                var dpsOfTheYear = new List <PlayerOfTheWeek>();
                Thread.Sleep(2000);

                var dpRows = driver.FindElements(By.XPath("//tr[contains(@class, 'pncPlayerRow')]/td[3][not(contains(.,'FA'))]/parent::tr"));
                topPoints = 0m;
                foreach (var dpRow in dpRows)
                {
                    var rowPoints = decimal.Parse(dpRow.FindElement(By.XPath("./td[contains(@class, 'sortedCell')]")).Text);
                    if (rowPoints >= topPoints)
                    {
                        topPoints = rowPoints;
                    }
                    else
                    {
                        break;
                    }

                    var dpOfTheYear = new PlayerOfTheWeek();
                    dpOfTheYear.Name             = dpRow.FindElement(By.XPath("./td[@class='playertablePlayerName']/a")).Text;
                    dpOfTheYear.Team             = dpRow.FindElement(By.XPath("./td[3]/a")).GetAttribute("title");
                    dpOfTheYear.TeamAbbreviation = dpRow.FindElement(By.XPath("./td[3]/a")).Text;
                    dpOfTheYear.PlayerId         = int.Parse(dpRow.FindElement(By.XPath("./td[@class='playertablePlayerName']/a")).GetAttribute("playerid"));
                    dpOfTheYear.Points           = rowPoints;
                    dpsOfTheYear.Add(dpOfTheYear);
                }

                foreach (var opOfTheYear in opsOfTheYear)
                {
                    var additionalInfo = JsonConvert.SerializeObject(opOfTheYear);
                    var opoyTeam       = teams.Single(t => t.TeamName == opOfTheYear.Team);
                    trophies.Add(trophyAssigner.AssignTrophy(currentWeek, opoyTeam, new OffensivePlayerOfTheYearTrophy(opoyTeam, additionalInfo)));
                }

                foreach (var dpOfTheYear in dpsOfTheYear)
                {
                    var additionalInfo = JsonConvert.SerializeObject(dpOfTheYear);
                    var dpoyTeam       = teams.Single(t => t.TeamName == dpOfTheYear.Team);
                    trophies.Add(trophyAssigner.AssignTrophy(currentWeek, dpoyTeam, new DefensivePlayerOfTheYearTrophy(dpoyTeam, additionalInfo)));
                }

                //NFC champ
                var nfcChamp            = rankings.Where(s => s.Division == "NFC").OrderBy(s => s.Rank).First();
                var nfcChampionshipTeam = teams.Single(t => t.TeamName == nfcChamp.Team);
                trophies.Add(trophyAssigner.AssignTrophy(currentWeek, nfcChampionshipTeam, new NfcDivisionChampionshipTrophy(nfcChampionshipTeam, string.Empty)));
                //AFC champ
                var afcChamp            = rankings.Where(s => s.Division == "AFC").OrderBy(s => s.Rank).First();
                var afcChampionshipTeam = teams.Single(t => t.TeamName == afcChamp.Team);
                trophies.Add(trophyAssigner.AssignTrophy(currentWeek, afcChampionshipTeam, new AfcDivisionChampionshipTrophy(afcChampionshipTeam, string.Empty)));

                //#12 ranked
                var bottomRanked     = rankings.OrderByDescending(r => r.Rank).First();
                var bottomRankedTeam = teams.Single(t => t.TeamName == bottomRanked.Team);
                trophies.Add(trophyAssigner.AssignTrophy(currentWeek, bottomRankedTeam, new BottomRankedSeasonTrophy(bottomRankedTeam, bottomRanked.Team)));
            }

            return(trophies);
        }
示例#2
0
文件: Program.cs 项目: pollacm/RML
        private static void Main(string[] args)
        {
            var options = new ChromeOptions();
            //options.AddArgument("--headless");
            var driver = new ChromeDriver(options);

            //new ReturnerBuilder(driver).GenerateReturners();

            //login

            driver.Navigate().GoToUrl($"http://games.espn.com/ffl/standings?leagueId=127291&seasonId={year}");
            driver.SwitchTo().Frame("disneyid-iframe");
            var userNameBox = driver.FindElement(By.CssSelector("div.field-username-email input"));

            userNameBox.SendKeys(Keys.ArrowDown);
            userNameBox.SendKeys("*****@*****.**");

            var passwordBox = driver.FindElement(By.CssSelector("div.field-password input"));

            passwordBox.SendKeys(Keys.ArrowDown);
            passwordBox.SendKeys("grip1334");
            passwordBox.SendKeys(Keys.Enter);
            Thread.Sleep(2000);

            driver.Manage().Timeouts().PageLoad = new TimeSpan(0, 0, 0, 5);

            //var rmlPlayerBuilder = new RmlPlayerBuilder(driver, 2018);
            //var rmlPlayers = rmlPlayerBuilder.BuildRmlPlayers();
            //var rmlPlayerRepository = new RmlPlayerRepository();

            //rmlPlayerRepository.RefreshRmlPlayers(rmlPlayers);

            //var rmlPlayers = rmlPlayerRepository.GetRmlPlayers();

            //var sitePlayerBuilder = new SitePlayerBuilder(driver);
            //var sitePlayers = sitePlayerBuilder.BuildSitePlayers();
            //sitePlayerRepository.RefreshSitePlayers(sitePlayers);

            //var sitePlayerRepository = new SitePlayerRepository();
            //var sitePlayers = sitePlayerRepository.GetSitePlayers();

            //Console.WriteLine("Writing returner File:");
            //new PrintPlayerComparerService(sitePlayers.OrderBy(p => p.Name).ToList(), rmlPlayers).WritePlayerComparerFile();
            //Console.WriteLine("Writing returner File COMPLETE");

            //postDraftRankings
            //var postDraftRankingGenerator = new PostDraftRankingGenerator(driver);
            //postDraftRankingGenerator.GenerateRankings();

            //driver.Manage().Timeouts().PageLoad = new TimeSpan(0, 0, 0, 5);

            //get teams
            //var teamBuilder = new TeamBuilder(driver, year);
            //var teamRepository = new TeamRepository();

            //var teams = teamBuilder.BuildTeams();
            //teamRepository.RefreshTeams(teams);
            //var teams = teamRepository.GetTeams();

            driver.WaitUntilElementExists(By.CssSelector("table.tableBody"));

            //OPS
            driver.Navigate().GoToUrl($"http://games.espn.com/ffl/freeagency?leagueId=127291&seasonId={year}");
            driver.WaitUntilElementExists(By.Id("playerTableContainerDiv"));

            var opLink = driver.FindElement(By.XPath("//ul[@class='filterToolsOptionSet']/li/a[contains(.,'OP')]"));

            opLink.Click();

            Thread.Sleep(2000);

            var onRosterLink = driver.FindElement(By.XPath("//ul[@class='filterToolsOptionSet']/li/a[contains(.,'On Rosters')]"));

            onRosterLink.Click();

            Thread.Sleep(2000);

            var lastLink = driver.FindElement(By.XPath("//tr[contains(@class, 'playerTableBgRowSubhead')]/td/a[contains(.,'LAST')]"));

            lastLink.Click();

            Thread.Sleep(5000);

            var opRows       = driver.FindElements(By.XPath("//tr[contains(@class, 'pncPlayerRow')]/td[3][not(contains(.,'FA'))]/parent::tr"));
            var opsOfTheWeek = new List <PlayerOfTheWeek>();
            var topPoints    = 0m;

            foreach (var opRow in opRows)
            {
                var rowPoints = decimal.Parse(opRow.FindElement(By.XPath("./td[contains(@class, 'sortedCell')]")).Text);
                if (rowPoints >= topPoints)
                {
                    topPoints = rowPoints;
                }
                else
                {
                    break;
                }

                var opOfTheWeek = new PlayerOfTheWeek();
                opOfTheWeek.Name             = opRow.FindElement(By.XPath("./td[@class='playertablePlayerName']/a")).Text;
                opOfTheWeek.Team             = opRow.FindElement(By.XPath("./td[3]/a")).GetAttribute("title");
                opOfTheWeek.TeamAbbreviation = opRow.FindElement(By.XPath("./td[3]/a")).Text;
                opOfTheWeek.PlayerId         = int.Parse(opRow.FindElement(By.XPath("./td[@class='playertablePlayerName']/a")).GetAttribute("playerid"));
                opOfTheWeek.Points           = rowPoints;

                opRow.FindElement(By.XPath("./td[@class='playertablePlayerName']/a")).Click();
                Thread.Sleep(2000);
                opOfTheWeek.TeamAgainstAbbreviation = driver.FindElement(By.XPath($"//div[@id='pcBorder']/table/tbody/tr[{week + 1}]/td[2]/a")).Text;

                driver.FindElement(By.XPath("//img[@id='fpop_closebtn']")).Click();
                Thread.Sleep(500);

                opsOfTheWeek.Add(opOfTheWeek);
            }

            //DPS
            var dpLink = driver.FindElement(By.XPath("//ul[@class='filterToolsOptionSet']/li/a[contains(.,'DP')]"));

            dpLink.Click();

            Thread.Sleep(2000);

            var dpRows       = driver.FindElements(By.XPath("//tr[contains(@class, 'pncPlayerRow')]/td[3][not(contains(.,'FA'))]/parent::tr"));
            var dpsOfTheWeek = new List <PlayerOfTheWeek>();

            topPoints = 0m;
            foreach (var dpRow in dpRows)
            {
                var rowPoints = decimal.Parse(dpRow.FindElement(By.XPath("./td[contains(@class, 'sortedCell')]")).Text);
                if (rowPoints >= topPoints)
                {
                    topPoints = rowPoints;
                }
                else
                {
                    break;
                }

                var dpOfTheWeek = new PlayerOfTheWeek();
                dpOfTheWeek.Name             = dpRow.FindElement(By.XPath("./td[@class='playertablePlayerName']/a")).Text;
                dpOfTheWeek.Team             = dpRow.FindElement(By.XPath("./td[3]/a")).GetAttribute("title");
                dpOfTheWeek.TeamAbbreviation = dpRow.FindElement(By.XPath("./td[3]/a")).Text;
                dpOfTheWeek.PlayerId         = int.Parse(dpRow.FindElement(By.XPath("./td[@class='playertablePlayerName']/a")).GetAttribute("playerid"));
                dpOfTheWeek.Points           = rowPoints;

                dpRow.FindElement(By.XPath("./td[@class='playertablePlayerName']/a")).Click();
                Thread.Sleep(2000);
                dpOfTheWeek.TeamAgainstAbbreviation = driver.FindElement(By.XPath($"//div[@id='pcBorder']/table/tbody/tr[{week + 1}]/td[2]/a")).Text;

                driver.FindElement(By.XPath("//img[@id='fpop_closebtn']")).Click();
                Thread.Sleep(500);

                dpsOfTheWeek.Add(dpOfTheWeek);
            }

            var weekRepository = new WeekRepository();
            var powerRankings  = GetPowerRankings(driver, weekRepository);
            var currentWeek    = weekRepository.GetWeek(driver, week, year);

            var weeklyPayoutTeams = string.Empty;

            for (var i = 1; i <= week; i++)
            {
                var weekForWeeklyPayouts  = weekRepository.GetWeek(driver, i, year);
                var teamsForWeeklyPayouts = weekForWeeklyPayouts.Scores.Select(s => s.AwayTeam).ToList();
                teamsForWeeklyPayouts.AddRange(weekForWeeklyPayouts.Scores.Select(s => s.HomeTeam));
                weeklyPayoutTeams += i + ". " + teamsForWeeklyPayouts.OrderByDescending(t => t.TeamPoints).First().TeamName.ToUpper() + @"
                ";
            }

            List <ITrophy> trophies = new List <ITrophy>();

            //Console.WriteLine("Do you want to assign trophies? (Y/N[default])");
            //var assignTrophiesInput = Console.ReadLine();

            //if (assignTrophiesInput == "Y")
            //{
            trophies = AssignTrophies(currentWeek, opsOfTheWeek, dpsOfTheWeek, driver);
            //}

            CreateLeaguePage(powerRankings, weeklyPayoutTeams, trophies, currentWeek, week);
            var x = 1;
        }