mlb_gameday 0.1.9 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +4 -0
- data/CHANGELOG.md +8 -0
- data/Gemfile +2 -0
- data/Rakefile +2 -0
- data/lib/mlb_gameday.rb +23 -23
- data/lib/mlb_gameday/batter.rb +2 -0
- data/lib/mlb_gameday/division.rb +2 -0
- data/lib/mlb_gameday/game.rb +100 -69
- data/lib/mlb_gameday/league.rb +3 -1
- data/lib/mlb_gameday/pitcher.rb +2 -0
- data/lib/mlb_gameday/player.rb +2 -0
- data/lib/mlb_gameday/team.rb +19 -15
- data/lib/mlb_gameday/version.rb +3 -1
- data/mlb_gameday.gemspec +5 -3
- data/test/api_spec.rb +23 -13
- data/test/download.rb +5 -3
- data/test/game_spec.rb +33 -3
- data/test/year_2014/month_05/day_28/gid_2014_05_28_cinmlb_lanmlb_1/rawboxscore.xml +2 -0
- metadata +6 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ffc7edac538b2d044423bf79f8a6212cbc149fd4
|
4
|
+
data.tar.gz: b3d1fcc715b2c8fa71ee72718161336803f0a8e8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2240a4e97e7a6797d3370e60a57bfdb0c6c0792febf959555062dd328cd0f0dee0c821b2a43e19e0cbda1204103bc5c568d2559d0edb5d8ba02c55ae3d1f157c
|
7
|
+
data.tar.gz: 2b95fe77dc317cf0a63c95cd8f6efd3773a208337bb26c5774b905bcfeaa68773a70e9c22ae4e05464b43fc26ec866fc3b2dda5b827c3e6d763b8668dd1eb465
|
data/.rubocop.yml
CHANGED
@@ -2,6 +2,7 @@ AllCops:
|
|
2
2
|
Include:
|
3
3
|
- Rakefile
|
4
4
|
- Gemfile
|
5
|
+
TargetRubyVersion: 2.4
|
5
6
|
|
6
7
|
Metrics/AbcSize:
|
7
8
|
Enabled: false
|
@@ -17,3 +18,6 @@ Metrics/MethodLength:
|
|
17
18
|
|
18
19
|
Style/Documentation:
|
19
20
|
Enabled: false
|
21
|
+
|
22
|
+
Style/MultilineMethodCallIndentation:
|
23
|
+
EnforcedStyle: indented
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,8 @@
|
|
1
|
+
# Changelog
|
2
|
+
|
3
|
+
## 0.2.0
|
4
|
+
|
5
|
+
* Added game attendance, weather, wind, elapsed time, and umpires
|
6
|
+
* Understand a few more game statuses
|
7
|
+
* Use Ruby 2.4 lonely operator (&.) **This drops compatibility for Ruby 2.3 and below.**
|
8
|
+
* Fixed implicit names bug (thanks to @cacqw7) [#4](https://github.com/Fustrate/mlb_gameday/pull/4)
|
data/Gemfile
CHANGED
data/Rakefile
CHANGED
data/lib/mlb_gameday.rb
CHANGED
@@ -1,10 +1,12 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'httparty'
|
2
4
|
require 'nokogiri'
|
3
5
|
require 'open-uri'
|
4
6
|
require 'psych'
|
5
7
|
require 'chronic'
|
6
8
|
|
7
|
-
%w
|
9
|
+
%w[version league division team game player pitcher batter].each do |file|
|
8
10
|
require "mlb_gameday/#{file}"
|
9
11
|
end
|
10
12
|
|
@@ -13,7 +15,7 @@ module MLBGameday
|
|
13
15
|
|
14
16
|
BATTER = '/year_%{year}/batters/%{id}'
|
15
17
|
PITCHER = '/year_%{year}/pitchers/%{id}'
|
16
|
-
|
18
|
+
RAWBOXSCORE = '/year_%{year}/month_%{month}/day_%{day}/gid_%{gid}/rawboxscore'
|
17
19
|
GAMECENTER = '/year_%{year}/month_%{month}/day_%{day}/gid_%{gid}/gamecenter'
|
18
20
|
LINESCORE = '/year_%{year}/month_%{month}/day_%{day}/gid_%{gid}/linescore'
|
19
21
|
SCOREBOARD = '/year_%Y/month_%m/day_%d/miniscoreboard'
|
@@ -23,7 +25,7 @@ module MLBGameday
|
|
23
25
|
|
24
26
|
def initialize
|
25
27
|
@leagues = Psych.load File.open File.join(
|
26
|
-
File.dirname(File.expand_path
|
28
|
+
File.dirname(File.expand_path(__FILE__)), '../resources/data.yml'
|
27
29
|
)
|
28
30
|
end
|
29
31
|
|
@@ -34,11 +36,9 @@ module MLBGameday
|
|
34
36
|
end
|
35
37
|
|
36
38
|
def team(name)
|
37
|
-
if name.is_a? MLBGameday::Team
|
38
|
-
|
39
|
-
|
40
|
-
teams.select { |team| team.is_called?(name) }.first
|
41
|
-
end
|
39
|
+
return name if name.is_a? MLBGameday::Team
|
40
|
+
|
41
|
+
teams.find { |team| team.called?(name) }
|
42
42
|
end
|
43
43
|
|
44
44
|
def teams
|
@@ -72,7 +72,7 @@ module MLBGameday
|
|
72
72
|
gid,
|
73
73
|
gamecenter: gamecenter_xml(gid),
|
74
74
|
linescore: linescore_xml(gid),
|
75
|
-
|
75
|
+
rawboxscore: rawboxscore_xml(gid)
|
76
76
|
)
|
77
77
|
end
|
78
78
|
|
@@ -100,25 +100,21 @@ module MLBGameday
|
|
100
100
|
end
|
101
101
|
|
102
102
|
def linescore_xml(gid)
|
103
|
-
year, month, day,
|
103
|
+
year, month, day, = gid.split '_'
|
104
104
|
|
105
105
|
fetch_xml LINESCORE, year: year, month: month, day: day, gid: gid
|
106
106
|
end
|
107
107
|
|
108
|
-
def
|
109
|
-
year, month, day,
|
108
|
+
def rawboxscore_xml(gid)
|
109
|
+
year, month, day, = gid.split '_'
|
110
110
|
|
111
|
-
fetch_xml
|
112
|
-
rescue
|
113
|
-
nil
|
111
|
+
fetch_xml RAWBOXSCORE, year: year, month: month, day: day, gid: gid
|
114
112
|
end
|
115
113
|
|
116
114
|
def gamecenter_xml(gid)
|
117
|
-
year, month, day,
|
115
|
+
year, month, day, = gid.split '_'
|
118
116
|
|
119
117
|
fetch_xml GAMECENTER, year: year, month: month, day: day, gid: gid
|
120
|
-
rescue
|
121
|
-
nil
|
122
118
|
end
|
123
119
|
|
124
120
|
def batter_xml(id, year: nil)
|
@@ -126,7 +122,7 @@ module MLBGameday
|
|
126
122
|
year_data = fetch_xml BATTER, id: id, year: (year || Date.today.year)
|
127
123
|
|
128
124
|
gid = year_data.xpath('//batting/@game_id').text
|
129
|
-
year, month, day,
|
125
|
+
year, month, day, = gid.split '/'
|
130
126
|
|
131
127
|
fetch_xml "/year_#{year}/month_#{month}/day_#{day}/" \
|
132
128
|
"gid_#{gid.gsub(/[^a-z0-9]/, '_')}/batters/#{id}"
|
@@ -137,7 +133,7 @@ module MLBGameday
|
|
137
133
|
year_data = fetch_xml PITCHER, id: id, year: (year || Date.today.year)
|
138
134
|
|
139
135
|
gid = year_data.xpath('//pitching/@game_id').text
|
140
|
-
year, month, day,
|
136
|
+
year, month, day, = gid.split '/'
|
141
137
|
|
142
138
|
fetch_xml "/year_#{year}/month_#{month}/day_#{day}/" \
|
143
139
|
"gid_#{gid.gsub(/[^a-z0-9]/, '_')}/pitchers/#{id}"
|
@@ -146,9 +142,13 @@ module MLBGameday
|
|
146
142
|
protected
|
147
143
|
|
148
144
|
def fetch_xml(path, interpolations = {})
|
149
|
-
|
150
|
-
|
151
|
-
|
145
|
+
full_path = "#{API_URL}#{path}.xml"
|
146
|
+
|
147
|
+
full_path = format(full_path, interpolations) if interpolations.any?
|
148
|
+
|
149
|
+
Nokogiri::XML open full_path
|
150
|
+
rescue
|
151
|
+
nil
|
152
152
|
end
|
153
153
|
end
|
154
154
|
end
|
data/lib/mlb_gameday/batter.rb
CHANGED
data/lib/mlb_gameday/division.rb
CHANGED
data/lib/mlb_gameday/game.rb
CHANGED
@@ -1,25 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module MLBGameday
|
2
4
|
# This class is just too long. It might be able to be split up, but it's not
|
3
5
|
# likely to happen any time soon. For now, we'll disable the cop.
|
4
6
|
# rubocop:disable Metrics/ClassLength
|
5
7
|
class Game
|
6
|
-
attr_reader :gid, :home_team, :away_team, :
|
8
|
+
attr_reader :gid, :home_team, :away_team, :files
|
7
9
|
|
8
|
-
def initialize(api, gid,
|
10
|
+
def initialize(api, gid, files = {})
|
9
11
|
@api = api
|
10
12
|
@gid = gid
|
11
13
|
|
12
|
-
@
|
13
|
-
@gamecenter = gamecenter
|
14
|
-
@boxscore = boxscore
|
14
|
+
@files = files
|
15
15
|
|
16
|
-
|
17
|
-
|
18
|
-
@away_team = @api.team linescore.xpath('//game/@away_name_abbrev').text
|
19
|
-
else
|
20
|
-
@home_team = @api.team gamecenter.xpath('//game/@id').text[18, 6]
|
21
|
-
@away_team = @api.team gamecenter.xpath('//game/@id').text[11, 6]
|
22
|
-
end
|
16
|
+
@home_team = @api.team files[:linescore].xpath('//game/@home_team_name').text
|
17
|
+
@away_team = @api.team files[:linescore].xpath('//game/@away_team_name').text
|
23
18
|
end
|
24
19
|
|
25
20
|
def teams
|
@@ -27,22 +22,24 @@ module MLBGameday
|
|
27
22
|
end
|
28
23
|
|
29
24
|
def venue
|
30
|
-
|
25
|
+
if @files[:linescore]
|
26
|
+
return @files[:linescore].xpath('//game/@venue').text
|
27
|
+
end
|
31
28
|
|
32
|
-
|
29
|
+
files[:gamecenter].xpath('//game/venueShort').text
|
33
30
|
end
|
34
31
|
|
35
32
|
def home_start_time(ampm: true)
|
36
33
|
if ampm
|
37
34
|
[
|
38
|
-
@linescore.xpath('//game/@home_time').text,
|
39
|
-
@linescore.xpath('//game/@home_ampm').text,
|
40
|
-
@linescore.xpath('//game/@home_time_zone').text
|
35
|
+
@files[:linescore].xpath('//game/@home_time').text,
|
36
|
+
@files[:linescore].xpath('//game/@home_ampm').text,
|
37
|
+
@files[:linescore].xpath('//game/@home_time_zone').text
|
41
38
|
].join ' '
|
42
39
|
else
|
43
40
|
[
|
44
|
-
@linescore.xpath('//game/@home_time').text,
|
45
|
-
@linescore.xpath('//game/@home_time_zone').text
|
41
|
+
@files[:linescore].xpath('//game/@home_time').text,
|
42
|
+
@files[:linescore].xpath('//game/@home_time_zone').text
|
46
43
|
].join ' '
|
47
44
|
end
|
48
45
|
end
|
@@ -50,41 +47,39 @@ module MLBGameday
|
|
50
47
|
def away_start_time(ampm: true)
|
51
48
|
if ampm
|
52
49
|
[
|
53
|
-
@linescore.xpath('//game/@away_time').text,
|
54
|
-
@linescore.xpath('//game/@away_ampm').text,
|
55
|
-
@linescore.xpath('//game/@away_time_zone').text
|
50
|
+
@files[:linescore].xpath('//game/@away_time').text,
|
51
|
+
@files[:linescore].xpath('//game/@away_ampm').text,
|
52
|
+
@files[:linescore].xpath('//game/@away_time_zone').text
|
56
53
|
].join ' '
|
57
54
|
else
|
58
55
|
[
|
59
|
-
@linescore.xpath('//game/@away_time').text,
|
60
|
-
@linescore.xpath('//game/@away_time_zone').text
|
56
|
+
@files[:linescore].xpath('//game/@away_time').text,
|
57
|
+
@files[:linescore].xpath('//game/@away_time_zone').text
|
61
58
|
].join ' '
|
62
59
|
end
|
63
60
|
end
|
64
61
|
|
65
62
|
# Preview, Pre-Game, In Progress, Final
|
66
63
|
def status
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
{
|
71
|
-
'P' => 'Preview',
|
72
|
-
'I' => 'In Progress',
|
73
|
-
'O' => 'Over'
|
74
|
-
}[@gamecenter.xpath('//game/@status').text]
|
75
|
-
end
|
64
|
+
return 'Preview' unless @files[:linescore]
|
65
|
+
|
66
|
+
@status ||= @files[:linescore].xpath('//game/@status').text
|
76
67
|
end
|
77
68
|
|
78
69
|
# [3, Top/Middle/Bottom/End]
|
79
70
|
def inning
|
80
|
-
return [0, '?'] unless @linescore
|
71
|
+
return [0, '?'] unless @files[:linescore]&.xpath('//game/@inning')
|
81
72
|
|
82
|
-
[
|
83
|
-
|
73
|
+
[
|
74
|
+
@files[:linescore].xpath('//game/@inning').text.to_i,
|
75
|
+
@files[:linescore].xpath('//game/@inning_state').text
|
76
|
+
]
|
84
77
|
end
|
85
78
|
|
86
79
|
def runners
|
87
|
-
first
|
80
|
+
first = nil
|
81
|
+
second = nil
|
82
|
+
third = nil
|
88
83
|
|
89
84
|
[first, second, third]
|
90
85
|
end
|
@@ -92,7 +87,7 @@ module MLBGameday
|
|
92
87
|
def over?
|
93
88
|
['Final', 'Game Over', 'Completed Early'].include? status
|
94
89
|
end
|
95
|
-
|
90
|
+
alias fat_lady_has_sung? over?
|
96
91
|
|
97
92
|
def in_progress?
|
98
93
|
status == 'In Progress'
|
@@ -107,71 +102,77 @@ module MLBGameday
|
|
107
102
|
end
|
108
103
|
|
109
104
|
def home_record
|
110
|
-
return [0, 0] unless @linescore
|
105
|
+
return [0, 0] unless @files[:linescore]
|
111
106
|
|
112
|
-
[
|
113
|
-
|
107
|
+
[
|
108
|
+
@files[:linescore].xpath('//game/@home_win'),
|
109
|
+
@files[:linescore].xpath('//game/@home_loss')
|
110
|
+
].map(&:text).map(&:to_i)
|
114
111
|
end
|
115
112
|
|
116
113
|
def away_record
|
117
|
-
return [0, 0] unless @linescore
|
114
|
+
return [0, 0] unless @files[:linescore]
|
118
115
|
|
119
|
-
[
|
120
|
-
|
116
|
+
[
|
117
|
+
@files[:linescore].xpath('//game/@away_win'),
|
118
|
+
@files[:linescore].xpath('//game/@away_loss')
|
119
|
+
].map(&:text).map(&:to_i)
|
121
120
|
end
|
122
121
|
|
123
122
|
def current_pitcher
|
124
123
|
return nil unless in_progress?
|
125
124
|
|
126
|
-
@api.pitcher @linescore.xpath('//game/current_pitcher/@id').text,
|
125
|
+
@api.pitcher @files[:linescore].xpath('//game/current_pitcher/@id').text,
|
127
126
|
year: date.year
|
128
127
|
end
|
129
128
|
|
130
129
|
def opposing_pitcher
|
131
130
|
return nil unless in_progress?
|
132
131
|
|
133
|
-
@api.pitcher @linescore.xpath('//game/opposing_pitcher/@id').text,
|
132
|
+
@api.pitcher @files[:linescore].xpath('//game/opposing_pitcher/@id').text,
|
134
133
|
year: date.year
|
135
134
|
end
|
136
135
|
|
137
136
|
def winning_pitcher
|
138
137
|
return nil unless over?
|
139
138
|
|
140
|
-
@api.pitcher @linescore.xpath('//game/winning_pitcher/@id').text,
|
139
|
+
@api.pitcher @files[:linescore].xpath('//game/winning_pitcher/@id').text,
|
141
140
|
year: date.year
|
142
141
|
end
|
143
142
|
|
144
143
|
def losing_pitcher
|
145
144
|
return nil unless over?
|
146
145
|
|
147
|
-
@api.pitcher @linescore.xpath('//game/losing_pitcher/@id').text,
|
146
|
+
@api.pitcher @files[:linescore].xpath('//game/losing_pitcher/@id').text,
|
148
147
|
year: date.year
|
149
148
|
end
|
150
149
|
|
151
150
|
def save_pitcher
|
152
151
|
return nil unless over?
|
153
152
|
|
154
|
-
@api.pitcher @linescore.xpath('//game/save_pitcher/@id').text,
|
153
|
+
@api.pitcher @files[:linescore].xpath('//game/save_pitcher/@id').text,
|
155
154
|
year: date.year
|
156
155
|
end
|
157
156
|
|
158
157
|
def away_starting_pitcher
|
159
|
-
return '' unless @linescore
|
158
|
+
return '' unless @files[:linescore]
|
160
159
|
|
161
|
-
@linescore.xpath('//game/away_probable_pitcher/@id').text
|
160
|
+
@files[:linescore].xpath('//game/away_probable_pitcher/@id').text
|
162
161
|
end
|
163
162
|
|
164
163
|
def home_starting_pitcher
|
165
|
-
return '' unless @linescore
|
164
|
+
return '' unless @files[:linescore]
|
166
165
|
|
167
|
-
@linescore.xpath('//game/home_probable_pitcher/@id').text
|
166
|
+
@files[:linescore].xpath('//game/home_probable_pitcher/@id').text
|
168
167
|
end
|
169
168
|
|
170
169
|
def score
|
171
170
|
return [0, 0] unless in_progress? || over?
|
172
171
|
|
173
|
-
[
|
174
|
-
|
172
|
+
[
|
173
|
+
@files[:linescore].xpath('//game/@home_team_runs').text,
|
174
|
+
@files[:linescore].xpath('//game/@away_team_runs').text
|
175
|
+
].map(&:to_i)
|
175
176
|
end
|
176
177
|
|
177
178
|
def home_pitcher
|
@@ -180,7 +181,7 @@ module MLBGameday
|
|
180
181
|
case status
|
181
182
|
when 'In Progress'
|
182
183
|
# The xpath changes based on which half of the inning it is
|
183
|
-
if @linescore.xpath('//game/@top_inning').text == 'Y'
|
184
|
+
if @files[:linescore].xpath('//game/@top_inning').text == 'Y'
|
184
185
|
opposing_pitcher
|
185
186
|
else
|
186
187
|
current_pitcher
|
@@ -200,7 +201,7 @@ module MLBGameday
|
|
200
201
|
case status
|
201
202
|
when 'In Progress'
|
202
203
|
# The xpath changes based on which half of the inning it is
|
203
|
-
if @linescore.xpath('//game/@top_inning').text == 'Y'
|
204
|
+
if @files[:linescore].xpath('//game/@top_inning').text == 'Y'
|
204
205
|
current_pitcher
|
205
206
|
else
|
206
207
|
opposing_pitcher
|
@@ -215,39 +216,69 @@ module MLBGameday
|
|
215
216
|
end
|
216
217
|
|
217
218
|
def home_tv
|
218
|
-
return nil unless
|
219
|
+
return nil unless files[:gamecenter]
|
219
220
|
|
220
|
-
|
221
|
+
files[:gamecenter].xpath('//game/broadcast/home/tv').text
|
221
222
|
end
|
222
223
|
|
223
224
|
def away_tv
|
224
|
-
return nil unless
|
225
|
+
return nil unless files[:gamecenter]
|
225
226
|
|
226
|
-
|
227
|
+
files[:gamecenter].xpath('//game/broadcast/away/tv').text
|
227
228
|
end
|
228
229
|
|
229
230
|
def home_radio
|
230
|
-
return nil unless
|
231
|
+
return nil unless files[:gamecenter]
|
231
232
|
|
232
|
-
|
233
|
+
files[:gamecenter].xpath('//game/broadcast/home/radio').text
|
233
234
|
end
|
234
235
|
|
235
236
|
def away_radio
|
236
|
-
return nil unless
|
237
|
+
return nil unless files[:gamecenter]
|
237
238
|
|
238
|
-
|
239
|
+
files[:gamecenter].xpath('//game/broadcast/away/radio').text
|
239
240
|
end
|
240
241
|
|
241
242
|
def free?
|
242
|
-
return false unless @linescore
|
243
|
+
return false unless @files[:linescore]
|
243
244
|
|
244
|
-
@linescore.xpath('//game/game_media/media/@free').text == 'ALL'
|
245
|
+
@files[:linescore].xpath('//game/game_media/media/@free').text == 'ALL'
|
245
246
|
end
|
246
247
|
|
247
248
|
def date
|
248
|
-
return Date.today unless @linescore # SUPER KLUDGE
|
249
|
+
return Date.today unless @files[:linescore] # SUPER KLUDGE
|
250
|
+
|
251
|
+
@date ||= Chronic.parse(
|
252
|
+
@files[:linescore].xpath('//game/@original_date').text
|
253
|
+
)
|
254
|
+
end
|
255
|
+
|
256
|
+
def attendance
|
257
|
+
@files[:rawboxscore]&.xpath('//boxscore/@attendance')&.text || '0'
|
258
|
+
end
|
259
|
+
|
260
|
+
def elapsed_time
|
261
|
+
@files[:rawboxscore]&.xpath('//boxscore/@elapsed_time')&.text || ''
|
262
|
+
end
|
263
|
+
|
264
|
+
def weather
|
265
|
+
@files[:rawboxscore]&.xpath('//boxscore/@weather')&.text || ''
|
266
|
+
end
|
267
|
+
|
268
|
+
def wind
|
269
|
+
@files[:rawboxscore]&.xpath('//boxscore/@wind')&.text || ''
|
270
|
+
end
|
271
|
+
|
272
|
+
def umpires
|
273
|
+
return [] unless @files[:rawboxscore]
|
274
|
+
|
275
|
+
umps = {}
|
276
|
+
|
277
|
+
@files[:rawboxscore].xpath('//boxscore/umpires/umpire').each do |umpire|
|
278
|
+
umps[umpire.xpath('@position').text] = umpire.xpath('@name').text
|
279
|
+
end
|
249
280
|
|
250
|
-
|
281
|
+
umps
|
251
282
|
end
|
252
283
|
|
253
284
|
# So we don't get huge printouts
|
data/lib/mlb_gameday/league.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module MLBGameday
|
2
4
|
class League
|
3
5
|
attr_reader :name, :divisions
|
@@ -8,7 +10,7 @@ module MLBGameday
|
|
8
10
|
end
|
9
11
|
|
10
12
|
def division(name)
|
11
|
-
|
13
|
+
raise 'Invalid division' unless %i[East Central West].include?(name)
|
12
14
|
|
13
15
|
@divisions[name]
|
14
16
|
end
|
data/lib/mlb_gameday/pitcher.rb
CHANGED
data/lib/mlb_gameday/player.rb
CHANGED
data/lib/mlb_gameday/team.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module MLBGameday
|
2
4
|
class Team
|
3
5
|
attr_reader :id, :name, :city, :league, :division, :code, :file_code
|
@@ -12,16 +14,16 @@ module MLBGameday
|
|
12
14
|
@code = opts[:code]
|
13
15
|
@file_code = opts[:file_code]
|
14
16
|
end
|
15
|
-
|
17
|
+
|
16
18
|
def full_name
|
17
19
|
"#{city} #{name}"
|
18
20
|
end
|
19
|
-
|
21
|
+
|
20
22
|
def names
|
21
23
|
@names ||= (implicit_names + alt_names).uniq
|
22
24
|
end
|
23
|
-
|
24
|
-
def
|
25
|
+
|
26
|
+
def called?(name)
|
25
27
|
names.include?(name.downcase)
|
26
28
|
end
|
27
29
|
|
@@ -29,29 +31,31 @@ module MLBGameday
|
|
29
31
|
def inspect
|
30
32
|
%(#<MLBGameday::Team @name="#{@name}">)
|
31
33
|
end
|
32
|
-
|
34
|
+
|
33
35
|
private
|
36
|
+
|
34
37
|
def alt_names
|
35
38
|
@alt_names ||= []
|
36
39
|
end
|
37
|
-
|
40
|
+
|
38
41
|
def implicit_names
|
39
|
-
result = strict_names
|
40
|
-
result <<
|
41
|
-
|
42
|
-
|
42
|
+
result = strict_names
|
43
|
+
result << [code, singular_name, despaced_name].map(&:downcase)
|
44
|
+
result << city.downcase unless ['New York', 'Chicago'].include?(city)
|
45
|
+
|
46
|
+
result.flatten.uniq
|
43
47
|
end
|
44
|
-
|
48
|
+
|
45
49
|
def strict_names
|
46
50
|
[name, full_name].map(&:downcase)
|
47
51
|
end
|
48
|
-
|
52
|
+
|
49
53
|
def singular_name
|
50
|
-
name.chomp
|
54
|
+
name.chomp 's'
|
51
55
|
end
|
52
|
-
|
56
|
+
|
53
57
|
def despaced_name
|
54
|
-
name.tr
|
58
|
+
name.tr ' ', ''
|
55
59
|
end
|
56
60
|
end
|
57
61
|
end
|
data/lib/mlb_gameday/version.rb
CHANGED
data/mlb_gameday.gemspec
CHANGED
@@ -1,4 +1,6 @@
|
|
1
1
|
# coding: utf-8
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
2
4
|
lib = File.expand_path('../lib', __FILE__)
|
3
5
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
6
|
require 'mlb_gameday/version'
|
@@ -15,9 +17,9 @@ Gem::Specification.new do |spec|
|
|
15
17
|
spec.license = 'MIT'
|
16
18
|
|
17
19
|
spec.files = `git ls-files`.split($RS)
|
18
|
-
spec.executables = spec.files.grep(
|
19
|
-
spec.test_files = spec.files.grep(
|
20
|
-
spec.require_paths = %w
|
20
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
21
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
22
|
+
spec.require_paths = %w[lib]
|
21
23
|
|
22
24
|
spec.add_development_dependency 'bundler', '~> 1.9'
|
23
25
|
spec.add_development_dependency 'rake', '~> 10.4'
|
data/test/api_spec.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'minitest/autorun'
|
2
4
|
require 'mlb_gameday.rb'
|
3
5
|
|
@@ -62,34 +64,42 @@ class TestApi < MiniTest::Test
|
|
62
64
|
end
|
63
65
|
end
|
64
66
|
end
|
65
|
-
|
67
|
+
|
66
68
|
def test_names_include_singular_name_when_different_from_name
|
67
|
-
@api.teams
|
68
|
-
|
69
|
-
|
69
|
+
@api.teams
|
70
|
+
.reject { |team| team.name == team.send(:singular_name) }
|
71
|
+
.each do |team|
|
72
|
+
assert_includes team.names, team.send(:singular_name).downcase
|
73
|
+
end
|
70
74
|
end
|
71
|
-
|
75
|
+
|
72
76
|
def test_names_includes_despaced_name_when_name_is_multi_word
|
73
|
-
@api.teams
|
77
|
+
@api.teams
|
78
|
+
.select { |team| team.name.split.size > 1 }
|
79
|
+
.each do |team|
|
74
80
|
assert_includes team.names, team.send(:despaced_name).downcase
|
75
|
-
|
81
|
+
end
|
76
82
|
end
|
77
83
|
|
78
84
|
def test_names_includes_city_except_nyc_and_chicago
|
79
|
-
@api.teams
|
85
|
+
@api.teams
|
86
|
+
.reject { |team| ['New York', 'Chicago'].include?(team.city) }
|
87
|
+
.each do |team|
|
80
88
|
assert_includes team.names, team.city.downcase
|
81
|
-
|
89
|
+
end
|
82
90
|
end
|
83
91
|
|
84
92
|
def test_names_does_not_include_city_for_nyc_and_chicago
|
85
|
-
@api.teams
|
93
|
+
@api.teams
|
94
|
+
.select { |team| ['New York', 'Chicago'].include?(team.city) }
|
95
|
+
.each do |team|
|
86
96
|
refute_includes team.names, team.city.downcase
|
87
|
-
|
97
|
+
end
|
88
98
|
end
|
89
|
-
|
99
|
+
|
90
100
|
def test_no_teams_share_any_names
|
91
101
|
@api.teams.each do |team|
|
92
|
-
@api.teams.
|
102
|
+
@api.teams.reject { |t| t == team }.each do |other_team|
|
93
103
|
assert_equal (team.names - other_team.names), team.names
|
94
104
|
end
|
95
105
|
end
|
data/test/download.rb
CHANGED
@@ -1,14 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'open-uri'
|
2
4
|
require 'fileutils'
|
3
5
|
|
4
|
-
|
6
|
+
raise 'Please pass a URL to this program.' if ARGV[0].empty?
|
5
7
|
|
6
8
|
def download_url(url)
|
7
9
|
response = open(url)
|
8
10
|
|
9
|
-
|
11
|
+
puts "Downloading #{url}"
|
10
12
|
|
11
|
-
|
13
|
+
raise "Error downloading #{url}" unless response.status[0] == '200'
|
12
14
|
|
13
15
|
handle_file url, response.read
|
14
16
|
end
|
data/test/game_spec.rb
CHANGED
@@ -1,9 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'minitest/autorun'
|
2
4
|
require 'mlb_gameday.rb'
|
3
5
|
|
4
6
|
# Mock the basic `open` function so we don't actually hit the MLB website
|
5
7
|
class MockedApi < MLBGameday::API
|
6
|
-
|
8
|
+
alias old_open open
|
7
9
|
|
8
10
|
def open(url, &block)
|
9
11
|
dir = File.dirname __FILE__
|
@@ -20,7 +22,7 @@ class MockedApi < MLBGameday::API
|
|
20
22
|
|
21
23
|
return file unless block_given?
|
22
24
|
|
23
|
-
|
25
|
+
yield file
|
24
26
|
end
|
25
27
|
end
|
26
28
|
|
@@ -43,7 +45,7 @@ class TestGame < MiniTest::Test
|
|
43
45
|
assert_equal 1, games.count
|
44
46
|
end
|
45
47
|
|
46
|
-
def
|
48
|
+
def test_game_has_two_teams
|
47
49
|
assert_equal 2, @game.teams.count
|
48
50
|
end
|
49
51
|
|
@@ -80,4 +82,32 @@ class TestGame < MiniTest::Test
|
|
80
82
|
|
81
83
|
assert @free_game.free?
|
82
84
|
end
|
85
|
+
|
86
|
+
def test_game_attendance
|
87
|
+
assert_equal '41,129', @game.attendance
|
88
|
+
end
|
89
|
+
|
90
|
+
def test_game_elapsed_time
|
91
|
+
assert_equal '3:08', @game.elapsed_time
|
92
|
+
end
|
93
|
+
|
94
|
+
def test_game_weather
|
95
|
+
assert_equal '71 degrees, partly cloudy', @game.weather
|
96
|
+
end
|
97
|
+
|
98
|
+
def test_game_wind
|
99
|
+
assert_equal '8 mph, Out to CF', @game.wind
|
100
|
+
end
|
101
|
+
|
102
|
+
def test_game_umpires
|
103
|
+
assert_equal(
|
104
|
+
{
|
105
|
+
'HP' => 'Phil Cuzzi',
|
106
|
+
'1B' => 'Gerry Davis',
|
107
|
+
'2B' => 'Quinn Wolcott',
|
108
|
+
'3B' => 'Greg Gibson'
|
109
|
+
},
|
110
|
+
@game.umpires
|
111
|
+
)
|
112
|
+
end
|
83
113
|
end
|
@@ -0,0 +1,2 @@
|
|
1
|
+
|
2
|
+
<!--Copyright 2016 MLB Advanced Media, L.P. Use of any content on this page acknowledges agreement to the terms posted here http://gdx.mlb.com/components/copyright.txt--><boxscore wind="8 mph, Out to CF" game_type="R" venue_name="Dodger Stadium" attendance="41,129" home_sport_code="mlb" official_scorer="Don Hartack" game_pk="381326" date="May 28, 2014" status_ind="F" home_league_id="104" elapsed_time="3:08" game_id="2014/05/28/cinmlb-lanmlb-1" venue_id="22" start_time="7:11 PM" weather="71 degrees, partly cloudy" gameday_sw="P"><linescore home_team_runs="2" home_team_errors="0" home_team_hits="5" away_team_errors="0" away_team_runs="3" away_team_hits="8"><inning_line_score home="0" away="2" inning="1" /><inning_line_score home="0" away="0" inning="2" /><inning_line_score home="0" away="0" inning="3" /><inning_line_score home="0" away="0" inning="4" /><inning_line_score home="1" away="0" inning="5" /><inning_line_score home="1" away="1" inning="6" /><inning_line_score home="0" away="0" inning="7" /><inning_line_score home="0" away="0" inning="8" /><inning_line_score away="0" home="0" inning="9" /></linescore><umpires><umpire id="427093" position="HP" name="Phil Cuzzi" /><umpire id="427103" position="1B" name="Gerry Davis" /><umpire id="511890" position="2B" name="Quinn Wolcott" /><umpire id="427184" position="3B" name="Greg Gibson" /></umpires><team id="113" team_code="cin" losses="28" team_flag="away" short_name="Cincinnati" wins="23" full_name="Cincinnati Reds"><pitching hr="1" bam_era="3.60" so="8" r="2" bf="34" bis_era="3.60" bb="2" h="5" er="2" out="27"><pitcher bam_s_er="36" bam_bs="0" hr="1" bam_hld="0" bis_bs="0" np="96" name_display_first_last="Homer Bailey" game_score="64" pos="P" id="456701" bis_l="3" bam_l="3" bk="0" bis_w="5" name="Bailey" bf="27" bis_era="5.04" bb="1" bam_s_so="56" bam_s_bb="21" bam_w="5" so="6" bis_hld="0" wp="1" bam_s_r="36" win="true" pitch_order="100" h="5" bis_s_r="36" bam_s_ip="64.1" bam_era="5.04" bis_s_so="56" bis_s_h="76" bis_s_ip="64.1" bam_s_h="76" s="66" ao="2" bis_sv="0" r="2" bis_s_er="36" bam_sv="0" bis_s_bb="21" er="2" out="21" go="11"><strikeout event="61" batter_id="624577" batter_name="Puig" /><strikeout event="67" batter_id="434670" batter_name="Ramirez, H" /><strikeout event="114" batter_id="461314" batter_name="Kemp" /><strikeout event="159" batter_id="477132" batter_name="Kershaw" /><strikeout event="175" batter_id="444843" batter_name="Ethier" /><walk event="225" batter_id="408236" batter_name="Gonzalez, A" /><strikeout event="353" batter_id="434670" batter_name="Ramirez, H" /></pitcher><pitcher bam_s_er="11" bam_bs="1" hr="0" bam_hld="7" bis_bs="1" np="5" name_display_first_last="Manny Parra" game_score="50" pos="P" id="448159" bis_l="0" bam_l="0" bk="0" bis_w="0" name="Parra, M" bf="2" bis_era="5.50" bb="1" bam_s_so="20" bam_s_bb="10" bam_w="0" so="0" bis_hld="7" hold="true" bam_s_r="12" pitch_order="101" h="0" bis_s_r="12" bam_s_ip="18.0" bam_era="5.50" bis_s_so="20" bis_s_h="18" bis_s_ip="18.0" bam_s_h="18" s="1" ao="0" bis_sv="1" r="0" bis_s_er="11" bam_sv="1" bis_s_bb="10" er="0" out="1" go="1"><walk event="469" batter_id="543829" batter_name="Gordon, D" /></pitcher><pitcher bam_s_er="2" bam_bs="1" hr="0" bam_hld="0" bis_bs="1" save="true" np="11" name_display_first_last="Aroldis Chapman" game_score="55" pos="P" id="547973" bis_l="1" bam_l="1" bk="0" bis_w="0" name="Chapman, A" bf="3" bis_era="2.25" bb="0" bam_s_so="14" bam_s_bb="3" bam_w="0" so="2" bis_hld="0" bam_s_r="2" pitch_order="103" h="0" bis_s_r="2" bam_s_ip="8.0" bam_era="2.25" bis_s_so="14" bis_s_h="4" bis_s_ip="8.0" bam_s_h="4" s="8" ao="0" bis_sv="5" r="0" bis_s_er="2" bam_sv="5" bis_s_bb="3" er="0" out="3" go="1"><strikeout event="545" batter_id="461314" batter_name="Kemp" /><strikeout event="551" batter_id="457759" batter_name="Turner, J" /></pitcher><pitcher bam_s_er="1" bam_bs="1" hr="0" bam_hld="4" bis_bs="1" np="4" name_display_first_last="Jonathan Broxton" game_score="52" pos="P" id="455009" bis_l="0" bam_l="0" bk="0" bis_w="1" name="Broxton" bf="2" bis_era="0.61" bb="0" bam_s_so="10" bam_s_bb="5" bam_w="1" ir="1" so="0" bis_hld="4" hold="true" bam_s_r="1" pitch_order="102" h="0" bis_s_r="1" bam_s_ip="14.2" bam_era="0.61" bis_s_so="10" bis_s_h="6" bis_s_ip="14.2" bam_s_h="6" s="2" ao="2" bis_sv="5" r="0" ira="0" bis_s_er="1" bam_sv="5" bis_s_bb="5" er="0" out="2" go="0" /></pitching><batting hr="1" d="4" bam_obp=".305" ab_risp="9" so="12" bis_obp=".305" a="14" bis_ops=".676" bam_ops=".676" bis_slg=".371" t_lob="6" h="8" rbi="2" bis_avg=".240" lob="14" t="0" r="3" bam_slg=".371" po="27" ab="35" bb="1" h_risp="1" bam_avg=".240"><batter hr="0" sac="0" bis_obp=".263" bis_ops=".485" name_display_first_last="Homer Bailey" bam_ops=".485" bis_slg=".222" pos="P" id="456701" rbi="0" lob="2" bis_avg=".222" name="Bailey" bb="0" bis_s_hr="0" bam_s_so="9" fldg="1.000" first_two_out_risp_lob="100" bam_s_bb="1" hbp="0" d="0" e="0" bam_obp=".263" so="2" a="3" sf="0" bam_s_r="0" bam_s_hr="0" two_out_risp_lob="1" h="0" bat_order="900" bis_s_r="0" bis_s_rbi="1" t="0" bis_s_so="9" bis_s_h="4" bam_s_h="4" ao="0" bam_s_rbi="1" r="0" bam_slg=".222" sb="0" po="1" ab="3" bis_s_bb="1" go="1" bam_avg=".222" /><batter sac="0" bis_obp=".316" name_display_first_last="Ryan Ludwick" pos="LF" bis_avg=".246" bb="0" first_two_out_risp_lob="334" fldg=".000" bam_s_so="38" bis_s_hr="3" bam_s_bb="13" hbp="0" bam_obp=".316" so="2" sf="0" bat_order="600" bis_s_so="38" sb="0" bam_slg=".348" po="0" bam_avg=".246" go="1" hr="0" bis_ops=".664" bam_ops=".664" bis_slg=".348" rbi="0" id="407886" lob="2" name="Ludwick" d="0" e="0" a="0" two_out_risp_lob="1" bam_s_hr="3" bam_s_r="10" h="0" bis_s_r="10" bis_s_rbi="17" t="0" ao="1" bam_s_h="34" bis_s_h="34" r="0" bam_s_rbi="17" bam_s_d="5" bis_s_d="5" ab="4" bis_s_bb="13" /><batter sac="0" bis_obp=".287" name_display_first_last="Billy Hamilton" bam_s_sb="18" pos="CF" bis_avg=".245" tb="2" bb="0" bis_s_hr="1" fldg="1.000" bam_s_so="32" bam_s_bb="9" bis_s_sb="18" hbp="0" bam_obp=".287" so="1" sf="0" bat_order="100" bis_s_cs="6" bis_s_so="32" sb="0" bam_slg=".340" po="3" bam_avg=".245" go="2" hr="0" bis_ops=".627" bam_ops=".627" bis_slg=".340" bam_s_cs="6" id="571740" rbi="0" lob="0" name="Hamilton, B" d="1" e="0" a="0" bis_s_t="3" bam_s_t="3" bam_s_hr="1" bam_s_r="20" h="1" bis_s_r="20" bis_s_rbi="10" t="0" bis_s_h="39" ao="0" bam_s_h="39" r="0" bam_s_rbi="10" bam_s_e="1" bis_s_d="6" bam_s_d="6" ab="4" bis_s_e="1" bis_s_bb="9"><double pitcher_name="Kershaw" event="397" pitcher_id="477132" /></batter><batter sac="0" bis_obp=".300" name_display_first_last="Brandon Phillips" pos="2B" bis_avg=".275" tb="4" first_rbi="22" bb="0" fldg="1.000" bam_s_so="43" bis_s_hr="4" bam_s_bb="8" hbp="0" bam_obp=".300" so="0" sf="0" bat_order="300" bis_s_cs="2" bis_s_so="43" sb="0" bam_slg=".405" po="2" bam_avg=".275" go="3" hr="1" bis_ops=".705" bam_ops=".705" bis_slg=".405" bam_s_cs="2" id="408252" rbi="2" lob="1" name="Phillips" d="0" e="0" a="6" bam_s_hr="4" bam_s_r="17" h="1" bis_s_r="17" bis_s_rbi="18" t="0" bis_s_h="55" ao="0" bam_s_h="55" r="1" bam_s_rbi="18" bam_s_e="1" bis_s_d="14" bam_s_d="14" ab="4" bis_s_e="1" bis_s_bb="8"><home_run inning_num="1" pitcher_name="Kershaw" event="20" inning="1st" outs="1" pitcher_id="477132" runners_on="1" /></batter><batter sac="0" bis_obp=".341" name_display_first_last="Todd Frazier" bam_s_sb="4" pos="3B" bis_avg=".269" tb="4" bb="0" bis_s_hr="9" first_two_out_risp_lob="405" fldg="1.000" bam_s_so="42" bam_s_bb="17" bis_s_sb="4" hbp="0" bam_obp=".341" so="1" sf="0" bat_order="200" bis_s_cs="2" bis_s_so="42" sb="0" bam_slg=".489" po="0" bam_avg=".269" go="1" hr="0" bis_ops=".830" bam_ops=".830" bis_slg=".489" bam_s_cs="2" rbi="0" id="453943" lob="2" name="Frazier" d="2" e="0" a="1" two_out_risp_lob="2" bam_s_hr="9" bam_s_r="27" h="2" bis_s_r="27" bis_s_rbi="27" t="0" bis_s_h="50" ao="0" bam_s_h="50" r="2" bam_s_rbi="27" bam_s_e="7" bis_s_d="14" bam_s_d="14" ab="4" bis_s_e="7" bis_s_bb="17"><double pitcher_name="Kershaw" event="13" pitcher_id="477132" /><double pitcher_name="Kershaw" event="301" pitcher_id="477132" /></batter><batter sac="0" bis_obp=".411" name_display_first_last="Devin Mesoraco" bam_s_sb="1" pos="C" bis_avg=".360" tb="1" bb="1" bis_s_hr="6" fldg="1.000" bam_s_so="22" bam_s_bb="7" bis_s_sb="1" hbp="0" bam_obp=".411" so="2" sf="0" bat_order="400" bis_s_cs="1" bis_s_so="22" pb="1" sb="0" bam_slg=".663" po="7" bam_avg=".360" hr="0" first_pb="275" bis_ops="1.074" bam_ops="1.074" bis_slg=".663" bam_s_cs="1" id="519023" rbi="0" lob="0" name="Mesoraco" bis_s_pb="2" d="0" e="0" a="0" bam_s_hr="6" bam_s_r="13" h="1" bis_s_r="13" bis_s_rbi="20" t="0" bis_s_h="31" ao="0" bam_s_h="31" r="0" bam_s_rbi="20" bam_s_e="2" bam_s_pb="2" bis_s_d="8" bam_s_d="8" ab="3" bis_s_e="2" bis_s_bb="7" /><batter hr="0" sac="0" bis_obp=".000" bis_ops=".000" name_display_first_last="Manny Parra" bam_ops=".000" bis_slg=".000" pos="P" rbi="0" id="448159" lob="0" bis_avg=".000" name="Parra, M" bb="0" bis_s_hr="0" bam_s_so="0" fldg="1.000" bam_s_bb="0" hbp="0" d="0" e="0" bam_obp=".000" so="0" a="1" sf="0" bam_s_r="0" bam_s_hr="0" h="0" bat_order="901" bis_s_r="0" bis_s_rbi="0" t="0" bis_s_so="0" bis_s_h="0" bam_s_h="0" ao="0" bam_s_rbi="0" r="0" bam_slg=".000" sb="0" po="0" ab="0" bis_s_bb="0" bam_avg=".000" /><batter sac="0" bis_obp=".261" name_display_first_last="Zack Cozart" bam_s_sb="1" pos="SS" bis_avg=".222" bb="0" fldg="1.000" bam_s_so="29" bis_s_hr="1" bam_s_bb="6" hbp="0" bis_s_sb="1" bam_obp=".261" so="3" sf="0" bat_order="800" bis_s_so="29" sb="0" bam_slg=".298" po="1" bam_avg=".222" go="1" hr="0" bis_ops=".559" bam_ops=".559" bis_slg=".298" id="446359" rbi="0" lob="3" name="Cozart" d="0" e="0" a="2" bis_s_t="1" bam_s_t="1" bam_s_hr="1" bam_s_r="11" h="0" bis_s_r="11" bis_s_rbi="12" t="0" bis_s_h="38" ao="0" bam_s_h="38" r="0" bam_s_rbi="12" bam_s_e="4" bis_s_d="8" bam_s_d="8" ab="4" bis_s_e="4" bis_s_bb="6" /><batter sac="0" bis_obp=".293" name_display_first_last="Roger Bernadina" bam_s_sb="2" pos="LF" bis_avg=".146" bb="0" fldg=".000" bam_s_so="14" bis_s_hr="0" bam_s_bb="10" hbp="0" bis_s_sb="2" bam_obp=".293" so="0" sf="0" bat_order="601" bis_s_so="14" sb="0" bam_slg=".188" po="0" bam_avg=".146" hr="0" bis_ops=".481" bam_ops=".481" bis_slg=".188" id="465668" rbi="0" lob="0" name="Bernadina" d="0" e="0" a="0" bam_s_hr="0" bam_s_r="2" h="0" bis_s_r="2" bis_s_rbi="4" t="0" ao="0" bam_s_h="7" bis_s_h="7" r="0" bam_s_rbi="4" bam_s_d="2" bis_s_d="2" ab="0" bis_s_bb="10" /><batter sac="0" bis_obp=".300" name_display_first_last="Skip Schumaker" bam_s_sb="1" pos="PH" bis_avg=".236" bb="0" fldg=".000" bam_s_so="12" bis_s_hr="1" bam_s_bb="5" hbp="0" bis_s_sb="1" bam_obp=".300" so="0" sf="0" bat_order="903" bis_s_so="12" sb="0" bam_slg=".345" po="0" bam_avg=".236" go="1" hr="0" bis_ops=".645" bam_ops=".645" bis_slg=".345" id="435401" rbi="0" lob="1" name="Schumaker" note="a-" d="0" e="0" a="0" bam_s_hr="1" bam_s_r="5" h="0" bis_s_r="5" bis_s_rbi="6" t="0" bis_s_h="13" ao="0" bam_s_h="13" r="0" bam_s_rbi="6" bam_s_e="1" bam_s_d="3" bis_s_d="3" ab="1" bis_s_e="1" bis_s_bb="5"><pinch_hit replaced_name="Broxton" inning_num="9" result="Grounded out" replaced_id="455009" event="519" sequence="a" inning="9th" /></batter><batter sac="0" bis_obp=".314" name_display_first_last="Brayan Pena" bam_s_sb="2" pos="1B" bis_avg=".283" tb="4" bb="0" bis_s_hr="3" first_two_out_risp_lob="202" fldg="1.000" bam_s_so="14" bam_s_bb="6" bis_s_sb="2" hbp="0" bam_obp=".314" so="0" sf="0" bat_order="700" bis_s_cs="2" bis_s_so="14" sb="0" bam_slg=".425" po="11" bam_avg=".283" go="1" hr="0" bis_ops=".739" bam_ops=".739" bis_slg=".425" bam_s_cs="2" rbi="0" id="430910" lob="1" name="Pena, B" d="1" e="0" a="1" two_out_risp_lob="1" bam_s_hr="3" bam_s_r="10" h="3" bis_s_r="10" bis_s_rbi="11" t="0" bis_s_h="32" ao="0" bam_s_h="32" r="0" bam_s_rbi="11" bam_s_e="1" bis_s_d="7" bam_s_d="7" ab="4" bis_s_e="1" bis_s_bb="6"><double pitcher_name="Kershaw" event="81" pitcher_id="477132" /></batter><batter hr="0" sac="0" bis_obp=".000" bis_ops=".000" name_display_first_last="Aroldis Chapman" bam_ops=".000" bis_slg=".000" pos="P" rbi="0" id="547973" lob="0" bis_avg=".000" name="Chapman, A" bb="0" bis_s_hr="0" bam_s_so="0" fldg=".000" bam_s_bb="0" hbp="0" d="0" e="0" bam_obp=".000" so="0" a="0" sf="0" bam_s_r="0" bam_s_hr="0" h="0" bat_order="904" bis_s_r="0" bis_s_rbi="0" t="0" bis_s_so="0" bis_s_h="0" bam_s_h="0" ao="0" bam_s_rbi="0" r="0" bam_slg=".000" sb="0" po="0" ab="0" bis_s_bb="0" bam_avg=".000" /><batter hr="0" sac="0" bis_obp=".000" bis_ops=".000" name_display_first_last="Jonathan Broxton" bam_ops=".000" bis_slg=".000" pos="P" rbi="0" id="455009" lob="0" bis_avg=".000" name="Broxton" bb="0" bis_s_hr="0" bam_s_so="0" fldg=".000" bam_s_bb="0" hbp="0" d="0" e="0" bam_obp=".000" so="0" a="0" sf="0" bam_s_r="0" bam_s_hr="0" h="0" bat_order="902" bis_s_r="0" bis_s_rbi="0" t="0" bis_s_so="0" bis_s_h="0" bam_s_h="0" ao="0" bam_s_rbi="0" r="0" bam_slg=".000" sb="0" po="0" ab="0" bis_s_bb="0" bam_avg=".000" /><batter sac="0" bis_obp=".317" name_display_first_last="Jay Bruce" bam_s_sb="5" pos="RF" bis_avg=".197" bb="0" fldg="1.000" bam_s_so="42" bis_s_hr="3" bam_s_bb="22" hbp="0" bis_s_sb="5" bam_obp=".317" so="1" sf="0" bat_order="500" bis_s_so="42" sb="0" bam_slg=".328" po="2" bam_avg=".197" go="2" hr="0" bis_ops=".645" bam_ops=".645" bis_slg=".328" id="457803" rbi="0" lob="2" name="Bruce" d="0" e="0" a="0" bam_s_t="1" bis_s_t="1" bam_s_hr="3" bam_s_r="21" h="0" bis_s_r="21" bis_s_rbi="14" t="0" bis_s_h="24" ao="1" bam_s_h="24" r="0" bam_s_rbi="14" bam_s_d="5" bis_s_d="5" ab="4" bis_s_bb="22" /></batting><double_play event="292" id_sequence="446359-408252-430910" name_sequence="Cozart-Phillips-Pena, B" /></team><team id="119" team_code="lan" losses="25" team_flag="home" short_name="LA Dodgers" wins="29" full_name="Los Angeles Dodgers"><pitching hr="1" bam_era="3.48" so="12" r="3" bf="36" bis_era="3.48" bb="1" h="8" er="3" out="27"><pitcher bam_s_er="14" bam_bs="1" hr="0" bam_hld="8" bis_bs="1" np="16" name_display_first_last="Brian Wilson" game_score="52" pos="P" id="451216" bis_l="2" bam_l="2" bk="0" bis_w="0" name="Wilson, Br" bf="4" bis_era="7.13" bb="0" bam_s_so="22" bam_s_bb="15" bam_w="0" so="1" bis_hld="8" bam_s_r="15" pitch_order="103" h="1" bis_s_r="15" bam_s_ip="17.2" bam_era="7.13" bis_s_so="22" bis_s_h="22" bis_s_ip="17.2" bam_s_h="22" s="12" ao="1" bis_sv="0" r="0" bis_s_er="14" bam_sv="0" bis_s_bb="15" er="0" out="3" go="1"><strikeout event="517" batter_id="446359" batter_name="Cozart" /></pitcher><pitcher bam_s_er="14" bam_bs="0" hr="1" bam_hld="0" bis_bs="0" loss="true" np="105" name_display_first_last="Clayton Kershaw" game_score="59" pos="P" id="477132" bis_l="2" bam_l="2" bk="0" bis_w="3" name="Kershaw" bf="29" bis_era="3.57" bb="1" bam_s_so="46" bam_s_bb="7" bam_w="3" so="9" bis_hld="0" wp="1" bam_s_r="14" pitch_order="100" h="7" bis_s_r="14" bam_s_ip="35.1" bam_era="3.57" bis_s_so="46" bis_s_h="36" bis_s_ip="35.1" bam_s_h="36" s="73" ao="0" bis_sv="0" r="3" bis_s_er="14" bam_sv="0" bis_s_bb="7" er="3" out="21" go="11"><strikeout event="30" batter_id="519023" batter_name="Mesoraco" /><strikeout event="76" batter_id="407886" batter_name="Ludwick" /><strikeout event="94" batter_id="446359" batter_name="Cozart" /><strikeout event="100" batter_id="456701" batter_name="Bailey" /><strikeout event="137" batter_id="571740" batter_name="Hamilton, B" /><strikeout event="143" batter_id="453943" batter_name="Frazier" /><strikeout event="196" batter_id="407886" batter_name="Ludwick" /><strikeout event="241" batter_id="446359" batter_name="Cozart" /><walk event="318" batter_id="519023" batter_name="Mesoraco" /><strikeout event="393" batter_id="456701" batter_name="Bailey" /></pitcher><pitcher bam_s_er="4" bam_bs="0" hr="0" bam_hld="1" bis_bs="0" np="11" name_display_first_last="Brandon League" game_score="53" pos="P" id="434181" bis_l="1" bam_l="1" bk="0" bis_w="1" name="League" bf="2" bis_era="1.32" bb="0" bam_s_so="17" bam_s_bb="7" bam_w="1" so="1" bis_hld="1" bam_s_r="5" pitch_order="101" h="0" bis_s_r="5" bam_s_ip="27.1" bam_era="1.32" bis_s_so="17" bis_s_h="22" bis_s_ip="27.1" bam_s_h="22" s="6" ao="0" bis_sv="0" r="0" bis_s_er="4" bam_sv="0" bis_s_bb="7" er="0" out="2" go="1"><strikeout event="447" batter_id="519023" batter_name="Mesoraco" /></pitcher><pitcher bam_s_er="4" bam_bs="0" hr="0" bam_hld="11" bis_bs="0" np="6" name_display_first_last="J.P. Howell" game_score="52" pos="P" id="434442" bis_l="3" bam_l="3" bk="0" bis_w="1" name="Howell" bf="1" bis_era="2.00" bb="0" bam_s_so="22" bam_s_bb="9" bam_w="1" so="1" bis_hld="11" bam_s_r="5" pitch_order="102" h="0" bis_s_r="5" bam_s_ip="18.0" bam_era="2.00" bis_s_so="22" bis_s_h="12" bis_s_ip="18.0" bam_s_h="12" s="3" ao="0" bis_sv="0" r="0" bis_s_er="4" bam_sv="0" bis_s_bb="9" er="0" out="1" go="0"><strikeout event="459" batter_id="457803" batter_name="Bruce" /></pitcher></pitching><batting hr="1" d="2" bam_obp=".324" ab_risp="7" so="8" bis_obp=".324" a="13" bis_ops=".739" bam_ops=".739" bis_slg=".415" t_lob="5" h="5" rbi="1" bis_avg=".257" lob="11" t="0" r="2" bam_slg=".415" po="27" ab="31" bb="2" h_risp="0" bam_avg=".257"><batter sac="0" bis_obp=".442" name_display_first_last="Yasiel Puig" bam_s_sb="5" pos="RF" bis_avg=".344" tb="4" first_rbi="344" bb="0" fldg="1.000" bam_s_so="41" bis_s_hr="11" bam_s_bb="26" hbp="0" bis_s_sb="5" bam_obp=".442" so="1" sf="0" bat_order="300" bis_s_cs="4" bis_s_so="41" sb="0" bam_slg=".623" po="1" bam_avg=".344" go="1" hr="1" bis_ops="1.065" bam_ops="1.065" bis_slg=".623" bam_s_cs="4" id="624577" rbi="1" lob="2" name="Puig" d="0" e="0" a="0" bis_s_t="3" bam_s_t="3" bam_s_hr="11" bam_s_r="29" h="1" bis_s_r="29" bis_s_rbi="39" t="0" bis_s_h="63" ao="1" bam_s_h="63" r="1" bam_s_rbi="39" bis_s_d="12" bam_s_d="12" ab="4" bis_s_bb="26"><home_run inning_num="6" pitcher_name="Bailey" event="343" inning="6th" outs="0" pitcher_id="456701" runners_on="0" /></batter><batter sac="0" bis_obp=".286" name_display_first_last="Justin Turner" bam_s_sb="1" pos="3B" bis_avg=".232" tb="2" bb="0" fldg="1.000" bam_s_so="21" bis_s_hr="2" bam_s_bb="8" hbp="0" bis_s_sb="1" bam_obp=".286" so="1" sf="0" bat_order="700" bis_s_so="21" sb="0" bam_slg=".358" po="0" bam_avg=".232" go="2" hr="0" bis_ops=".644" bam_ops=".644" bis_slg=".358" id="457759" rbi="0" lob="1" name="Turner, J" d="1" e="0" a="5" bam_s_hr="2" bam_s_r="10" h="1" bis_s_r="10" bis_s_rbi="8" t="0" bis_s_h="22" ao="0" bam_s_h="22" r="1" bam_s_rbi="8" bam_s_e="4" bis_s_d="6" bam_s_d="6" ab="4" bis_s_e="4" bis_s_bb="8"><double pitcher_name="Bailey" event="265" pitcher_id="456701" /></batter><batter sac="0" bis_obp=".278" name_display_first_last="Drew Butera" pos="C" bis_avg=".203" bb="0" fldg="1.000" bam_s_so="22" bis_s_hr="2" bam_s_bb="7" hbp="0" bam_obp=".278" so="0" sf="0" bat_order="800" bis_s_so="22" pb="1" sb="0" bam_slg=".319" po="12" bam_avg=".203" go="2" hr="0" first_pb="87" bis_ops=".597" bam_ops=".597" bis_slg=".319" id="460077" rbi="0" lob="2" name="Butera" bis_s_pb="7" d="0" e="0" a="0" bam_s_hr="2" bam_s_r="11" h="0" bis_s_r="11" bis_s_rbi="7" t="0" ao="1" bam_s_h="14" bis_s_h="14" r="0" bam_s_rbi="7" bam_s_pb="7" bam_s_d="2" bis_s_d="2" ab="3" bis_s_bb="7" /><batter hr="0" sac="0" bis_obp=".000" bis_ops=".000" name_display_first_last="Brandon League" bam_ops=".000" bis_slg=".000" pos="P" rbi="0" id="434181" lob="0" bis_avg=".000" name="League" bb="0" bis_s_hr="0" bam_s_so="1" fldg="1.000" bam_s_bb="0" hbp="0" d="0" e="0" bam_obp=".000" so="0" a="1" sf="0" bam_s_r="0" bam_s_hr="0" h="0" bat_order="902" bis_s_r="0" bis_s_rbi="0" t="0" bis_s_so="1" bis_s_h="0" bam_s_h="0" ao="0" bam_s_rbi="0" r="0" bam_s_e="2" bam_slg=".000" sb="0" bis_s_e="2" po="0" ab="0" bis_s_bb="0" bam_avg=".000" /><batter sac="0" bis_obp=".317" name_display_first_last="Matt Kemp" bam_s_sb="5" pos="LF" bis_avg=".255" bb="0" fldg=".000" bam_s_so="46" bis_s_hr="5" bam_s_bb="14" hbp="0" bis_s_sb="5" bam_obp=".317" so="2" sf="0" bat_order="600" bis_s_cs="2" bis_s_so="46" sb="0" bam_slg=".438" po="0" bam_avg=".255" hr="0" bis_ops=".755" bam_ops=".755" bis_slg=".438" bam_s_cs="2" id="461314" rbi="0" lob="1" name="Kemp" d="0" e="0" a="0" bam_s_hr="5" bam_s_r="20" h="0" bis_s_r="20" bis_s_rbi="13" t="0" bis_s_h="39" ao="2" bam_s_h="39" r="0" bam_s_rbi="13" bam_s_e="4" bis_s_d="13" bam_s_d="13" ab="4" bis_s_e="4" bis_s_bb="14" /><batter sac="0" bis_obp=".342" name_display_first_last="Adrian Gonzalez" bam_s_sb="1" pos="1B" bis_avg=".269" bb="1" fldg="1.000" bam_s_so="38" bis_s_hr="12" bam_s_bb="23" hbp="0" bis_s_sb="1" bam_obp=".342" so="0" sf="0" bat_order="500" bis_s_so="38" sb="0" bam_slg=".507" po="12" bam_avg=".269" go="2" hr="0" bis_ops=".849" bam_ops=".849" bis_slg=".507" id="408236" rbi="0" lob="0" name="Gonzalez, A" d="0" e="0" a="0" bam_s_hr="12" bam_s_r="28" h="0" bis_s_r="28" bis_s_rbi="36" t="0" bis_s_h="54" ao="1" bam_s_h="54" r="0" bam_s_rbi="36" bam_s_e="2" bam_s_d="12" bis_s_d="12" ab="3" bis_s_e="2" bis_s_bb="23" /><batter sac="0" bis_obp=".326" name_display_first_last="Hanley Ramirez" bam_s_sb="3" pos="SS" bis_avg=".245" bb="0" bis_s_hr="7" first_two_out_risp_lob="67" fldg="1.000" bam_s_so="35" bam_s_bb="21" bis_s_sb="3" hbp="0" bam_obp=".326" so="2" sf="0" bat_order="400" bis_s_cs="2" bis_s_so="35" sb="0" bam_slg=".438" po="1" bam_avg=".245" go="1" hr="0" bis_ops=".764" bam_ops=".764" bis_slg=".438" bam_s_cs="2" rbi="0" id="434670" lob="2" name="Ramirez, H" d="0" e="0" a="2" two_out_risp_lob="2" bam_s_hr="7" bam_s_r="23" h="0" bis_s_r="23" bis_s_rbi="25" t="0" bis_s_h="47" ao="1" bam_s_h="47" r="0" bam_s_rbi="25" bam_s_e="7" bis_s_d="16" bam_s_d="16" ab="4" bis_s_e="7" bis_s_bb="21" /><batter hr="0" sac="0" bis_obp=".000" bis_ops=".000" name_display_first_last="Jamie Romak" bam_ops=".000" bis_slg=".000" pos="PH" rbi="0" id="457449" lob="0" bis_avg=".000" name="Romak" bb="0" bis_s_hr="0" bam_s_so="0" fldg=".000" note="a-" bam_s_bb="0" hbp="0" d="0" e="0" bam_obp=".000" so="0" a="0" sf="0" bam_s_r="0" bam_s_hr="0" h="0" bat_order="901" bis_s_r="0" bis_s_rbi="0" t="0" bis_s_so="0" bis_s_h="0" bam_s_h="0" ao="0" bam_s_rbi="0" r="0" bam_slg=".000" sb="0" po="0" ab="1" bis_s_bb="0" go="1" bam_avg=".000"><pinch_hit replaced_name="Kershaw" inning_num="7" result="Grounded out" replaced_id="477132" event="422" sequence="a" inning="7th" /></batter><batter hr="0" sac="0" bis_obp=".000" bis_ops=".000" name_display_first_last="Brian Wilson" bam_ops=".000" bis_slg=".000" pos="P" rbi="0" id="451216" lob="0" bis_avg=".000" name="Wilson, Br" bb="0" bis_s_hr="0" bam_s_so="0" fldg=".000" bam_s_bb="0" hbp="0" d="0" e="0" bam_obp=".000" so="0" a="0" sf="0" bam_s_r="0" bam_s_hr="0" h="0" bat_order="904" bis_s_r="0" bis_s_rbi="0" t="0" bis_s_so="0" bis_s_h="0" bam_s_h="0" ao="0" bam_s_rbi="0" r="0" bam_s_e="1" bam_slg=".000" sb="0" bis_s_e="1" po="0" ab="0" bis_s_bb="0" bam_avg=".000" /><batter gidp="1" sac="1" bis_obp=".329" name_display_first_last="Andre Ethier" bam_s_sb="1" first_sac="476" pos="CF" bis_avg=".271" bb="0" fldg=".000" bam_s_so="30" bis_s_hr="3" bam_s_bb="11" hbp="0" bis_s_sb="1" bam_obp=".329" so="1" sf="0" bat_order="200" bis_s_cs="1" bis_s_so="30" sb="0" bam_slg=".403" po="0" bam_avg=".271" go="4" hr="0" bis_ops=".732" bam_ops=".732" bis_slg=".403" bam_s_cs="1" id="444843" rbi="0" lob="3" first_gidp="292" name="Ethier" d="0" e="0" a="0" bis_s_t="1" bam_s_t="1" bam_s_hr="3" bam_s_r="11" h="0" bis_s_r="11" bis_s_rbi="25" t="0" bis_s_h="39" ao="0" bam_s_h="39" r="0" bam_s_rbi="25" bis_s_d="8" bam_s_d="8" ab="3" bis_s_bb="11"><sac_bunt pitcher_name="Parra, M" event="476" pitcher_id="448159" /></batter><batter hr="0" sac="0" bis_obp=".250" bis_ops=".500" name_display_first_last="Clayton Kershaw" bam_ops=".500" bis_slg=".250" pos="P" rbi="0" id="477132" lob="0" bis_avg=".250" tb="1" name="Kershaw" bb="0" bis_s_hr="0" bam_s_so="3" fldg="1.000" bam_s_bb="0" hbp="0" d="0" e="0" bam_obp=".250" so="1" a="3" sf="0" bam_s_r="1" bam_s_hr="0" h="1" bat_order="900" bis_s_r="1" bis_s_rbi="0" t="0" bis_s_so="3" bis_s_h="3" bam_s_h="3" ao="0" bam_s_rbi="0" r="0" bam_slg=".250" sb="0" po="0" ab="2" bis_s_bb="0" bam_avg=".250" /><batter hr="0" sac="0" bis_obp=".000" bis_ops=".000" name_display_first_last="J.P. Howell" bam_ops=".000" bis_slg=".000" pos="P" rbi="0" id="434442" lob="0" bis_avg=".000" name="Howell" bb="0" bis_s_hr="0" bam_s_so="0" fldg=".000" bam_s_bb="0" hbp="0" d="0" e="0" bam_obp=".000" so="0" a="0" sf="0" bam_s_r="0" bam_s_hr="0" h="0" bat_order="903" bis_s_r="0" bis_s_rbi="0" t="0" bis_s_so="0" bis_s_h="0" bam_s_h="0" ao="0" bam_s_rbi="0" r="0" bam_slg=".000" sb="0" po="0" ab="0" bis_s_bb="0" bam_avg=".000" /><batter sac="0" bis_obp=".339" name_display_first_last="Dee Gordon" bam_s_sb="30" pos="2B" bis_avg=".289" tb="3" bb="1" bis_s_hr="1" fldg="1.000" bam_s_so="30" bam_s_bb="15" bis_s_sb="30" hbp="0" bam_obp=".339" so="0" sf="0" bat_order="100" bis_s_cs="3" bis_s_so="30" sb="0" bam_slg=".378" po="1" bam_avg=".289" go="1" hr="0" bis_ops=".717" bam_ops=".717" bis_slg=".378" bam_s_cs="3" id="543829" rbi="0" lob="0" name="Gordon, D" d="1" e="0" a="2" bis_s_t="3" bam_s_t="3" bam_s_hr="1" bam_s_r="30" h="2" bis_s_r="30" bis_s_rbi="13" t="0" bis_s_h="58" ao="0" bam_s_h="58" r="0" bam_s_rbi="13" bam_s_e="5" bis_s_d="9" bam_s_d="9" ab="3" bis_s_e="5" bis_s_bb="15"><double pitcher_name="Bailey" event="46" pitcher_id="456701" /></batter></batting></team></boxscore>
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mlb_gameday
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Steven Hoffman
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-04-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -103,6 +103,7 @@ extra_rdoc_files: []
|
|
103
103
|
files:
|
104
104
|
- ".gitignore"
|
105
105
|
- ".rubocop.yml"
|
106
|
+
- CHANGELOG.md
|
106
107
|
- Gemfile
|
107
108
|
- LICENSE.txt
|
108
109
|
- README.md
|
@@ -218,6 +219,7 @@ files:
|
|
218
219
|
- test/year_2014/month_05/day_28/gid_2014_05_28_cinmlb_lanmlb_1/pitchers/547973.xml
|
219
220
|
- test/year_2014/month_05/day_28/gid_2014_05_28_cinmlb_lanmlb_1/pitchers/571561.xml
|
220
221
|
- test/year_2014/month_05/day_28/gid_2014_05_28_cinmlb_lanmlb_1/pitchers/607162.xml
|
222
|
+
- test/year_2014/month_05/day_28/gid_2014_05_28_cinmlb_lanmlb_1/rawboxscore.xml
|
221
223
|
- test/year_2014/month_05/day_28/miniscoreboard.xml
|
222
224
|
- test/year_2014/month_07/day_15/gid_2014_07_15_nasmlb_aasmlb_1/pitchers/477132.xml
|
223
225
|
- test/year_2014/pitchers/477132.xml
|
@@ -241,7 +243,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
241
243
|
version: '0'
|
242
244
|
requirements: []
|
243
245
|
rubyforge_project:
|
244
|
-
rubygems_version: 2.
|
246
|
+
rubygems_version: 2.6.11
|
245
247
|
signing_key:
|
246
248
|
specification_version: 4
|
247
249
|
summary: Fetches gameday data from the MLB Gameday API
|
@@ -346,6 +348,7 @@ test_files:
|
|
346
348
|
- test/year_2014/month_05/day_28/gid_2014_05_28_cinmlb_lanmlb_1/pitchers/547973.xml
|
347
349
|
- test/year_2014/month_05/day_28/gid_2014_05_28_cinmlb_lanmlb_1/pitchers/571561.xml
|
348
350
|
- test/year_2014/month_05/day_28/gid_2014_05_28_cinmlb_lanmlb_1/pitchers/607162.xml
|
351
|
+
- test/year_2014/month_05/day_28/gid_2014_05_28_cinmlb_lanmlb_1/rawboxscore.xml
|
349
352
|
- test/year_2014/month_05/day_28/miniscoreboard.xml
|
350
353
|
- test/year_2014/month_07/day_15/gid_2014_07_15_nasmlb_aasmlb_1/pitchers/477132.xml
|
351
354
|
- test/year_2014/pitchers/477132.xml
|