gameday_api 0.5.0 → 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,205 @@
1
+ require 'pitchfx_db_manager'
2
+ require 'game'
3
+ require 'date'
4
+
5
+
6
+
7
+ class DbImporter
8
+
9
+ # player
10
+
11
+ # team
12
+ # game
13
+ # atbat
14
+ # pitch
15
+ # pitch type
16
+ # game type
17
+ # umpire
18
+
19
+ def initialize(host, user, password, db_name)
20
+ @db = PitchfxDbManager.new(host, user, password, db_name)
21
+ end
22
+
23
+
24
+ def import_team_for_month(team_abbrev, year, month)
25
+ start_date = Date.new(year.to_i, month.to_i) # first day of month
26
+ end_date = (start_date >> 1)-1 # last day of month
27
+ ((start_date)..(end_date)).each do |dt|
28
+ puts year.to_s + '/' + month.to_s + '/' + dt.day
29
+ team = Team.new('det')
30
+ games = team.games_for_date(year, month, dt.day.to_s)
31
+ games.each do |game|
32
+ import_for_game(game.gid)
33
+ end
34
+ end
35
+ end
36
+
37
+
38
+ def import_for_month(year, month)
39
+ start_date = Date.new(year.to_i, month.to_i) # first day of month
40
+ end_date = (start_date >> 1)-1 # last day of month
41
+ ((start_date)..(end_date)).each do |dt|
42
+ puts dt.year.to_s + '/' + dt.month.to_s + '/' + dt.day.to_s
43
+ import_for_date(dt.year.to_s, dt.month.to_s, dt.day.to_s)
44
+ end
45
+ end
46
+
47
+
48
+ def import_for_range(year, start_month, start_day, end_month, end_day)
49
+ start_date = Date.new(year.to_i, start_month.to_i, start_day.to_i)
50
+ end_date = Date.new(year.to_i, end_month.to_i, end_day.to_i)
51
+ ((start_date)..(end_date)).each do |dt|
52
+ puts dt.year.to_s + '/' + dt.month.to_s + '/' + dt.day.to_s
53
+ import_for_date(dt.year.to_s, dt.month.to_s, dt.day.to_s)
54
+ end
55
+ end
56
+
57
+
58
+ def import_for_date(year, month, day)
59
+ games = Game.find_by_date(year, month, day)
60
+ if games && games.length > 0
61
+ games.each do |game|
62
+ import_for_game(game.gid)
63
+ end
64
+ end
65
+ end
66
+
67
+
68
+ def import_for_game(gid)
69
+ game = Game.new(gid)
70
+ visitor_id = @db.find_or_create_team(game.visiting_team)
71
+ home_id = @db.find_or_create_team(game.home_team)
72
+ import_players_for_game(gid, visitor_id, home_id)
73
+ game_id = @db.find_or_create_game(game, visitor_id, home_id)
74
+ abs = game.get_atbats
75
+ abs.each do |ab|
76
+ atbat_id = @db.find_or_create_atbat(ab, game_id)
77
+ pitches = ab.pitches
78
+ pitches.each do |pitch|
79
+ @db.find_or_create_pitch(pitch, atbat_id)
80
+ end
81
+ end
82
+ import_pitcher_lines_for_game(gid)
83
+ end
84
+
85
+
86
+ def import_players_for_game(gid, visitor_id, home_id)
87
+ players = Players.new
88
+ players.load_from_id(gid)
89
+ away = players.rosters[0]
90
+ home = players.rosters[1]
91
+ away.players.each do |player|
92
+ @db.find_or_create_player(player, visitor_id)
93
+ end
94
+ home.players.each do |player|
95
+ @db.find_or_create_player(player, home_id)
96
+ end
97
+ end
98
+
99
+
100
+ def import_pitcher_lines_for_month(year, month)
101
+ start_date = Date.new(year.to_i, month.to_i) # first day of month
102
+ end_date = (start_date >> 1)-1 # last day of month
103
+ ((start_date)..(end_date)).each do |dt|
104
+ puts dt.year.to_s + '/' + dt.month.to_s + '/' + dt.day.to_s
105
+ import_pitcher_lines_for_date(dt.year.to_s, dt.month.to_s, dt.day.to_s)
106
+ end
107
+ end
108
+
109
+
110
+ def import_pitcher_lines_for_date(year, month, day)
111
+ games = Game.find_by_date(year, month, day)
112
+ if games && games.length > 0
113
+ games.each do |game|
114
+ import_pitcher_lines_for_game(game.gid)
115
+ end
116
+ end
117
+ end
118
+
119
+
120
+ def import_pitcher_lines_for_range(year, start_month, start_day, end_month, end_day)
121
+ start_date = Date.new(year.to_i, start_month.to_i, start_day.to_i)
122
+ end_date = Date.new(year.to_i, end_month.to_i, end_day.to_i)
123
+ ((start_date)..(end_date)).each do |dt|
124
+ puts dt.year.to_s + '/' + dt.month.to_s + '/' + dt.day.to_s
125
+ import_pitcher_lines_for_date(dt.year.to_s, dt.month.to_s, dt.day.to_s)
126
+ end
127
+ end
128
+
129
+
130
+ def import_pitcher_lines_for_game(gid)
131
+ game = Game.new(gid)
132
+ pitchers = game.get_boxscore.pitchers
133
+ pitchers.each do |h_or_a_pitchers|
134
+ h_or_a_pitchers.each do |pitcher|
135
+ @db.find_or_create_pitcher_line(pitcher, game)
136
+ end
137
+ end
138
+ end
139
+
140
+
141
+ def set_status_for_range(year, start_month, start_day, end_month, end_day)
142
+ start_date = Date.new(year.to_i, start_month.to_i, start_day.to_i)
143
+ end_date = Date.new(year.to_i, end_month.to_i, end_day.to_i)
144
+ ((start_date)..(end_date)).each do |dt|
145
+ puts dt.year.to_s + '/' + dt.month.to_s + '/' + dt.day.to_s
146
+ set_status_for_date(dt.year.to_s, dt.month.to_s, dt.day.to_s)
147
+ end
148
+ end
149
+
150
+
151
+ def set_status_for_date(year, month, day)
152
+ games = Game.find_by_date(year, month, day)
153
+ if games && games.length > 0
154
+ games.each do |game|
155
+ set_status_for_game(game.gid)
156
+ end
157
+ end
158
+ end
159
+
160
+
161
+ def set_status_for_game(gid)
162
+ game = Game.new(gid)
163
+ @db.update_status_for_game(game)
164
+ end
165
+
166
+
167
+ def import_rosters_for_range(year, start_month, start_day, end_month, end_day)
168
+ start_date = Date.new(year.to_i, start_month.to_i, start_day.to_i)
169
+ end_date = Date.new(year.to_i, end_month.to_i, end_day.to_i)
170
+ ((start_date)..(end_date)).each do |dt|
171
+ puts dt.year.to_s + '/' + dt.month.to_s + '/' + dt.day.to_s
172
+ import_rosters_for_date(dt.year.to_s, dt.month.to_s, dt.day.to_s)
173
+ end
174
+ end
175
+
176
+
177
+ def import_rosters_for_date(year, month, day)
178
+ games = Game.find_by_date(year, month, day)
179
+ if games && games.length > 0
180
+ games.each do |game|
181
+ import_rosters_for_game(game.gid)
182
+ end
183
+ end
184
+ end
185
+
186
+
187
+ def import_rosters_for_game(gid)
188
+ game = Game.new(gid)
189
+ away_id = @db.find_or_create_team(game.visiting_team)
190
+ home_id = @db.find_or_create_team(game.home_team)
191
+ players = Players.new
192
+ players.load_from_id(gid)
193
+ away = players.rosters[0]
194
+ home = players.rosters[1]
195
+ roster_ids = @db.find_or_create_rosters(gid, away_id, home_id)
196
+ away.players.each do |player|
197
+ @db.find_or_create_roster_player(player, roster_ids[0])
198
+ end
199
+ home.players.each do |player|
200
+ @db.find_or_create_roster_player(player, roster_ids[1])
201
+ end
202
+ end
203
+
204
+
205
+ end
data/lib/event.rb ADDED
@@ -0,0 +1,14 @@
1
+ class Event
2
+
3
+ attr_accessor :number, :inning, :description, :team
4
+
5
+ def load(element, home_or_away)
6
+ @xml_doc = element
7
+ @team = home_or_away
8
+ @number = element.attributes["number"]
9
+ @inning = element.attributes["inning"]
10
+ @description = element.attributes["description"]
11
+ end
12
+
13
+
14
+ end
data/lib/event_log.rb ADDED
@@ -0,0 +1,103 @@
1
+ require 'event'
2
+ require 'gameday_fetcher'
3
+
4
+
5
+ # Parses the MLB Gameday eventLog.xml file
6
+ class EventLog
7
+
8
+ attr_accessor :home_team, :away_team, :gid
9
+ attr_accessor :home_events, :away_events
10
+ attr_accessor :max_inning
11
+
12
+
13
+ # Loads the eventLog XML from the MLB gameday server and parses it using REXML
14
+ def load_from_id(gid)
15
+ @gid = gid
16
+ @xml_data = GamedayFetcher.fetch_eventlog(gid)
17
+ @xml_doc = REXML::Document.new(@xml_data)
18
+ if @xml_doc.root
19
+ set_teams
20
+ set_events
21
+ end
22
+ end
23
+
24
+
25
+ # Sets the team names for the teams involved in this game
26
+ def set_teams
27
+ @xml_doc.elements.each("game/team[@home_team='false']") do |element|
28
+ @away_team = element.attributes["name"]
29
+ end
30
+ @xml_doc.elements.each("game/team[@home_team='true']") do |element|
31
+ @home_team = element.attributes["name"]
32
+ end
33
+ end
34
+
35
+
36
+ def set_events
37
+ @home_events, @away_events = [], []
38
+ @max_inning = 0
39
+ # set away team events
40
+ @xml_doc.elements.each("game/team[@home_team='false']/event") { |element|
41
+ event = Event.new
42
+ event.load(element, 'away')
43
+ @max_inning = event.inning.to_i unless event.inning.to_i < @max_inning
44
+ @away_events.push event
45
+ }
46
+ # set home team events
47
+ @xml_doc.elements.each("game/team[@home_team='true']/event") { |element|
48
+ event = Event.new
49
+ event.load(element, 'home')
50
+ @home_events.push event
51
+ }
52
+ end
53
+
54
+
55
+ def events_by_inning(inning)
56
+ events = []
57
+ @away_events.each do |event|
58
+ if event.inning == inning
59
+ events << event
60
+ end
61
+ end
62
+ @home_events.each do |event|
63
+ if event.inning == inning
64
+ events << event
65
+ end
66
+ end
67
+ events
68
+ end
69
+
70
+
71
+ def dump
72
+ (1..@max_inning).each do |inning|
73
+ dump_inning(inning.to_s)
74
+ end
75
+ end
76
+
77
+
78
+ def dump_inning(inning)
79
+ puts 'Inning - ' + inning.to_s
80
+ events = events_by_inning(inning)
81
+ events.each do |event|
82
+ puts event.description
83
+ end
84
+ end
85
+
86
+
87
+ # NOT IMPLEMENTED YET
88
+ def dump_to_file
89
+ GamedayUtil.save_file("eventlog.html", self.to_html('eventlog.html.erb'))
90
+ end
91
+
92
+
93
+ # NOT IMPLEMENTED YET
94
+ # Converts the eventlog into a formatted HTML representation.
95
+ # Relies on the eventlog.html.erb template for describing the layout
96
+ def to_html(template_filename)
97
+ gameday_info = GamedayUtil.parse_gameday_id('gid_' + gid)
98
+ template = ERB.new File.new(File.expand_path(File.dirname(__FILE__) + "/" + template_filename)).read, nil, "%"
99
+ return template.result(binding)
100
+ end
101
+
102
+
103
+ end