๐Ÿ“ฆ ochawkeye / blackandbrew

๐Ÿ“„ parse_fireleague_downloads.py ยท 139 lines
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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139import time
import os
import sys
import nflgame
import subprocess

import fireleague_config

def dict_to_list(key, value):
    result = []
    result.append(key)
    for each in value:
        result.append(each)
    return result


def convert_to_good_format(name, team, position):
    #Edge cases first
    big_team = team.upper()
    if position == 'DEF':
        return big_team
    if name == 'Robert Griffin III' and big_team == 'WAS':
        return 'R.Griffin, WAS'
    #Jacquizz Rodgers conversion was for year 2012
    #if name == 'Jacquizz Rodgers' and big_team == 'ATL':
    #    return 'Jz.Rodgers, ATL'
    if name == 'James Jones' and big_team == 'GB':
        return 'Ja.Jones, GB'
    if name == 'Drew Davis' and big_team == 'ATL':
        return 'DJ.Davis, ATL'
    if name == 'Cecil Shorts III' and big_team == 'JAC':
        return 'C.Shorts, JAC'
    if name == 'DeAngelo Williams' and big_team == 'CAR':
        return 'De.Williams, CAR'
    if name == 'Ted Ginn Jr.' and big_team == 'CAR':
        return 'T.Ginn, CAR'
    else:
        space_marker = name.find(' ')
        new_name = name[0]+'.'+name[space_marker+1:]+', '+big_team
        return new_name

if __name__ == "__main__":
    # By default, go with current year and week...
    year, period = nflgame.live.current_year_and_week()
    # ...unless commandline arguments change
    if len(sys.argv) > 1:
        try:
            year = int(sys.argv[1])
        except IndexError:
            year = nflgame.live.current_year_and_week()[0]
        try:
            period = int(sys.argv[2])
        except IndexError:
            period = nflgame.live.current_year_and_week()[1]
    print 'Parsing Fireleague rosters for %s week %s' % (year, period)

    filepath = os.path.dirname(os.path.abspath(__file__))

    #teams = [
    #    10106223, 10109051, 10110788, 10111577, 10112483,
    #    10127676, 10141117, 10166054, 10187930, 10199955,
    #    10235905, 10282038, 10284052, 10340894, 10347390,
    #    10403070, 10481639, 10533123, 10684899, 10870530]
    teams = fireleague_config.teams

    rosters = {}
    for each in teams:
        roster_list = []
        marker = 0
        player_marker = 0
        team_fn = '%s-week%02d.html' % (each, period)
        with open(os.path.join(filepath, team_fn), 'rb') as team_file:
            all_html_data = team_file.read()
        team_key = '<h3 class="leaguename">'
        marker = all_html_data.find(team_key)+len(team_key)
        end_of_marker = all_html_data.find('<', marker)
        team_name = all_html_data[marker:end_of_marker]
        blank_key = '<div class="lu_empty">'
        player_key = 'class="alink">'
        nfl_team_key = '<div class="athletelinkmeta">'
        blank_count = all_html_data.count(blank_key)
        locked_count = all_html_data.count(player_key)
        print '%s: Not locked=%s, Locked=%s' % (
            team_fn, blank_count, locked_count)
        for i in range(blank_count+locked_count):
            # Not add len(search string) so '-1' returned if not found
            blank_start = all_html_data.find(blank_key, player_marker)
            player_start = all_html_data.find(player_key, player_marker)
            if player_start != -1 and blank_start != -1:
                if player_start < blank_start:
                    player_start += len(player_key)  # Offset by size of key
                    player_end = all_html_data.find('</a>', player_start)
                    player_marker = player_end+1
                    player_name = all_html_data[player_start:player_end] #First Last #Num
                    player_name = player_name.rsplit(' #', 1)[0]
                    NFL_start = all_html_data.find(nfl_team_key, player_marker)+29
                    NFL_end = all_html_data.find('<span', NFL_start)
                    NFL_name = all_html_data[NFL_start:NFL_end] #Team abbreviated, not CAP
                    player_marker = NFL_end+1
                    position_start = all_html_data.find('>&nbsp;(',player_marker)+8
                    position_end = all_html_data.find(')</span>',position_start)
                    position = all_html_data[position_start:position_end]
                    roster_list.append(convert_to_good_format(player_name, NFL_name, position))
                if blank_start < player_start:
                    blank_end = all_html_data.find('</div', blank_start)
                    player_marker = blank_end+1
                    roster_list.append('')
            if player_start == -1:
                roster_list.append('')
            if blank_start == -1:
                    player_start += len(player_key)
                    player_end = all_html_data.find('</a>', player_start)
                    player_marker = player_end+1
                    player_name = all_html_data[player_start:player_end] #First Last #Num
                    player_name = player_name.rsplit(' #', 1)[0]
                    NFL_start = all_html_data.find(nfl_team_key, player_marker)+29
                    NFL_end = all_html_data.find('<span', NFL_start)
                    NFL_name = all_html_data[NFL_start:NFL_end] #Team abbreviated, not CAP
                    player_marker = NFL_end+1
                    position_start = all_html_data.find('>&nbsp;(',player_marker)+8
                    position_end = all_html_data.find(')</span>',position_start)
                    position = all_html_data[position_start:position_end]
                    roster_list.append(convert_to_good_format(player_name, NFL_name, position))
        rosters[team_name] = roster_list

    #Create CSV file for team rosters
    import csv
    roster_fn = 'week %02d %s rosters.csv' % (period, year)
    with open(os.path.join(filepath, roster_fn), 'wb') as f:
        w = csv.writer(f)
        w.writerow(['Team'])
        for key, value in rosters.items():
            w.writerow(dict_to_list(key, value))

    filename = 'advancednflstats.py'
    subprocess.call('python "%s"' % os.path.join(filepath, filename))

    print 'Task complete.  If livescoring4.py is configured correctly the please proceed.'