예제 #1
0
        public void WebScrapperToDb2016_2017()
        {
            //TODONEW: Probar a instalar y ejecutar el proyecto desde cero.
            //TODONEW: Eliminar o traducir los comentarios -> Los comentarios que quedan son relevantes. Hay que traducirlos.
            //NOTA: Debe usarse la BD de test (ver app.config)
            QuinixDbContext context = new QuinixDbContext();
            var             matches = context.Matches;

            foreach (var match in matches)
            {
                context.Remove(match);
            }
            context.SaveChanges();
            Assert.Equal(0, context.Matches.Count());

            FootballMatchesWebScrapper mrp = new FootballMatchesWebScrapper(2016, 2016, NodeOperation.SaveToDb, null);

            mrp.ExecuteAll();

            //Deben haberse creado 841 registros.
            Assert.Equal(841, context.Matches.Count());

            //Si vuelvo a ejecutar, debe seguir habiendo el mismo número de registros.
            mrp.ExecuteAll();
            Assert.Equal(841, context.Matches.Count());
        }
예제 #2
0
        public static void SaveToDb(int year, string divisionName, int matchDay, HtmlNode resultNode, string filePath)
        {
            List <string> data         = GetTeamsAndResult(resultNode);
            string        homeTeamName = data[0];
            string        awayTeamName = data[1];
            string        resultString = data[2];

            //Partido todavía sin jugar (posiblemente aplazado). No hacemos nada.
            Regex validResult = new Regex(@"\d+-\d+");

            if (!validResult.Match(resultString).Success)
            {
                return;
            }

            int homeTeamGoals = int.Parse(resultString.Split('-')[0]);
            int awayTeamGoals = int.Parse(resultString.Split('-')[1]);

            QuinixDbContext context  = new QuinixDbContext();
            Division        division = context.Divisions.Single(d => d.Name.Equals(divisionName));

            Season season;

            if (context.Seasons.Count(s => s.StartYear == year) == 0)
            {
                season = new Season
                {
                    StartYear = year,
                    EndYear   = year + 1
                };
                context.Seasons.Add(season);
            }
            else
            {
                season = context.Seasons.Single(s => s.StartYear == year);
            }

            Team homeTeam;

            if (context.Teams.Count(t => t.Name.Equals(homeTeamName)) == 0)
            {
                homeTeam = new Team
                {
                    Name = homeTeamName
                };
                context.Teams.Add(homeTeam);
            }
            else
            {
                homeTeam = context.Teams.Single(t => t.Name.Equals(homeTeamName));
            }

            Team awayTeam;

            if (context.Teams.Count(t => t.Name.Equals(awayTeamName)) == 0)
            {
                awayTeam = new Team
                {
                    Name = awayTeamName
                };
                context.Teams.Add(awayTeam);
            }
            else
            {
                awayTeam = context.Teams.Single(t => t.Name.Equals(awayTeamName));
            }

            if (!MatchExists(context, season, division, homeTeam, awayTeam))
            {
                Model.Match match = new Model.Match
                {
                    Season        = season,
                    Division      = division,
                    MatchDay      = matchDay,
                    HomeTeam      = homeTeam,
                    AwayTeam      = awayTeam,
                    HomeTeamGoals = homeTeamGoals,
                    AwayTeamGoals = awayTeamGoals
                };

                context.Matches.Add(match);
            }

            context.SaveChanges();
        }