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