Пример #1
0
    def update_games(cls):
        rss_feed = requests.get(cls.nfl_endpoint)
        StadiumController.upsert_stadiums()

        json_data = rss_feed.json()

        week_info = json_data['week']
        week_num = week_info['number']

        events = json_data['events']

        for event in events:
            competitions = event['competitions']
            competition = competitions[0]
            teams = competition['competitors']

            home_team = next(
                filter(lambda team: team['homeAway'] == 'home', teams))
            away_team = next(
                filter(lambda team: team['homeAway'] == 'away', teams))
            status = event['status']
            type = status['type']
            has_started = not type['state'] == 'pre'

            game_id = event['id']

            game_model = GameModel.find_by_game_id(game_id)

            if game_model is None:

                if 'name' not in home_team['team']:
                    home_team_name = home_team['team']['displayName']
                else:
                    home_team_name = home_team['team']['name']

                if 'name' not in away_team['team']:
                    away_team_name = away_team['team']['displayName']
                else:
                    away_team_name = away_team['team']['name']

                home_team_score = home_team['score'] or 0
                away_team_score = away_team['score'] or 0

                if status['period'] == 0 and type['state'] == 'pre':
                    quarter = 'P'
                elif type['state'] == 'post':
                    quarter = 'F'
                else:
                    quarter = status['period']

                quarter_time = status['displayClock']

                game_date = parser.parse(competition['startDate'])
                game_date_eastern = game_date - timedelta(hours=5)
                day_of_week = calendar.day_name[game_date_eastern.weekday()]
                site_id = competition['venue']['id']

                game_model = GameModel(game_id, home_team_name,
                                       home_team_score, away_team_name,
                                       away_team_score, day_of_week, game_date,
                                       quarter, quarter_time, site_id,
                                       week_num, has_started)

                game_model.upsert()
            else:
                game_model.home_team_score = home_team['score'] or 0
                game_model.away_team_score = away_team['score'] or 0

                if status['period'] == 0 and type['state'] == 'pre':
                    quarter = 'P'
                elif type['state'] == 'post':
                    quarter = 'F'
                else:
                    quarter = status['period']

                game_model.quarter = quarter
                game_model.quarter_time = status['displayClock']
                game_model.has_started = has_started
                game_date = parser.parse(competition['startDate'])

                game_date_eastern = game_date - timedelta(hours=5)
                day_of_week = calendar.day_name[game_date_eastern.weekday()]

                game_model.game_date = game_date
                game_model.day_of_week = day_of_week
                game_model.site_id = competition['venue']['id']

                game_model.upsert()

            if 'odds' in competition:
                odds = competition['odds']

                if odds:
                    odds_model = OddsModel.find_by_game_id(game_id)

                    if odds_model is None:
                        if 'details' in odds[0] and 'overUnder' in odds[0]:
                            odds_model = OddsModel(game_id, odds[0]['details'],
                                                   odds[0]['overUnder'])
                            odds_model.upsert()
                    else:
                        odds_model.details = odds[0]['details']
                        odds_model.over_under = odds[0]['overUnder']
                        odds_model.upsert()

                if odds_model:
                    game_model.odds_id = odds_model.odds_id

        return_games = GameModel.get_games_by_week(week_num)
        return {'games': [game.json() for game in return_games]}
Пример #2
0
    def update_games(cls):
        rss_feed = requests.get(cls.nfl_endpoint)

        json_data = rss_feed.json()

        week_num = json_data['week']
        games = json_data['gameScores']

        default_score_info = {
            'homeTeamScore': {
                'pointTotal': 0
            },
            'visitorTeamScore': {
                'pointTotal': 0
            },
            'phase': 'PREGAME',
            'time': '15:00'
        }

        for game in games:
            schedule_info = game['gameSchedule']
            score_info = game['score'] if game['score'] else default_score_info
            home_score_info = score_info['homeTeamScore']
            away_score_info = score_info['visitorTeamScore']
            home_team_info = schedule_info['homeTeam']
            away_team_info = schedule_info['visitorTeam']
            site_info = schedule_info['site']
            game_model = GameModel.find_by_game_id(schedule_info['gameKey'])

            if game_model is None:
                game_id = schedule_info['gameKey']
                home_team_name = home_team_info['nick']
                home_team_score = home_score_info['pointTotal'] or 0
                away_team_name = away_team_info['nick']
                away_team_score = away_score_info['pointTotal'] or 0

                quarter = score_info['phase'][0] if len(
                    score_info['phase']) > 3 else score_info['phase']

                quarter_time = score_info['time']

                game_time_24hr = time.strptime(
                    schedule_info['gameTimeEastern'], "%H:%M:%S")
                game_time = time.strftime("%I:%M %p", game_time_24hr)
                game_time = time.strptime(game_time, "%I:%M %p")

                game_date = datetime.strptime(
                    schedule_info['gameDate'] + ' ' +
                    time.strftime('%I:%M %p', game_time), '%m/%d/%Y %I:%M %p')

                day_of_week = calendar.day_name[game_date.weekday()]
                site_id = site_info['siteId']
                game_model = GameModel(game_id, home_team_name,
                                       home_team_score, away_team_name,
                                       away_team_score, day_of_week, game_date,
                                       quarter, quarter_time, site_id,
                                       week_num)
                game_model.upsert()
            else:
                game_model.home_team_score = home_score_info['pointTotal'] or 0
                game_model.away_team_score = away_score_info['pointTotal'] or 0
                game_model.quarter = score_info['phase'][0] if len(
                    score_info['phase']) > 3 else score_info['phase']
                game_model.quarter_time = score_info['time']
                game_time_24hr = time.strptime(
                    schedule_info['gameTimeEastern'], "%H:%M:%S")
                game_time = time.strftime("%I:%M %p", game_time_24hr)
                game_time = time.strptime(game_time, "%I:%M %p")

                game_model.game_date = datetime.strptime(
                    schedule_info['gameDate'] + ' ' +
                    time.strftime('%I:%M %p', game_time), '%m/%d/%Y %I:%M %p')
                game_model.day_of_week = calendar.day_name[
                    game_model.game_date.weekday()]
                game_model.site_id = site_info['siteId']
                game_model.upsert()

        return_games = GameModel.get_games_by_week(week_num)
        return {'games': [game.json() for game in return_games]}