-
Notifications
You must be signed in to change notification settings - Fork 1
/
slots_table.py
95 lines (70 loc) · 2.28 KB
/
slots_table.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
import sys
from bs4 import BeautifulSoup
import requests
import sqlite3
def load_slot_page(league_id, season_id):
"""
Load the league settings page. Get table for roster slots.
"""
url = 'http://games.espn.com/ffl/leaguesetup/settings?leagueId={}&seasonId={}'.format(league_id, season_id)
soup = BeautifulSoup(requests.get(url).text, 'lxml')
table_slot = soup.find_all('table')
table_slot = table_slot[2]
return table_slot
def parse_slots(table_slot):
"""
Loop through relevant roster positions and parse position and allowed
number of starters for that position.
"""
slots = []
rows = table_slot.find_all('tr')
for row in rows[3:10]:
temp = [val.get_text() for val in row.children if len(val.get_text()) > 0][0:2]
if temp[0].split('(')[0].strip() == 'Flex':
position = 'FLEX'
else:
position = temp[0].split('(')[1].split(')')[0].replace('/', '')
slots.append({'position': position, 'slots': int(temp[1])})
return slots
def write_slots_to_db(ff_db, slots):
"""
Write slot data to database.
"""
print '\nOpening fantasy football database ...'
conn = sqlite3.connect(ff_db)
cur = conn.cursor()
cur.execute('''
CREATE TABLE IF NOT EXISTS Slots (
id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
position TEXT,
slots INTEGER,
UNIQUE (position, slots)
);
''')
print 'Writing slot data to database ...'
for i in range(len(slots)):
cur.execute('''INSERT OR IGNORE INTO Slots
(position, slots)
VALUES ( ?, ? )''',
( slots[i]['position'], slots[i]['slots'] ) )
conn.commit()
print 'Slot data written to database!\n'
conn.close()
def main():
"""
User-specified parameters:
(1) ff_db: name of database to save slot data to
(2) league_id: id number of the ESPN FF league
(3) season_id: year of FF season
Returns:
Writes to ff_db the roster settings for the league.
"""
ff_db = 'DATABASE_NAME.sqlite'
league_id = 000000
season_id = 0000
table_slot = load_slot_page(league_id, season_id)
slots = parse_slots(table_slot)
write_slots_to_db(ff_db, slots)
if __name__ == '__main__':
main()
sys.exit(0)