447 lines · 37.5 KB
Raw Download
1
<?php
2
/**
3
 * config.php
4
 *
5
 * All city/team/league data lives here. To add a new city, add a new
6
 * entry to $CITIES. To add a new league, add it to $SPORT_LABELS and
7
 * reference its key from a team entry.
8
 *
9
 * 'abbr' must match the team abbreviation ESPN's site API expects in a
10
 * URL like:
11
 * http://site.api.espn.com/apis/site/v2/sports/{sport}/{league}/teams/{abbr}/schedule
12
 *
13
 * Optional per-team fields used only by the "Customize your teams" picker:
14
 *   'city'   — the team's branding city, shown as a prefix in the picker
15
 *              label (e.g. 'Los Angeles'"Los Angeles Angels"). Omit for
16
 *              college teams whose name is already a place ("Duke").
17
 *   'state'  — the state/province (province for Canadian teams), so a state
18
 *              query like "Florida" matches every team there. Set on all teams.
19
 *   'search' — extra space-separated search aliases for when the searchable
20
 *              home city differs from 'city'/'name' (e.g. Utah Jazz →
21
 *              'Salt Lake City', Angels → 'Anaheim'). Optional.
22
 *   'mascot' — the team nickname, appended after the name in the picker label
23
 *              and searchable (e.g. Ohio State → "Ohio State Buckeyes"). Used
24
 *              for college teams whose 'name' is a place; pro teams omit it
25
 *              because their 'name' already is the mascot. Optional.
26
 */
27
28
$SPORT_LABELS = [
29
    'nfl'  => ['sport' => 'football',   'label' => 'Football'],
30
    'nba'  => ['sport' => 'basketball', 'label' => 'Basketball'],
31
    'wnba' => ['sport' => 'basketball', 'label' => 'Basketball'],
32
    'mlb'  => ['sport' => 'baseball',   'label' => 'Baseball'],
33
    'nhl'  => ['sport' => 'hockey',     'label' => 'Hockey'],
34
    // College basketball: the ESPN URL slug differs from the short league
35
    // key we use as the section header, so these carry an explicit 'slug'
36
    // (schedule_url uses it via a fallback in build_step_list()).
37
    'ncaam' => ['sport' => 'basketball', 'slug' => 'mens-college-basketball',   'label' => 'Basketball'],
38
    'ncaaw' => ['sport' => 'basketball', 'slug' => 'womens-college-basketball', 'label' => 'Basketball'],
39
];
40
41
/**
42
 * Major national/international "everyone watches this one" events —
43
 * not tied to any single city. Each entry describes where to look on
44
 * ESPN's scoreboard for that league/competition and which title
45
 * keywords mark the actual championship game (vs. an earlier round
46
 * that happens to still be completed and in the same window).
47
 *
48
 * 'window_months' is a list of month numbers (1-12) this championship
49
 * is typically played in. cron.php turns this into an actual
50
 * YYYYMMDD-YYYYMMDD date range for the scoreboard fetch — without a
51
 * range, ESPN's scoreboard endpoint only returns *today's* games, so a
52
 * plain "any completed game right now" search can wander into a
53
 * regular-season game outside of finals week and mislabel it as the
54
 * championship. Being generous here (a full month or two either side)
55
 * is safe: the postseason/keyword checks in find_championship_game()
56
 * still do the real narrowing.
57
 *
58
 * 'spans_new_year' handles championships whose window crosses into
59
 * January of the following year relative to when the season "started"
60
 * (e.g. Super Bowl in Feb belongs to the season that began the
61
 * previous fall) — cron.php uses this to pick the right year for each
62
 * month in the window.
63
 *
64
 * 'requires_postseason_flag' controls whether ESPN's season.type/slug
65
 * postseason check is required. Traditional US leagues (NFL/NBA/MLB/NHL)
66
 * always set this true. Single-elimination international tournaments
67
 * (World Cup, Champions League) don't reliably expose the same
68
 * season-type semantics in ESPN's soccer payloads, so for those we
69
 * instead rely purely on keyword matching against "final" — every
70
 * match in these competitions is inherently part of a knockout/group
71
 * stage, so the keyword is the meaningful signal, not the season type.
72
 */
73
$MAJOR_EVENTS = [
74
    [
75
        'key'                      => 'nfl_superbowl',
76
        'label'                    => 'Super Bowl',
77
        'sport'                    => 'football',
78
        'league'                   => 'nfl',
79
        'window_months'            => [1, 2],
80
        'spans_new_year'           => true,
81
        'requires_postseason_flag' => true,
82
        'keywords'                 => ['super bowl'],
83
    ],
84
    [
85
        'key'                      => 'nba_finals',
86
        'label'                    => 'NBA Finals',
87
        'sport'                    => 'basketball',
88
        'league'                   => 'nba',
89
        'window_months'            => [5, 6],
90
        'spans_new_year'           => false,
91
        'requires_postseason_flag' => true,
92
        'keywords'                 => ['nba finals', 'finals'],
93
    ],
94
    [
95
        'key'                      => 'wnba_finals',
96
        'label'                    => 'WNBA Finals',
97
        'sport'                    => 'basketball',
98
        'league'                   => 'wnba',
99
        'window_months'            => [9, 10],
100
        'spans_new_year'           => false,
101
        'requires_postseason_flag' => true,
102
        'keywords'                 => ['wnba finals', 'finals'],
103
    ],
104
    [
105
        'key'                      => 'ncaam_championship',
106
        'label'                    => "NCAA Men's Championship",
107
        'sport'                    => 'basketball',
108
        'league'                   => 'mens-college-basketball',
109
        'window_months'            => [3, 4],
110
        'spans_new_year'           => false,
111
        'requires_postseason_flag' => true,
112
        'keywords'                 => ['national championship'],
113
        // College scoreboard 404s on a dates range without groups=50.
114
        'scoreboard_params'        => ['groups' => '50'],
115
    ],
116
    [
117
        'key'                      => 'ncaaw_championship',
118
        'label'                    => "NCAA Women's Championship",
119
        'sport'                    => 'basketball',
120
        'league'                   => 'womens-college-basketball',
121
        'window_months'            => [3, 4],
122
        'spans_new_year'           => false,
123
        'requires_postseason_flag' => true,
124
        'keywords'                 => ['national championship'],
125
        // College scoreboard 404s on a dates range without groups=50.
126
        'scoreboard_params'        => ['groups' => '50'],
127
    ],
128
    [
129
        'key'                      => 'mlb_worldseries',
130
        'label'                    => 'World Series',
131
        'sport'                    => 'baseball',
132
        'league'                   => 'mlb',
133
        'window_months'            => [10, 11],
134
        'spans_new_year'           => false,
135
        'requires_postseason_flag' => true,
136
        'keywords'                 => ['world series'],
137
    ],
138
    [
139
        'key'                      => 'nhl_stanleycup',
140
        'label'                    => 'Stanley Cup Final',
141
        'sport'                    => 'hockey',
142
        'league'                   => 'nhl',
143
        'window_months'            => [5, 6, 7],
144
        'spans_new_year'           => false,
145
        'requires_postseason_flag' => true,
146
        'keywords'                 => ['stanley cup'],
147
    ],
148
    [
149
        'key'                      => 'fifa_worldcup',
150
        'label'                    => 'FIFA World Cup Final',
151
        'sport'                    => 'soccer',
152
        'league'                   => 'fifa.world',
153
        'window_months'            => [6, 7],
154
        'spans_new_year'           => false,
155
        'requires_postseason_flag' => false,
156
        'keywords'                 => ['world cup final', 'final'],
157
    ],
158
    [
159
        'key'                      => 'uefa_championsleague',
160
        'label'                    => 'UEFA Champions League Final',
161
        'sport'                    => 'soccer',
162
        'league'                   => 'uefa.champions',
163
        'window_months'            => [5, 6],
164
        'spans_new_year'           => false,
165
        'requires_postseason_flag' => false,
166
        'keywords'                 => ['champions league final', 'final'],
167
    ],
168
];
169
170
$CITIES = [
171
    'newyork_newengland' => [
172
        'label' => 'New York & New England',
173
        'teams' => [
174
            ['league' => 'nfl', 'name' => 'Patriots',  'abbr' => 'ne',  'city' => 'New England', 'state' => 'Massachusetts', 'search' => 'Foxborough Boston'],
175
            ['league' => 'nba', 'name' => 'Celtics',   'abbr' => 'bos', 'city' => 'Boston',      'state' => 'Massachusetts'],
176
            ['league' => 'mlb', 'name' => 'Red Sox',   'abbr' => 'bos', 'city' => 'Boston',      'state' => 'Massachusetts'],
177
            ['league' => 'nhl', 'name' => 'Bruins',    'abbr' => 'bos', 'city' => 'Boston',      'state' => 'Massachusetts'],
178
            ['league' => 'nfl', 'name' => 'Bills',     'abbr' => 'buf', 'city' => 'Buffalo',     'state' => 'New York'],
179
            ['league' => 'nhl', 'name' => 'Sabres',    'abbr' => 'buf', 'city' => 'Buffalo',     'state' => 'New York'],
180
            ['league' => 'nfl', 'name' => 'Giants',    'abbr' => 'nyg', 'city' => 'New York',    'state' => 'New York', 'search' => 'New Jersey East Rutherford'],
181
            ['league' => 'nfl', 'name' => 'Jets',      'abbr' => 'nyj', 'city' => 'New York',    'state' => 'New York', 'search' => 'New Jersey East Rutherford'],
182
            ['league' => 'nba', 'name' => 'Knicks',    'abbr' => 'ny',  'city' => 'New York',    'state' => 'New York'],
183
            ['league' => 'nba', 'name' => 'Nets',      'abbr' => 'bkn', 'city' => 'Brooklyn',    'state' => 'New York', 'search' => 'New York'],
184
            ['league' => 'mlb', 'name' => 'Yankees',   'abbr' => 'nyy', 'city' => 'New York',    'state' => 'New York', 'search' => 'Bronx'],
185
            ['league' => 'mlb', 'name' => 'Mets',      'abbr' => 'nym', 'city' => 'New York',    'state' => 'New York', 'search' => 'Queens'],
186
            ['league' => 'nhl', 'name' => 'Rangers',   'abbr' => 'nyr', 'city' => 'New York',    'state' => 'New York'],
187
            ['league' => 'nhl', 'name' => 'Islanders', 'abbr' => 'nyi', 'city' => 'New York',    'state' => 'New York', 'search' => 'Long Island Elmont'],
188
            ['league' => 'nhl', 'name' => 'Devils',    'abbr' => 'nj',  'city' => 'New Jersey',  'state' => 'New Jersey', 'search' => 'Newark New York'],
189
            ['league' => 'wnba', 'name' => 'Liberty',   'abbr' => 'ny',  'city' => 'New York',   'state' => 'New York', 'search' => 'Brooklyn'],
190
            ['league' => 'wnba', 'name' => 'Sun',       'abbr' => 'con', 'city' => 'Connecticut','state' => 'Connecticut', 'search' => 'Uncasville'],
191
            ['league' => 'ncaam', 'name' => 'UConn',    'abbr' => 'conn', 'id' => '41', 'mascot' => 'Huskies', 'state' => 'Connecticut', 'search' => 'Storrs'],
192
            ['league' => 'ncaaw', 'name' => 'UConn',    'abbr' => 'conn', 'id' => '41', 'mascot' => 'Huskies', 'state' => 'Connecticut', 'search' => 'Storrs'],
193
        ],
194
    ],
195
    'mid_atlantic' => [
196
        'label' => 'Mid-Atlantic',
197
        'teams' => [
198
            ['league' => 'nfl', 'name' => 'Ravens',     'abbr' => 'bal', 'city' => 'Baltimore',    'state' => 'Maryland'],
199
            ['league' => 'mlb', 'name' => 'Orioles',    'abbr' => 'bal', 'city' => 'Baltimore',    'state' => 'Maryland'],
200
            ['league' => 'nfl', 'name' => 'Eagles',     'abbr' => 'phi', 'city' => 'Philadelphia', 'state' => 'Pennsylvania'],
201
            ['league' => 'nba', 'name' => '76ers',      'abbr' => 'phi', 'city' => 'Philadelphia', 'state' => 'Pennsylvania'],
202
            ['league' => 'mlb', 'name' => 'Phillies',   'abbr' => 'phi', 'city' => 'Philadelphia', 'state' => 'Pennsylvania'],
203
            ['league' => 'nhl', 'name' => 'Flyers',     'abbr' => 'phi', 'city' => 'Philadelphia', 'state' => 'Pennsylvania'],
204
            ['league' => 'nfl', 'name' => 'Steelers',   'abbr' => 'pit', 'city' => 'Pittsburgh',   'state' => 'Pennsylvania'],
205
            ['league' => 'mlb', 'name' => 'Pirates',    'abbr' => 'pit', 'city' => 'Pittsburgh',   'state' => 'Pennsylvania'],
206
            ['league' => 'nhl', 'name' => 'Penguins',   'abbr' => 'pit', 'city' => 'Pittsburgh',   'state' => 'Pennsylvania'],
207
            ['league' => 'nfl', 'name' => 'Commanders', 'abbr' => 'wsh', 'city' => 'Washington',   'state' => 'D.C.', 'search' => 'DC Landover Maryland'],
208
            ['league' => 'nba', 'name' => 'Wizards',    'abbr' => 'wsh', 'city' => 'Washington',   'state' => 'D.C.', 'search' => 'DC'],
209
            ['league' => 'mlb', 'name' => 'Nationals',  'abbr' => 'wsh', 'city' => 'Washington',   'state' => 'D.C.', 'search' => 'DC'],
210
            ['league' => 'nhl', 'name' => 'Capitals',   'abbr' => 'wsh', 'city' => 'Washington',   'state' => 'D.C.', 'search' => 'DC'],
211
            ['league' => 'wnba', 'name' => 'Mystics',    'abbr' => 'wsh', 'city' => 'Washington',  'state' => 'D.C.', 'search' => 'DC'],
212
            ['league' => 'ncaam', 'name' => 'Villanova',  'abbr' => 'vill', 'id' => '222', 'mascot' => 'Wildcats', 'state' => 'Pennsylvania', 'search' => 'Philadelphia'],
213
            ['league' => 'ncaaw', 'name' => 'Villanova',  'abbr' => 'vill', 'id' => '222', 'mascot' => 'Wildcats', 'state' => 'Pennsylvania', 'search' => 'Philadelphia'],
214
            ['league' => 'ncaam', 'name' => 'Georgetown', 'abbr' => 'gtwn', 'id' => '46', 'mascot' => 'Hoyas', 'state' => 'D.C.', 'search' => 'Washington DC'],
215
            ['league' => 'ncaaw', 'name' => 'Georgetown', 'abbr' => 'gtwn', 'id' => '46', 'mascot' => 'Hoyas', 'state' => 'D.C.', 'search' => 'Washington DC'],
216
            ['league' => 'ncaam', 'name' => 'Maryland',   'abbr' => 'md', 'id' => '120', 'mascot' => 'Terrapins', 'state' => 'Maryland', 'search' => 'College Park'],
217
            ['league' => 'ncaaw', 'name' => 'Maryland',   'abbr' => 'md', 'id' => '120', 'mascot' => 'Terrapins', 'state' => 'Maryland', 'search' => 'College Park'],
218
        ],
219
    ],
220
    'southeast' => [
221
        'label' => 'Southeast',
222
        'teams' => [
223
            ['league' => 'nfl', 'name' => 'Falcons',    'abbr' => 'atl', 'city' => 'Atlanta',   'state' => 'Georgia'],
224
            ['league' => 'nba', 'name' => 'Hawks',      'abbr' => 'atl', 'city' => 'Atlanta',   'state' => 'Georgia'],
225
            ['league' => 'mlb', 'name' => 'Braves',     'abbr' => 'atl', 'city' => 'Atlanta',   'state' => 'Georgia'],
226
            ['league' => 'nfl', 'name' => 'Panthers',   'abbr' => 'car', 'city' => 'Carolina',  'state' => 'North Carolina', 'search' => 'Charlotte'],
227
            ['league' => 'nba', 'name' => 'Hornets',    'abbr' => 'cha', 'city' => 'Charlotte', 'state' => 'North Carolina'],
228
            ['league' => 'nhl', 'name' => 'Hurricanes', 'abbr' => 'car', 'city' => 'Carolina',  'state' => 'North Carolina', 'search' => 'Raleigh'],
229
            ['league' => 'nfl', 'name' => 'Titans',     'abbr' => 'ten', 'city' => 'Tennessee', 'state' => 'Tennessee', 'search' => 'Nashville'],
230
            ['league' => 'nhl', 'name' => 'Predators',  'abbr' => 'nsh', 'city' => 'Nashville', 'state' => 'Tennessee'],
231
            ['league' => 'wnba', 'name' => 'Dream',      'abbr' => 'atl', 'city' => 'Atlanta',  'state' => 'Georgia'],
232
            ['league' => 'ncaam', 'name' => 'Duke',           'abbr' => 'duke', 'id' => '150', 'mascot' => 'Blue Devils', 'state' => 'North Carolina', 'search' => 'Durham'],
233
            ['league' => 'ncaaw', 'name' => 'Duke',           'abbr' => 'duke', 'id' => '150', 'mascot' => 'Blue Devils', 'state' => 'North Carolina', 'search' => 'Durham'],
234
            ['league' => 'ncaam', 'name' => 'North Carolina', 'abbr' => 'unc', 'id' => '153', 'mascot' => 'Tar Heels', 'state' => 'North Carolina', 'search' => 'Chapel Hill'],
235
            ['league' => 'ncaaw', 'name' => 'North Carolina', 'abbr' => 'unc', 'id' => '153', 'mascot' => 'Tar Heels', 'state' => 'North Carolina', 'search' => 'Chapel Hill'],
236
            ['league' => 'ncaam', 'name' => 'Tennessee',      'abbr' => 'tenn', 'id' => '2633', 'mascot' => 'Volunteers', 'state' => 'Tennessee', 'search' => 'Knoxville'],
237
            ['league' => 'ncaaw', 'name' => 'Tennessee',      'abbr' => 'tenn', 'id' => '2633', 'mascot' => 'Lady Volunteers', 'state' => 'Tennessee', 'search' => 'Knoxville'],
238
            ['league' => 'ncaam', 'name' => 'South Carolina', 'abbr' => 'sc', 'id' => '2579', 'mascot' => 'Gamecocks', 'state' => 'South Carolina', 'search' => 'Columbia'],
239
            ['league' => 'ncaaw', 'name' => 'South Carolina', 'abbr' => 'sc', 'id' => '2579', 'mascot' => 'Gamecocks', 'state' => 'South Carolina', 'search' => 'Columbia'],
240
        ],
241
    ],
242
    'florida' => [
243
        'label' => 'Florida',
244
        'teams' => [
245
            ['league' => 'nfl', 'name' => 'Dolphins',   'abbr' => 'mia', 'city' => 'Miami',     'state' => 'Florida'],
246
            ['league' => 'nba', 'name' => 'Heat',       'abbr' => 'mia', 'city' => 'Miami',     'state' => 'Florida'],
247
            ['league' => 'mlb', 'name' => 'Marlins',    'abbr' => 'mia', 'city' => 'Miami',     'state' => 'Florida'],
248
            ['league' => 'nhl', 'name' => 'Panthers',   'abbr' => 'fla', 'city' => 'Florida',   'state' => 'Florida', 'search' => 'Sunrise Miami'],
249
            ['league' => 'nfl', 'name' => 'Jaguars',    'abbr' => 'jax', 'city' => 'Jacksonville', 'state' => 'Florida'],
250
            ['league' => 'nba', 'name' => 'Magic',      'abbr' => 'orl', 'city' => 'Orlando',   'state' => 'Florida'],
251
            ['league' => 'nfl', 'name' => 'Buccaneers', 'abbr' => 'tb',  'city' => 'Tampa Bay', 'state' => 'Florida', 'search' => 'Tampa'],
252
            ['league' => 'mlb', 'name' => 'Rays',       'abbr' => 'tb',  'city' => 'Tampa Bay', 'state' => 'Florida', 'search' => 'Tampa St. Petersburg'],
253
            ['league' => 'nhl', 'name' => 'Lightning',  'abbr' => 'tb',  'city' => 'Tampa Bay', 'state' => 'Florida', 'search' => 'Tampa'],
254
            ['league' => 'ncaam', 'name' => 'Florida',  'abbr' => 'fla', 'id' => '57', 'mascot' => 'Gators', 'state' => 'Florida', 'search' => 'Gainesville'],
255
            ['league' => 'ncaaw', 'name' => 'Florida',  'abbr' => 'fla', 'id' => '57', 'mascot' => 'Gators', 'state' => 'Florida', 'search' => 'Gainesville'],
256
            ['league' => 'ncaam', 'name' => 'Miami',    'abbr' => 'mia', 'id' => '2390', 'mascot' => 'Hurricanes', 'state' => 'Florida', 'search' => 'Coral Gables'],
257
            ['league' => 'ncaaw', 'name' => 'Miami',    'abbr' => 'mia', 'id' => '2390', 'mascot' => 'Hurricanes', 'state' => 'Florida', 'search' => 'Coral Gables'],
258
        ],
259
    ],
260
    'great_lakes' => [
261
        'label' => 'Great Lakes & Ohio Valley',
262
        'teams' => [
263
            ['league' => 'nfl', 'name' => 'Bengals',        'abbr' => 'cin', 'city' => 'Cincinnati', 'state' => 'Ohio'],
264
            ['league' => 'mlb', 'name' => 'Reds',           'abbr' => 'cin', 'city' => 'Cincinnati', 'state' => 'Ohio'],
265
            ['league' => 'nfl', 'name' => 'Browns',         'abbr' => 'cle', 'city' => 'Cleveland',  'state' => 'Ohio'],
266
            ['league' => 'nba', 'name' => 'Cavaliers',      'abbr' => 'cle', 'city' => 'Cleveland',  'state' => 'Ohio'],
267
            ['league' => 'mlb', 'name' => 'Guardians',      'abbr' => 'cle', 'city' => 'Cleveland',  'state' => 'Ohio'],
268
            ['league' => 'nhl', 'name' => 'Blue Jackets',   'abbr' => 'cbj', 'city' => 'Columbus',   'state' => 'Ohio'],
269
            ['league' => 'nfl', 'name' => 'Lions',          'abbr' => 'det', 'city' => 'Detroit',    'state' => 'Michigan'],
270
            ['league' => 'nba', 'name' => 'Pistons',        'abbr' => 'det', 'city' => 'Detroit',    'state' => 'Michigan'],
271
            ['league' => 'mlb', 'name' => 'Tigers',         'abbr' => 'det', 'city' => 'Detroit',    'state' => 'Michigan'],
272
            ['league' => 'nhl', 'name' => 'Red Wings',      'abbr' => 'det', 'city' => 'Detroit',    'state' => 'Michigan'],
273
            ['league' => 'nfl', 'name' => 'Colts',          'abbr' => 'ind', 'city' => 'Indianapolis', 'state' => 'Indiana'],
274
            ['league' => 'nba', 'name' => 'Pacers',         'abbr' => 'ind', 'city' => 'Indianapolis', 'state' => 'Indiana'],
275
            ['league' => 'wnba', 'name' => 'Fever',         'abbr' => 'ind', 'city' => 'Indianapolis', 'state' => 'Indiana'],
276
            ['league' => 'ncaam', 'name' => 'Indiana',      'abbr' => 'iu', 'id' => '84', 'mascot' => 'Hoosiers', 'state' => 'Indiana', 'search' => 'Bloomington'],
277
            ['league' => 'ncaaw', 'name' => 'Indiana',      'abbr' => 'iu', 'id' => '84', 'mascot' => 'Hoosiers', 'state' => 'Indiana', 'search' => 'Bloomington'],
278
            ['league' => 'ncaam', 'name' => 'Ohio State',   'abbr' => 'osu', 'id' => '194', 'mascot' => 'Buckeyes', 'state' => 'Ohio', 'search' => 'Columbus'],
279
            ['league' => 'ncaaw', 'name' => 'Ohio State',   'abbr' => 'osu', 'id' => '194', 'mascot' => 'Buckeyes', 'state' => 'Ohio', 'search' => 'Columbus'],
280
            ['league' => 'ncaam', 'name' => 'Michigan St',  'abbr' => 'msu', 'id' => '127', 'mascot' => 'Spartans', 'state' => 'Michigan', 'search' => 'East Lansing'],
281
            ['league' => 'ncaaw', 'name' => 'Michigan St',  'abbr' => 'msu', 'id' => '127', 'mascot' => 'Spartans', 'state' => 'Michigan', 'search' => 'East Lansing'],
282
            ['league' => 'ncaam', 'name' => 'Michigan',     'abbr' => 'mich', 'id' => '130', 'mascot' => 'Wolverines', 'state' => 'Michigan', 'search' => 'Ann Arbor'],
283
            ['league' => 'ncaaw', 'name' => 'Michigan',     'abbr' => 'mich', 'id' => '130', 'mascot' => 'Wolverines', 'state' => 'Michigan', 'search' => 'Ann Arbor'],
284
        ],
285
    ],
286
    'chicago_wisconsin' => [
287
        'label' => 'Chicago & Wisconsin',
288
        'teams' => [
289
            ['league' => 'nfl', 'name' => 'Bears',      'abbr' => 'chi', 'city' => 'Chicago',   'state' => 'Illinois'],
290
            ['league' => 'nba', 'name' => 'Bulls',      'abbr' => 'chi', 'city' => 'Chicago',   'state' => 'Illinois'],
291
            ['league' => 'mlb', 'name' => 'Cubs',       'abbr' => 'chc', 'city' => 'Chicago',   'state' => 'Illinois'],
292
            ['league' => 'mlb', 'name' => 'White Sox',  'abbr' => 'chw', 'city' => 'Chicago',   'state' => 'Illinois'],
293
            ['league' => 'nhl', 'name' => 'Blackhawks', 'abbr' => 'chi', 'city' => 'Chicago',   'state' => 'Illinois'],
294
            ['league' => 'nfl', 'name' => 'Packers',    'abbr' => 'gb',  'city' => 'Green Bay', 'state' => 'Wisconsin'],
295
            ['league' => 'nba', 'name' => 'Bucks',      'abbr' => 'mil', 'city' => 'Milwaukee', 'state' => 'Wisconsin'],
296
            ['league' => 'mlb', 'name' => 'Brewers',    'abbr' => 'mil', 'city' => 'Milwaukee', 'state' => 'Wisconsin'],
297
            ['league' => 'wnba', 'name' => 'Sky',       'abbr' => 'chi', 'city' => 'Chicago',   'state' => 'Illinois'],
298
            ['league' => 'ncaam', 'name' => 'Illinois',  'abbr' => 'ill', 'id' => '356', 'mascot' => 'Fighting Illini', 'state' => 'Illinois', 'search' => 'Champaign Urbana'],
299
            ['league' => 'ncaaw', 'name' => 'Illinois',  'abbr' => 'ill', 'id' => '356', 'mascot' => 'Fighting Illini', 'state' => 'Illinois', 'search' => 'Champaign Urbana'],
300
            ['league' => 'ncaam', 'name' => 'Wisconsin', 'abbr' => 'wis', 'id' => '275', 'mascot' => 'Badgers', 'state' => 'Wisconsin', 'search' => 'Madison'],
301
            ['league' => 'ncaaw', 'name' => 'Wisconsin', 'abbr' => 'wis', 'id' => '275', 'mascot' => 'Badgers', 'state' => 'Wisconsin', 'search' => 'Madison'],
302
            ['league' => 'ncaam', 'name' => 'Marquette', 'abbr' => 'marq', 'id' => '269', 'mascot' => 'Golden Eagles', 'state' => 'Wisconsin', 'search' => 'Milwaukee'],
303
            ['league' => 'ncaaw', 'name' => 'Marquette', 'abbr' => 'marq', 'id' => '269', 'mascot' => 'Golden Eagles', 'state' => 'Wisconsin', 'search' => 'Milwaukee'],
304
        ],
305
    ],
306
    'upper_midwest' => [
307
        'label' => 'Upper Midwest',
308
        'teams' => [
309
            ['league' => 'nfl', 'name' => 'Vikings',      'abbr' => 'min', 'city' => 'Minnesota', 'state' => 'Minnesota', 'search' => 'Minneapolis'],
310
            ['league' => 'nba', 'name' => 'Timberwolves', 'abbr' => 'min', 'city' => 'Minnesota', 'state' => 'Minnesota', 'search' => 'Minneapolis'],
311
            ['league' => 'mlb', 'name' => 'Twins',        'abbr' => 'min', 'city' => 'Minnesota', 'state' => 'Minnesota', 'search' => 'Minneapolis'],
312
            ['league' => 'nhl', 'name' => 'Wild',         'abbr' => 'min', 'city' => 'Minnesota', 'state' => 'Minnesota', 'search' => 'Saint Paul'],
313
            ['league' => 'nhl', 'name' => 'Jets',         'abbr' => 'wpg', 'city' => 'Winnipeg',  'state' => 'Manitoba', 'search' => 'Canada'],
314
            ['league' => 'wnba', 'name' => 'Lynx',        'abbr' => 'min', 'city' => 'Minnesota', 'state' => 'Minnesota', 'search' => 'Minneapolis'],
315
            ['league' => 'ncaam', 'name' => 'Minnesota',  'abbr' => 'minn', 'id' => '135', 'mascot' => 'Golden Gophers', 'state' => 'Minnesota', 'search' => 'Minneapolis'],
316
            ['league' => 'ncaaw', 'name' => 'Minnesota',  'abbr' => 'minn', 'id' => '135', 'mascot' => 'Golden Gophers', 'state' => 'Minnesota', 'search' => 'Minneapolis'],
317
        ],
318
    ],
319
    'midwest_central' => [
320
        'label' => 'Mid-Central Plains',
321
        'teams' => [
322
            ['league' => 'nfl', 'name' => 'Chiefs',     'abbr' => 'kc',  'city' => 'Kansas City', 'state' => 'Missouri'],
323
            ['league' => 'mlb', 'name' => 'Royals',     'abbr' => 'kc',  'city' => 'Kansas City', 'state' => 'Missouri'],
324
            ['league' => 'nba', 'name' => 'Grizzlies',  'abbr' => 'mem', 'city' => 'Memphis',     'state' => 'Tennessee'],
325
            ['league' => 'nfl', 'name' => 'Saints',     'abbr' => 'no',  'city' => 'New Orleans', 'state' => 'Louisiana'],
326
            ['league' => 'nba', 'name' => 'Pelicans',   'abbr' => 'no',  'city' => 'New Orleans', 'state' => 'Louisiana'],
327
            ['league' => 'mlb', 'name' => 'Cardinals',  'abbr' => 'stl', 'city' => 'St. Louis',   'state' => 'Missouri', 'search' => 'Saint Louis'],
328
            ['league' => 'nhl', 'name' => 'Blues',      'abbr' => 'stl', 'city' => 'St. Louis',   'state' => 'Missouri', 'search' => 'Saint Louis'],
329
            ['league' => 'ncaam', 'name' => 'Kansas',   'abbr' => 'ku', 'id' => '2305', 'mascot' => 'Jayhawks', 'state' => 'Kansas', 'search' => 'Lawrence'],
330
            ['league' => 'ncaaw', 'name' => 'Kansas',   'abbr' => 'ku', 'id' => '2305', 'mascot' => 'Jayhawks', 'state' => 'Kansas', 'search' => 'Lawrence'],
331
            ['league' => 'ncaam', 'name' => 'Memphis',  'abbr' => 'mem', 'id' => '235', 'mascot' => 'Tigers', 'state' => 'Tennessee', 'search' => 'Memphis'],
332
            ['league' => 'ncaaw', 'name' => 'Memphis',  'abbr' => 'mem', 'id' => '235', 'mascot' => 'Tigers', 'state' => 'Tennessee', 'search' => 'Memphis'],
333
        ],
334
    ],
335
    'texas_oklahoma' => [
336
        'label' => 'Texas & Oklahoma',
337
        'teams' => [
338
            ['league' => 'nfl', 'name' => 'Cowboys',    'abbr' => 'dal', 'city' => 'Dallas',     'state' => 'Texas', 'search' => 'Arlington'],
339
            ['league' => 'nba', 'name' => 'Mavericks',  'abbr' => 'dal', 'city' => 'Dallas',     'state' => 'Texas'],
340
            ['league' => 'mlb', 'name' => 'Rangers',    'abbr' => 'tex', 'city' => 'Texas',      'state' => 'Texas', 'search' => 'Arlington Dallas'],
341
            ['league' => 'nhl', 'name' => 'Stars',      'abbr' => 'dal', 'city' => 'Dallas',     'state' => 'Texas'],
342
            ['league' => 'nfl', 'name' => 'Texans',     'abbr' => 'hou', 'city' => 'Houston',    'state' => 'Texas'],
343
            ['league' => 'nba', 'name' => 'Rockets',    'abbr' => 'hou', 'city' => 'Houston',    'state' => 'Texas'],
344
            ['league' => 'mlb', 'name' => 'Astros',     'abbr' => 'hou', 'city' => 'Houston',    'state' => 'Texas'],
345
            ['league' => 'nba', 'name' => 'Thunder',    'abbr' => 'okc', 'city' => 'Oklahoma City', 'state' => 'Oklahoma'],
346
            ['league' => 'nba', 'name' => 'Spurs',      'abbr' => 'sa',  'city' => 'San Antonio', 'state' => 'Texas'],
347
            ['league' => 'wnba', 'name' => 'Wings',      'abbr' => 'dal', 'city' => 'Dallas',    'state' => 'Texas', 'search' => 'Arlington'],
348
            ['league' => 'ncaam', 'name' => 'Houston',   'abbr' => 'hou', 'id' => '248', 'mascot' => 'Cougars', 'state' => 'Texas', 'search' => 'Houston'],
349
            ['league' => 'ncaaw', 'name' => 'Houston',   'abbr' => 'hou', 'id' => '248', 'mascot' => 'Cougars', 'state' => 'Texas', 'search' => 'Houston'],
350
            ['league' => 'ncaam', 'name' => 'Baylor',    'abbr' => 'bay', 'id' => '239', 'mascot' => 'Bears', 'state' => 'Texas', 'search' => 'Waco'],
351
            ['league' => 'ncaaw', 'name' => 'Baylor',    'abbr' => 'bay', 'id' => '239', 'mascot' => 'Lady Bears', 'state' => 'Texas', 'search' => 'Waco'],
352
            ['league' => 'ncaam', 'name' => 'Texas',     'abbr' => 'tex', 'id' => '251', 'mascot' => 'Longhorns', 'state' => 'Texas', 'search' => 'Austin'],
353
            ['league' => 'ncaaw', 'name' => 'Texas',     'abbr' => 'tex', 'id' => '251', 'mascot' => 'Longhorns', 'state' => 'Texas', 'search' => 'Austin'],
354
            ['league' => 'ncaam', 'name' => 'Oklahoma',  'abbr' => 'ou', 'id' => '201', 'mascot' => 'Sooners', 'state' => 'Oklahoma', 'search' => 'Norman'],
355
            ['league' => 'ncaaw', 'name' => 'Oklahoma',  'abbr' => 'ou', 'id' => '201', 'mascot' => 'Sooners', 'state' => 'Oklahoma', 'search' => 'Norman'],
356
        ],
357
    ],
358
    'mountain_west' => [
359
        'label' => 'Mountain West & Southwest',
360
        'teams' => [
361
            ['league' => 'nfl', 'name' => 'Cardinals',      'abbr' => 'ari', 'city' => 'Arizona',   'state' => 'Arizona', 'search' => 'Glendale Phoenix'],
362
            ['league' => 'nba', 'name' => 'Suns',           'abbr' => 'phx', 'city' => 'Phoenix',   'state' => 'Arizona'],
363
            ['league' => 'mlb', 'name' => 'Diamondbacks',   'abbr' => 'ari', 'city' => 'Arizona',   'state' => 'Arizona', 'search' => 'Phoenix'],
364
            ['league' => 'nfl', 'name' => 'Broncos',        'abbr' => 'den', 'city' => 'Denver',    'state' => 'Colorado'],
365
            ['league' => 'nba', 'name' => 'Nuggets',        'abbr' => 'den', 'city' => 'Denver',    'state' => 'Colorado'],
366
            ['league' => 'mlb', 'name' => 'Rockies',        'abbr' => 'col', 'city' => 'Colorado',  'state' => 'Colorado', 'search' => 'Denver'],
367
            ['league' => 'nhl', 'name' => 'Avalanche',      'abbr' => 'col', 'city' => 'Colorado',  'state' => 'Colorado', 'search' => 'Denver'],
368
            ['league' => 'nfl', 'name' => 'Raiders',        'abbr' => 'lv',  'city' => 'Las Vegas', 'state' => 'Nevada'],
369
            ['league' => 'nhl', 'name' => 'Golden Knights', 'abbr' => 'vgk', 'city' => 'Vegas',     'state' => 'Nevada', 'search' => 'Las Vegas'],
370
            ['league' => 'nba', 'name' => 'Jazz',           'abbr' => 'utah', 'city' => 'Utah',     'state' => 'Utah', 'search' => 'Salt Lake City'],
371
            ['league' => 'nhl', 'name' => 'Mammoth',        'abbr' => 'utah', 'city' => 'Utah',     'state' => 'Utah', 'search' => 'Salt Lake City'],
372
            ['league' => 'wnba', 'name' => 'Aces',          'abbr' => 'lv',  'city' => 'Las Vegas', 'state' => 'Nevada'],
373
            ['league' => 'wnba', 'name' => 'Mercury',       'abbr' => 'phx', 'city' => 'Phoenix',   'state' => 'Arizona'],
374
            ['league' => 'ncaam', 'name' => 'Arizona',      'abbr' => 'ariz', 'id' => '12', 'mascot' => 'Wildcats', 'state' => 'Arizona', 'search' => 'Tucson'],
375
            ['league' => 'ncaaw', 'name' => 'Arizona',      'abbr' => 'ariz', 'id' => '12', 'mascot' => 'Wildcats', 'state' => 'Arizona', 'search' => 'Tucson'],
376
        ],
377
    ],
378
    'southern_california' => [
379
        'label' => 'Southern California',
380
        'teams' => [
381
            ['league' => 'nfl', 'name' => 'Rams',     'abbr' => 'lar', 'city' => 'Los Angeles', 'state' => 'California', 'search' => 'Inglewood'],
382
            ['league' => 'nfl', 'name' => 'Chargers', 'abbr' => 'lac', 'city' => 'Los Angeles', 'state' => 'California', 'search' => 'Inglewood'],
383
            ['league' => 'nba', 'name' => 'Lakers',   'abbr' => 'lal', 'city' => 'Los Angeles', 'state' => 'California'],
384
            ['league' => 'nba', 'name' => 'Clippers', 'abbr' => 'lac', 'city' => 'Los Angeles', 'state' => 'California', 'search' => 'Inglewood'],
385
            ['league' => 'mlb', 'name' => 'Dodgers',  'abbr' => 'lad', 'city' => 'Los Angeles', 'state' => 'California'],
386
            ['league' => 'mlb', 'name' => 'Angels',   'abbr' => 'laa', 'city' => 'Los Angeles', 'state' => 'California', 'search' => 'Anaheim'],
387
            ['league' => 'nhl', 'name' => 'Kings',    'abbr' => 'la',  'city' => 'Los Angeles', 'state' => 'California'],
388
            ['league' => 'mlb', 'name' => 'Padres',   'abbr' => 'sd',  'city' => 'San Diego',   'state' => 'California'],
389
            ['league' => 'nhl', 'name' => 'Ducks',    'abbr' => 'ana', 'city' => 'Anaheim',     'state' => 'California', 'search' => 'Los Angeles'],
390
            ['league' => 'wnba', 'name' => 'Sparks',  'abbr' => 'la',  'city' => 'Los Angeles', 'state' => 'California'],
391
            ['league' => 'ncaam', 'name' => 'UCLA',   'abbr' => 'ucla', 'id' => '26', 'mascot' => 'Bruins', 'state' => 'California', 'search' => 'Los Angeles Westwood'],
392
            ['league' => 'ncaaw', 'name' => 'UCLA',   'abbr' => 'ucla', 'id' => '26', 'mascot' => 'Bruins', 'state' => 'California', 'search' => 'Los Angeles Westwood'],
393
            ['league' => 'ncaam', 'name' => 'USC',    'abbr' => 'usc', 'id' => '30', 'mascot' => 'Trojans', 'state' => 'California', 'search' => 'Los Angeles'],
394
            ['league' => 'ncaaw', 'name' => 'USC',    'abbr' => 'usc', 'id' => '30', 'mascot' => 'Trojans', 'state' => 'California', 'search' => 'Los Angeles'],
395
        ],
396
    ],
397
    'northern_california' => [
398
        'label' => 'Northern California',
399
        'teams' => [
400
            ['league' => 'nba', 'name' => 'Kings',     'abbr' => 'sac', 'city' => 'Sacramento',    'state' => 'California'],
401
            ['league' => 'nfl', 'name' => '49ers',     'abbr' => 'sf',  'city' => 'San Francisco', 'state' => 'California', 'search' => 'Santa Clara'],
402
            ['league' => 'nba', 'name' => 'Warriors',  'abbr' => 'gs',  'city' => 'Golden State',  'state' => 'California', 'search' => 'San Francisco Oakland'],
403
            ['league' => 'mlb', 'name' => 'Giants',    'abbr' => 'sf',  'city' => 'San Francisco', 'state' => 'California'],
404
            ['league' => 'mlb', 'name' => 'Athletics', 'abbr' => 'ath', 'state' => 'California', 'search' => 'Oakland Sacramento West Sacramento'],
405
            ['league' => 'nhl', 'name' => 'Sharks',    'abbr' => 'sj',  'city' => 'San Jose',      'state' => 'California'],
406
            ['league' => 'wnba', 'name' => 'Valkyries', 'abbr' => 'gs', 'city' => 'Golden State',  'state' => 'California', 'search' => 'San Francisco'],
407
            ['league' => 'ncaam', 'name' => 'Stanford',  'abbr' => 'stan', 'id' => '24', 'mascot' => 'Cardinal', 'state' => 'California', 'search' => 'Palo Alto'],
408
            ['league' => 'ncaaw', 'name' => 'Stanford',  'abbr' => 'stan', 'id' => '24', 'mascot' => 'Cardinal', 'state' => 'California', 'search' => 'Palo Alto'],
409
            ['league' => 'ncaam', 'name' => 'California', 'abbr' => 'cal', 'id' => '25', 'mascot' => 'Golden Bears', 'state' => 'California', 'search' => 'Berkeley'],
410
            ['league' => 'ncaaw', 'name' => 'California', 'abbr' => 'cal', 'id' => '25', 'mascot' => 'Golden Bears', 'state' => 'California', 'search' => 'Berkeley'],
411
        ],
412
    ],
413
    'pacific_northwest' => [
414
        'label' => 'Pacific Northwest',
415
        'teams' => [
416
            ['league' => 'nba', 'name' => 'Trail Blazers',  'abbr' => 'por', 'city' => 'Portland',  'state' => 'Oregon'],
417
            ['league' => 'nfl', 'name' => 'Seahawks',       'abbr' => 'sea', 'city' => 'Seattle',   'state' => 'Washington'],
418
            ['league' => 'mlb', 'name' => 'Mariners',       'abbr' => 'sea', 'city' => 'Seattle',   'state' => 'Washington'],
419
            ['league' => 'nhl', 'name' => 'Kraken',         'abbr' => 'sea', 'city' => 'Seattle',   'state' => 'Washington'],
420
            ['league' => 'nhl', 'name' => 'Canucks',        'abbr' => 'van', 'city' => 'Vancouver', 'state' => 'British Columbia', 'search' => 'Canada'],
421
            ['league' => 'wnba', 'name' => 'Storm',         'abbr' => 'sea', 'city' => 'Seattle',   'state' => 'Washington'],
422
            ['league' => 'wnba', 'name' => 'Fire',          'abbr' => 'por', 'city' => 'Portland',  'state' => 'Oregon'],
423
            ['league' => 'ncaam', 'name' => 'Gonzaga',      'abbr' => 'gonz', 'id' => '2250', 'mascot' => 'Bulldogs', 'state' => 'Washington', 'search' => 'Spokane'],
424
            ['league' => 'ncaaw', 'name' => 'Gonzaga',      'abbr' => 'gonz', 'id' => '2250', 'mascot' => 'Bulldogs', 'state' => 'Washington', 'search' => 'Spokane'],
425
            ['league' => 'ncaam', 'name' => 'Oregon',       'abbr' => 'ore', 'id' => '2483', 'mascot' => 'Ducks', 'state' => 'Oregon', 'search' => 'Eugene'],
426
            ['league' => 'ncaaw', 'name' => 'Oregon',       'abbr' => 'ore', 'id' => '2483', 'mascot' => 'Ducks', 'state' => 'Oregon', 'search' => 'Eugene'],
427
        ],
428
    ],
429
    'western_canada' => [
430
        'label' => 'Western Canada',
431
        'teams' => [
432
            ['league' => 'nhl', 'name' => 'Flames', 'abbr' => 'cgy', 'city' => 'Calgary',  'state' => 'Alberta', 'search' => 'Canada'],
433
            ['league' => 'nhl', 'name' => 'Oilers', 'abbr' => 'edm', 'city' => 'Edmonton', 'state' => 'Alberta', 'search' => 'Canada'],
434
        ],
435
    ],
436
    'eastern_canada' => [
437
        'label' => 'Eastern Canada',
438
        'teams' => [
439
            ['league' => 'nhl', 'name' => 'Canadiens',   'abbr' => 'mtl', 'city' => 'Montreal', 'state' => 'Quebec', 'search' => 'Canada'],
440
            ['league' => 'nhl', 'name' => 'Senators',    'abbr' => 'ott', 'city' => 'Ottawa',   'state' => 'Ontario', 'search' => 'Canada'],
441
            ['league' => 'nba', 'name' => 'Raptors',     'abbr' => 'tor', 'city' => 'Toronto',  'state' => 'Ontario', 'search' => 'Canada'],
442
            ['league' => 'mlb', 'name' => 'Blue Jays',   'abbr' => 'tor', 'city' => 'Toronto',  'state' => 'Ontario', 'search' => 'Canada'],
443
            ['league' => 'nhl', 'name' => 'Maple Leafs', 'abbr' => 'tor', 'city' => 'Toronto',  'state' => 'Ontario', 'search' => 'Canada'],
444
            ['league' => 'wnba', 'name' => 'Tempo',       'abbr' => 'tor', 'city' => 'Toronto', 'state' => 'Ontario', 'search' => 'Canada'],
445
        ],
446
    ],
447
];