def test_init(self):
     # this should fail
     # adb = FantasyLabsNBAAgent(db=True)
     adb = FantasyLabsNBAAgent(cache_name='testnba', db=self.db)
     self.assertIsNotNone(adb.scraper)
     self.assertIsNotNone(adb.parser)
     self.assertIsNotNone(adb.db)
Example #2
0
def main():

    logging.basicConfig(stream=sys.stdout, level=logging.INFO)

    config = ConfigParser()
    configfn = os.path.join(os.path.expanduser('~'), '.pgcred')
    config.read(configfn)

    cn = 'fl-agent-{}'.format(today())
    fla = FantasyLabsNBAAgent(db=None,
                              cache_name=cn,
                              cookies=browsercookie.firefox())
    models = fla.one_model(today(fmt='fl'), 'phan')

    optimizer = LineupOptimizer(settings.DraftKingsBasketballSettings)
    optimizer._players = fl_to_pydfs(models, weights=[.1, .6, .3])
    for lineup in optimizer.optimize(n=5):
        print lineup
 def setUp(self):
     self.today = dt.strftime(dt.today(), '%-m_%-d_%Y')
     self.config = ConfigParser()
     configfn = os.path.join(os.path.expanduser('~'), '.pgcred')
     self.config.read(configfn)
     self.db = FantasyLabsNBAPg(username=self.config['nbadb']['username'],
                                password=self.config['nbadb']['password'],
                                database=self.config['nbadb']['database'])
     self.a = FantasyLabsNBAAgent(cache_name='testflabs-nba', db=self.db)
Example #4
0
def run():

    logging.basicConfig(level=logging.INFO)
    a = NBAComAgent(db=True, safe=False)
    fla = FantasyLabsNBAAgent(db=True, safe=False)

    # update players
    logging.info('start update players')
    a.commonallplayers('2015-16')
    logging.info('completed update players')

    # Update cs_player_gamelogs table through yesterday's games
    logging.info('start update player_gamelogs')
    a.cs_player_gamelogs('2015-16')
    logging.info('end update player_gamelogs')

    # Update cs_playerstats table through yesterday's games
    logging.info('start update playerstats')
    a.cs_playerstats('2015-16')
    logging.info('end update playerstats')

    # Update cs_team_gamelogs table through yesterday's games
    logging.info('start update team_gamelogs')
    a.cs_team_gamelogs('2015-16')
    logging.info('end update team_gamelogs')

    # Update cs_teamstats table through yesterday's games
    logging.info('start update teamstats')
    a.cs_teamstats('2015-16')
    logging.info('end update teamstats')

    # Get models and salaries from today's games
    # insert salaries into database
    logging.info('start update models')
    players, pp_players = fla.today_models(insert_db=True)
    logging.info('end update models')

    # insert models into database
    # TODO: preprocess_models + insert models code

    return players, pp_players
Example #5
0
from nba.agents.fantasylabs import FantasyLabsNBAAgent
from nba.dates import datetostr
from nba.db.fantasylabs import FantasyLabsNBAPg

logger = logging.getLogger('nbadb-update')
hdlr = logging.StreamHandler(sys.stdout)
formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s')
hdlr.setFormatter(formatter)
logger.addHandler(hdlr)
logger.setLevel(logging.INFO)
logger.propagate = False

config = ConfigParser()
configfn = os.path.join(os.path.expanduser('~'), '.nbadb')
config.read(configfn)

flpg = FantasyLabsNBAPg(username=config['nbadb']['username'],
                        password=config['nbadb']['password'],
                        database=config['nbadb']['database'])
fla = FantasyLabsNBAAgent(db=flpg, cache_name='flabs-nba', cookies=browsercookie.firefox())
fla.update_player_xref()

q = """select distinct game_date from games where season = 2015 AND season_type = 'regular' order by game_date DESC"""
for d in flpg.select_list(q):
    try:
        fla.salaries(day=datetostr(d, site='fl'))
        logger.info('completed {}'.format(d))
    except Exception as e:
        logger.exception('{} failed: {}'.format(d, e))
    finally:
        time.sleep(1.5)
Example #6
0
def main():
    #logger = logging.getLogger('nbadb-update')
    #hdlr = logging.StreamHandler(sys.stdout)
    #formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s')
    #hdlr.setFormatter(formatter)
    #logger.addHandler(hdlr)
    #logger.setLevel(logging.INFO)
    #logger.propagate = False
    logging.basicConfig(stream=sys.stdout, level=logging.INFO)

    config = ConfigParser()
    configfn = os.path.join(os.path.expanduser('~'), '.nbadb')
    config.read(configfn)
    nbapg = NBAComPg(username=config['nbadb']['username'],
                     password=config['nbadb']['password'],
                     database=config['nbadb']['database'])
    flpg = FantasyLabsNBAPg(username=config['nbadb']['username'],
                            password=config['nbadb']['password'],
                            database=config['nbadb']['database'])

    cn = 'nba-agent-{}'.format(today())
    a = NBAComAgent(cache_name=cn, cookies=None, db=nbapg)
    a.scraper.delay = 2
    season = '2016-17'

    # ensures players table is up-to-date before inserting gamelogs, etc.
    a.new_players(season)
    logging.info('finished update nba.com players')

    # gets all missing (days) salaries from current seasons
    from nba.agents.fantasylabs import FantasyLabsNBAAgent
    fla = FantasyLabsNBAAgent(db=flpg, cache_name='flabs-nba')
    fla.salaries(all_missing=True)
    logging.info('finished dfs salaries')

    # ensures that player_xref table includes all players from salaries
    fla.update_player_xref()
    logging.info('finished update player_xref')

    # gets ownership data from fantasylabs
    fla.ownership(all_missing=True)
    logging.info('finished dfs ownership')

    # player_gamelogs
    a.player_gamelogs(season)
    logging.info('finished nba.com player gamelogs')

    # playerstats_daily
    ps = a.playerstats(season, all_missing=True)
    logging.info('finished playerstats daily')

    # update team_gamelogs
    a.team_gamelogs(season)
    logging.info('finished team gamelogs')

    # teamstats_daily
    a.teamstats(season, all_missing=True)
    logging.info('finished teamstats daily')

    # team_opponent_dashboards
    a.team_opponent_dashboards(season, all_missing=True)
    logging.info('finished team_opponent_dashboards')

    # refresh all materialized views
    refreshq = """SELECT RefreshAllMaterializedViews('*');"""
    nbapg.execute(refreshq)
Example #7
0
class FantasyLabsNBAAgent_test(unittest.TestCase):

    def setUp(self):
        self.a = FantasyLabsNBAAgent(db=True, use_cache=True)

    def test_init(self):
        adb = FantasyLabsNBAAgent(db=True)
        self.assertIsNotNone(adb.db)
        asafe = FantasyLabsNBAAgent(safe=True)
        self.assertIsNotNone(adb.safe)
        asafe = FantasyLabsNBAAgent(use_cache=True)
        self.assertIsNotNone(adb.scraper)

    def test_past_day_models(self):
        delta = random.choice(range(1,7))
        d = dt.datetime.today() - dt.timedelta(delta)
        fmt = site_format('fl')
        models, pp_models = self.a.past_day_models(model_day=dt.datetime.strftime(d, fmt))
        logging.debug('there are {0} models'.format(len(models)))
        self.assertIsInstance(models, list)
        self.assertTrue(len(models) > 0)
        model = random.choice(models)
        self.assertIsInstance(model, dict)
        self.assertIn('Salary', model)

        pp_model = random.choice(pp_models)
        self.assertIsInstance(pp_model, dict)
        self.assertIn('salary', pp_model)


    def test_range_models(self):
        fmt = site_format('fl')
        delta = random.choice(range(7,14))
        range_start = dt.datetime.today() - dt.timedelta(delta)
        range_end = range_start + dt.timedelta(2)

        models, pp_models = self.a.range_models(range_start=dt.datetime.strftime(range_start, fmt),
                                                range_end=dt.datetime.strftime(range_end, fmt))

        logging.debug('there are {0} models'.format(len(models)))
        self.assertIsInstance(models, list)
        self.assertTrue(len(models) > 0)
        model = random.choice(models)
        self.assertIsInstance(model, dict)
        self.assertIn('Salary', model)

        pp_model = random.choice(pp_models)
        self.assertIsInstance(pp_model, dict)
        self.assertIn('salary', pp_model)

    def test_today_models(self):
        models, pp_models = self.a.today_models()
        logging.debug('there are {0} models'.format(len(models)))
        self.assertIsInstance(models, list)
        self.assertTrue(len(models) > 0)
        model = random.choice(models)
        self.assertIsInstance(model, dict)
        self.assertIn('Salary', model)

        pp_model = random.choice(pp_models)
        self.assertIsInstance(pp_model, dict)
        self.assertIn('salary', pp_model)
Example #8
0
 def setUp(self):
     self.a = FantasyLabsNBAAgent(db=True, use_cache=True)
Example #9
0
def main():

    logging.basicConfig(stream=sys.stdout, level=logging.INFO)

    config = ConfigParser()
    configfn = os.path.join(os.path.expanduser('~'), '.pgcred')
    config.read(configfn)
    nbapg = NBAComPg(username=config['nbadb']['username'],
                    password=config['nbadb']['password'],
                    database=config['nbadb']['database'])
    flpg = FantasyLabsNBAPg(username=config['nbadb']['username'],
                    password=config['nbadb']['password'],
                    database=config['nbadb']['database'])
    fla = FantasyLabsNBAAgent(db=flpg, cache_name='flabs-nba', cookies=browsercookie.firefox())
    rgurua = RotoGuruNBAAgent(db=nbapg, cache_name='rg-nba')
    cn = 'nba-agent-{}'.format(today())
    a = NBAComAgent(cache_name=cn, cookies=None, db=nbapg)
    a.scraper.delay = 1
    season = '2016-17'

    # ensures players table is up-to-date before inserting gamelogs, etc.
    logging.info('starting update nba.com players')
    players = a.new_players(season[0:4])
    logging.info('finished update nba.com players')

    # gets all missing (days) salaries from current seasons
    logging.info('starting dfs salaries')
    fla.salaries(all_missing=True)
    rgurua.salaries(all_missing=True)
    logging.info('finished dfs salaries')

    # ensures that player_xref table includes all players from salaries
    #logging.info('starting update player_xref')
    #fla.update_player_xref()
    #logging.info('finished update player_xref')

    # gets model from fantasylabs
    #td = today('fl')
    #mn = 'phan'
    #flpg.insert_models([{
    #    'game_date': today('fl'),
    #    'data': fla.scraper.model(model_day=td, model_name=mn),
    #    'model_name': mn}])

    # gets ownership data from fantasylabs
    #logging.info('starting dfs ownership')
    #fla.ownership(all_missing=True)
    #logging.info('finished dfs ownership')

    # gets data from rotogrinders
    #logging.info('starting rotogrinders')
    #rs = RotoGrindersNBAScraper()
    #rp = RotoGrindersNBAParser()
    #rdb = RotoGrindersNBAPg(username=config['nbadb']['username'],
    #                password=config['nbadb']['password'],
    #                database=config['nbadb']['database'])
    #jsonstr = rp.odds(rs.odds())
    #rdb.insert_odds(today(), json.loads(jsonstr))
    #logging.info('finished rotogrinders')

    # player_gamelogs
    logging.info('starting nba.com player gamelogs')
    a.player_gamelogs(season)
    logging.info('finished nba.com player gamelogs')

    # playerstats_daily
    logging.info('starting playerstats daily')
    ps = a.playerstats(season, all_missing=True)
    logging.info('finished playerstats daily')

    # player_boxscores_combined
    logging.info('starting player_boxscores_combined')
    pbs = a.player_boxscores_combined()
    logging.info('finished player_boxscores_combined')

    # update team_gamelogs
    logging.info('starting team gamelogs')
    a.team_gamelogs(season)
    logging.info('finished team gamelogs')

    # teamstats_daily
    logging.info('starting teamstats daily')
    a.teamstats(season, all_missing=True)
    logging.info('finished teamstats daily')

    # team_boxscores_combined
    logging.info('start team_boxscores_combined')
    tbs = a.team_boxscores_combined()
    logging.info('finished team_boxscores_combined')

    # team_opponent_dashboards
    logging.info('start team_opponent_dashboards')
    a.team_opponent_dashboards(season, all_missing=True)
    logging.info('finished team_opponent_dashboards')

    # v2015 boxscores - linescores, refs, etc.
    logging.info('start linescores')
    a.linescores()
    logging.info('finished linescores')


    # odds and lines
    logging.info('start odds and lines')
    dba = DonBestNBAAgent(db=nbapg)
    odds = dba.odds(all_missing=True)
    logging.debug(odds)
    logging.info('finished odds and lines')

    # refresh all materialized views
    logging.info('start refresh materialized queries')
    nbapg.refresh_materialized()
    logging.info('refreshed materialized queries')