mlb_gameday 0.0.1.alpha1 → 0.0.1.alpha2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/mlb_gameday.rb +25 -4
- data/lib/mlb_gameday/game.rb +35 -24
- data/lib/mlb_gameday/version.rb +1 -1
- data/spec/game_spec.rb +12 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 20b9c57b8372d771516dd33c460a2a371c480d40
|
4
|
+
data.tar.gz: cb8bedb141d799e2ace98bb3b0b2e1441b4a79aa
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9522000213ce1cd10565ac360acb4628f4ba396e91830d1f1811ef67e7a2d84a949eb7ce1cd79b09bc8e97907a50a143efd51b87e0675036f8cbb9561189a506
|
7
|
+
data.tar.gz: 3e9e3b8bd6208c3e03b7cb2ff51afdcfa6d0093d9dee758aaba551eef20b66488c0efb2d272baaa7321fb224c4a83fe84a0a5291a5a2483749d5d04b9a0f94ee
|
data/lib/mlb_gameday.rb
CHANGED
@@ -62,8 +62,13 @@ module MLBGameday
|
|
62
62
|
|
63
63
|
def game(gid)
|
64
64
|
date = /\A(\d+)_(\d+)_(\d+)_/.match(gid)
|
65
|
+
date = DateTime.new(date[1].to_i, date[2].to_i, date[3].to_i)
|
65
66
|
|
66
|
-
MLBGameday::Game.new(
|
67
|
+
MLBGameday::Game.new(
|
68
|
+
self,
|
69
|
+
gamecenter: fetch_gamecenter_xml(date, gid),
|
70
|
+
linescore: fetch_linescore_xml(date, gid)
|
71
|
+
)
|
67
72
|
end
|
68
73
|
|
69
74
|
def find_games(team: nil, date: nil)
|
@@ -73,14 +78,26 @@ module MLBGameday
|
|
73
78
|
|
74
79
|
if team.nil?
|
75
80
|
doc.xpath("//games/game").map do |game|
|
76
|
-
|
81
|
+
gid = game.xpath("@gameday_link").first.value
|
82
|
+
|
83
|
+
MLBGameday::Game.new(
|
84
|
+
self,
|
85
|
+
gamecenter: fetch_gamecenter_xml(date, gid),
|
86
|
+
linescore: fetch_linescore_xml(date, gid)
|
87
|
+
)
|
77
88
|
end
|
78
89
|
else
|
79
90
|
team = team(team)
|
80
91
|
|
81
92
|
doc.xpath("//games/game").map do |game|
|
82
93
|
if [game.xpath("@home_name_abbrev").first.value, game.xpath("@away_name_abbrev").first.value].include? team.code
|
83
|
-
|
94
|
+
gid = game.xpath("@gameday_link").first.value
|
95
|
+
|
96
|
+
MLBGameday::Game.new(
|
97
|
+
self,
|
98
|
+
gamecenter: fetch_gamecenter_xml(date, gid),
|
99
|
+
linescore: fetch_linescore_xml(date, gid)
|
100
|
+
)
|
84
101
|
end
|
85
102
|
end.compact!
|
86
103
|
end
|
@@ -92,10 +109,14 @@ module MLBGameday
|
|
92
109
|
Nokogiri::XML(open(API_URL + date.strftime("/year_%Y/month_%m/day_%d/miniscoreboard.xml")))
|
93
110
|
end
|
94
111
|
|
95
|
-
def
|
112
|
+
def fetch_linescore_xml(date, gameday_link)
|
96
113
|
Nokogiri::XML(open(API_URL + date.strftime("/year_%Y/month_%m/day_%d/gid_#{ gameday_link }/linescore.xml")))
|
97
114
|
end
|
98
115
|
|
116
|
+
def fetch_gamecenter_xml(date, gameday_link)
|
117
|
+
Nokogiri::XML(open(API_URL + date.strftime("/year_%Y/month_%m/day_%d/gid_#{ gameday_link }/gamecenter.xml")))
|
118
|
+
end
|
119
|
+
|
99
120
|
def fetch_batter_xml(id, year: nil)
|
100
121
|
year = Date.today.year if year.nil?
|
101
122
|
|
data/lib/mlb_gameday/game.rb
CHANGED
@@ -1,11 +1,12 @@
|
|
1
1
|
module MLBGameday
|
2
2
|
class Game
|
3
|
-
def initialize(api,
|
3
|
+
def initialize(api, linescore: nil, gamecenter: nil)
|
4
4
|
@api = api
|
5
|
-
@
|
5
|
+
@linescore = linescore
|
6
|
+
@gamecenter = gamecenter
|
6
7
|
|
7
|
-
@home = @api.team(@
|
8
|
-
@away = @api.team(@
|
8
|
+
@home = @api.team(@linescore.xpath("//game/@home_name_abbrev").first.value)
|
9
|
+
@away = @api.team(@linescore.xpath("//game/@away_name_abbrev").first.value)
|
9
10
|
end
|
10
11
|
|
11
12
|
def teams
|
@@ -21,23 +22,23 @@ module MLBGameday
|
|
21
22
|
end
|
22
23
|
|
23
24
|
def venue
|
24
|
-
xpath("//game/@venue")
|
25
|
+
@linescore.xpath("//game/@venue").first.value
|
25
26
|
end
|
26
27
|
|
27
28
|
def start_time(team = nil)
|
28
|
-
return "#{ xpath("//game/@away_time") } #{ xpath("//game/@away_time_zone") }" if team == @away
|
29
|
+
return "#{ @linescore.xpath("//game/@away_time").first.value } #{ @linescore.xpath("//game/@away_time_zone").first.value }" if team == @away
|
29
30
|
|
30
|
-
"#{ xpath("//game/@home_time") } #{ xpath("//game/@home_time_zone") }"
|
31
|
+
"#{ @linescore.xpath("//game/@home_time").first.value } #{ @linescore.xpath("//game/@home_time_zone").first.value }"
|
31
32
|
end
|
32
33
|
|
33
34
|
# Preview, Pre-Game, In Progress, Final
|
34
35
|
def status
|
35
|
-
@status ||= @
|
36
|
+
@status ||= @linescore.xpath("//game/@status").first.value
|
36
37
|
end
|
37
38
|
|
38
39
|
# [3, Top/Middle/Bottom/End]
|
39
40
|
def inning
|
40
|
-
[@
|
41
|
+
[@linescore.xpath("//game/@inning").first.value, @linescore.xpath("//game/@inning_state").first.value]
|
41
42
|
end
|
42
43
|
|
43
44
|
def runners
|
@@ -56,60 +57,60 @@ module MLBGameday
|
|
56
57
|
end
|
57
58
|
|
58
59
|
def home_record
|
59
|
-
[xpath("//game/@home_win"), xpath("//game/@home_loss")].map(&:to_i)
|
60
|
+
[@linescore.xpath("//game/@home_win").first.value, @linescore.xpath("//game/@home_loss").first.value].map(&:to_i)
|
60
61
|
end
|
61
62
|
|
62
63
|
def away_record
|
63
|
-
[xpath("//game/@away_win"), xpath("//game/@away_loss")].map(&:to_i)
|
64
|
+
[@linescore.xpath("//game/@away_win").first.value, @linescore.xpath("//game/@away_loss").first.value].map(&:to_i)
|
64
65
|
end
|
65
66
|
|
66
67
|
def current_pitcher
|
67
68
|
return nil if !in_progress?
|
68
69
|
|
69
|
-
@api.pitcher xpath("//game/current_pitcher/@id")
|
70
|
+
@api.pitcher @linescore.xpath("//game/current_pitcher/@id").first.value
|
70
71
|
end
|
71
72
|
|
72
73
|
def opposing_pitcher
|
73
74
|
return nil if !in_progress?
|
74
75
|
|
75
|
-
@api.pitcher xpath("//game/opposing_pitcher/@id")
|
76
|
+
@api.pitcher @linescore.xpath("//game/opposing_pitcher/@id").first.value
|
76
77
|
end
|
77
78
|
|
78
79
|
def winning_pitcher
|
79
80
|
return nil if !over?
|
80
81
|
|
81
|
-
@api.pitcher xpath("//game/winning_pitcher/@id")
|
82
|
+
@api.pitcher @linescore.xpath("//game/winning_pitcher/@id").first.value
|
82
83
|
end
|
83
84
|
|
84
85
|
def losing_pitcher
|
85
86
|
return nil if !over?
|
86
87
|
|
87
|
-
@api.pitcher xpath("//game/losing_pitcher/@id")
|
88
|
+
@api.pitcher @linescore.xpath("//game/losing_pitcher/@id").first.value
|
88
89
|
end
|
89
90
|
|
90
91
|
def save_pitcher
|
91
92
|
return nil if !over?
|
92
93
|
|
93
|
-
@api.pitcher xpath("//game/save_pitcher/@id")
|
94
|
+
@api.pitcher @linescore.xpath("//game/save_pitcher/@id").first.value
|
94
95
|
end
|
95
96
|
|
96
97
|
def score
|
97
98
|
return [0, 0] if !in_progress? && !over?
|
98
99
|
|
99
|
-
[xpath("//game/@home_team_runs"), xpath("//game/@away_team_runs")].map(&:to_i)
|
100
|
+
[@linescore.xpath("//game/@home_team_runs").first.value, @linescore.xpath("//game/@away_team_runs").first.value].map(&:to_i)
|
100
101
|
end
|
101
102
|
|
102
103
|
def home_pitcher
|
103
104
|
case status
|
104
105
|
when "In Progress"
|
105
106
|
# The xpath changes based on which half of the inning it is
|
106
|
-
if xpath("//game/@top_inning") == "Y"
|
107
|
+
if @linescore.xpath("//game/@top_inning").first.value == "Y"
|
107
108
|
opposing_pitcher
|
108
109
|
else
|
109
110
|
current_pitcher
|
110
111
|
end
|
111
112
|
when "Preview", "Warmup", "Pre-Game"
|
112
|
-
@api.pitcher xpath("//game/home_probable_pitcher/@id")
|
113
|
+
@api.pitcher @linescore.xpath("//game/home_probable_pitcher/@id").first.value
|
113
114
|
when "Final"
|
114
115
|
home, away = score
|
115
116
|
|
@@ -131,13 +132,13 @@ module MLBGameday
|
|
131
132
|
case status
|
132
133
|
when "In Progress"
|
133
134
|
# The xpath changes based on which half of the inning it is
|
134
|
-
if xpath("//game/@top_inning") == "Y"
|
135
|
+
if @linescore.xpath("//game/@top_inning").first.value == "Y"
|
135
136
|
current_pitcher
|
136
137
|
else
|
137
138
|
opposing_pitcher
|
138
139
|
end
|
139
140
|
when "Preview", "Warmup", "Pre-Game"
|
140
|
-
@api.pitcher xpath("//game/away_probable_pitcher/@id")
|
141
|
+
@api.pitcher @linescore.xpath("//game/away_probable_pitcher/@id").first.value
|
141
142
|
when "Final"
|
142
143
|
home, away = score
|
143
144
|
|
@@ -155,10 +156,20 @@ module MLBGameday
|
|
155
156
|
end
|
156
157
|
end
|
157
158
|
|
158
|
-
|
159
|
+
def home_tv
|
160
|
+
@gamecenter.xpath("//game/broadcast/home/tv").first.content
|
161
|
+
end
|
162
|
+
|
163
|
+
def away_tv
|
164
|
+
@gamecenter.xpath("//game/broadcast/away/tv").first.content
|
165
|
+
end
|
166
|
+
|
167
|
+
def home_radio
|
168
|
+
@gamecenter.xpath("//game/broadcast/home/radio").first.content
|
169
|
+
end
|
159
170
|
|
160
|
-
def
|
161
|
-
@
|
171
|
+
def away_radio
|
172
|
+
@gamecenter.xpath("//game/broadcast/away/radio").first.content
|
162
173
|
end
|
163
174
|
end
|
164
175
|
end
|
data/lib/mlb_gameday/version.rb
CHANGED
data/spec/game_spec.rb
CHANGED
@@ -42,4 +42,16 @@ describe "An MLB Gameday Game object" do
|
|
42
42
|
|
43
43
|
expect(game.home_pitcher.name).to eq("Clayton Kershaw")
|
44
44
|
end
|
45
|
+
|
46
|
+
it "should be on Prime Ticket and ESPN in Los Angeles" do
|
47
|
+
game = @games[0]
|
48
|
+
|
49
|
+
expect(game.home_tv).to eq("PRIME, ESPN")
|
50
|
+
end
|
51
|
+
|
52
|
+
it "should be on KNBR 680 in San Francisco" do
|
53
|
+
game = @games[0]
|
54
|
+
|
55
|
+
expect(game.away_radio).to eq("KNBR 680")
|
56
|
+
end
|
45
57
|
end
|
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.0.1.
|
4
|
+
version: 0.0.1.alpha2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Steven Hoffman
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-04-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|