sportradar-api 0.10.7 → 0.11.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.
- checksums.yaml +4 -4
- data/.env.sample +2 -0
- data/.travis.yml +1 -1
- data/Gemfile.lock +30 -28
- data/README.md +10 -7
- data/lib/sportradar/api/baseball/README.md +28 -0
- data/lib/sportradar/api/baseball/error.rb +25 -0
- data/lib/sportradar/api/baseball/event.rb +44 -0
- data/lib/sportradar/api/baseball/events/at_bat.rb +96 -0
- data/lib/sportradar/api/baseball/events/lineup.rb +41 -0
- data/lib/sportradar/api/baseball/events/warming_up.rb +35 -0
- data/lib/sportradar/api/baseball/fielder.rb +26 -0
- data/lib/sportradar/api/baseball/game.rb +472 -0
- data/lib/sportradar/api/baseball/half_inning.rb +69 -0
- data/lib/sportradar/api/baseball/inning.rb +42 -0
- data/lib/sportradar/api/baseball/lineup.rb +116 -0
- data/lib/sportradar/api/baseball/mlb/division.rb +32 -0
- data/lib/sportradar/api/baseball/mlb/hierarchy.rb +273 -0
- data/lib/sportradar/api/baseball/mlb/league.rb +27 -0
- data/lib/sportradar/api/baseball/mlb.rb +84 -0
- data/lib/sportradar/api/baseball/outcome.rb +87 -0
- data/lib/sportradar/api/baseball/pitch.rb +245 -0
- data/lib/sportradar/api/baseball/player.rb +119 -0
- data/lib/sportradar/api/baseball/record.rb +42 -0
- data/lib/sportradar/api/baseball/runner.rb +78 -0
- data/lib/sportradar/api/baseball/scoring.rb +86 -0
- data/lib/sportradar/api/baseball/team.rb +147 -0
- data/lib/sportradar/api/baseball/venue.rb +51 -0
- data/lib/sportradar/api/baseball.rb +46 -0
- data/lib/sportradar/api/basketball/game.rb +42 -7
- data/lib/sportradar/api/basketball/nba/game.rb +5 -0
- data/lib/sportradar/api/basketball/nba/series.rb +25 -2
- data/lib/sportradar/api/basketball/nba/team.rb +5 -0
- data/lib/sportradar/api/basketball/nba.rb +2 -2
- data/lib/sportradar/api/basketball/ncaamb/game.rb +15 -0
- data/lib/sportradar/api/basketball/ncaamb.rb +2 -2
- data/lib/sportradar/api/basketball/record.rb +0 -4
- data/lib/sportradar/api/basketball/venue.rb +2 -1
- data/lib/sportradar/api/{nfl/broadcast.rb → broadcast.rb} +1 -1
- data/lib/sportradar/api/config.rb +2 -2
- data/lib/sportradar/api/content.rb +9 -1
- data/lib/sportradar/api/data.rb +11 -6
- data/lib/sportradar/api/football/README.md +62 -0
- data/lib/sportradar/api/football/drive.rb +109 -0
- data/lib/sportradar/api/football/event.rb +36 -0
- data/lib/sportradar/api/football/game.rb +404 -0
- data/lib/sportradar/api/football/game_stats.rb +135 -0
- data/lib/sportradar/api/football/ncaafb/api.rb +81 -0
- data/lib/sportradar/api/football/ncaafb/conference.rb +53 -0
- data/lib/sportradar/api/football/ncaafb/division.rb +42 -0
- data/lib/sportradar/api/football/ncaafb/drive.rb +16 -0
- data/lib/sportradar/api/football/ncaafb/game.rb +115 -0
- data/lib/sportradar/api/football/ncaafb/play.rb +42 -0
- data/lib/sportradar/api/football/ncaafb/player.rb +31 -0
- data/lib/sportradar/api/football/ncaafb/quarter.rb +15 -0
- data/lib/sportradar/api/football/ncaafb/subdivision.rb +43 -0
- data/lib/sportradar/api/football/ncaafb/team.rb +49 -0
- data/lib/sportradar/api/football/ncaafb/week.rb +24 -0
- data/lib/sportradar/api/football/ncaafb.rb +273 -0
- data/lib/sportradar/api/football/nfl/api.rb +76 -0
- data/lib/sportradar/api/football/nfl/conference.rb +35 -0
- data/lib/sportradar/api/football/nfl/division.rb +37 -0
- data/lib/sportradar/api/football/nfl/drive.rb +19 -0
- data/lib/sportradar/api/football/nfl/event.rb +19 -0
- data/lib/sportradar/api/football/nfl/game.rb +77 -0
- data/lib/sportradar/api/football/nfl/play.rb +20 -0
- data/lib/sportradar/api/football/nfl/player.rb +31 -0
- data/lib/sportradar/api/football/nfl/quarter.rb +15 -0
- data/lib/sportradar/api/football/nfl/team.rb +42 -0
- data/lib/sportradar/api/football/nfl/week.rb +24 -0
- data/lib/sportradar/api/football/nfl.rb +293 -0
- data/lib/sportradar/api/football/play.rb +101 -0
- data/lib/sportradar/api/football/player.rb +120 -0
- data/lib/sportradar/api/football/quarter.rb +42 -0
- data/lib/sportradar/api/football/record.rb +48 -0
- data/lib/sportradar/api/football/scoring.rb +92 -0
- data/lib/sportradar/api/football/situation.rb +20 -0
- data/lib/sportradar/api/football/stat_pack/defense.rb +20 -20
- data/lib/sportradar/api/football/stat_pack/extra_points.rb +5 -4
- data/lib/sportradar/api/football/stat_pack/field_goals.rb +6 -5
- data/lib/sportradar/api/football/stat_pack/fumbles.rb +11 -9
- data/lib/sportradar/api/football/stat_pack/kick_returns.rb +8 -7
- data/lib/sportradar/api/football/stat_pack/kickoffs.rb +9 -7
- data/lib/sportradar/api/football/stat_pack/misc_returns.rb +1 -1
- data/lib/sportradar/api/football/stat_pack/passing.rb +13 -11
- data/lib/sportradar/api/football/stat_pack/penalties.rb +2 -2
- data/lib/sportradar/api/football/stat_pack/punt_returns.rb +7 -6
- data/lib/sportradar/api/football/stat_pack/punts.rb +12 -10
- data/lib/sportradar/api/football/stat_pack/receiving.rb +10 -9
- data/lib/sportradar/api/football/stat_pack/rushing.rb +11 -9
- data/lib/sportradar/api/football/stat_pack.rb +7 -3
- data/lib/sportradar/api/football/team.rb +160 -0
- data/lib/sportradar/api/football/venue.rb +25 -0
- data/lib/sportradar/api/football/week.rb +57 -0
- data/lib/sportradar/api/football.rb +43 -0
- data/lib/sportradar/api/images/asset.rb +2 -1
- data/lib/sportradar/api/images/ref.rb +15 -0
- data/lib/sportradar/api/images.rb +46 -8
- data/lib/sportradar/api/mma/venue.rb +1 -1
- data/lib/sportradar/api/request.rb +24 -2
- data/lib/sportradar/api/soccer/schedule.rb +1 -0
- data/lib/sportradar/api/version.rb +1 -1
- data/lib/sportradar/api.rb +6 -43
- metadata +67 -43
- data/lib/sportradar/api/ncaafb/drive.rb +0 -89
- data/lib/sportradar/api/ncaafb/game.rb +0 -161
- data/lib/sportradar/api/ncaafb/play.rb +0 -39
- data/lib/sportradar/api/ncaafb/player.rb +0 -61
- data/lib/sportradar/api/ncaafb/quarter.rb +0 -37
- data/lib/sportradar/api/ncaafb/season.rb +0 -71
- data/lib/sportradar/api/ncaafb/team.rb +0 -69
- data/lib/sportradar/api/ncaafb/week.rb +0 -33
- data/lib/sportradar/api/ncaafb.rb +0 -185
- data/lib/sportradar/api/nfl/.play_statistics.rb.swo +0 -0
- data/lib/sportradar/api/nfl/changelog.rb +0 -17
- data/lib/sportradar/api/nfl/coach.rb +0 -17
- data/lib/sportradar/api/nfl/conference.rb +0 -17
- data/lib/sportradar/api/nfl/depth_chart.rb +0 -47
- data/lib/sportradar/api/nfl/division.rb +0 -16
- data/lib/sportradar/api/nfl/draft.rb +0 -16
- data/lib/sportradar/api/nfl/drive.rb +0 -73
- data/lib/sportradar/api/nfl/event.rb +0 -19
- data/lib/sportradar/api/nfl/franchise.rb +0 -14
- data/lib/sportradar/api/nfl/game.rb +0 -123
- data/lib/sportradar/api/nfl/game_statistic.rb +0 -133
- data/lib/sportradar/api/nfl/hierarchy.rb +0 -19
- data/lib/sportradar/api/nfl/injury.rb +0 -16
- data/lib/sportradar/api/nfl/league_depth_chart.rb +0 -26
- data/lib/sportradar/api/nfl/play.rb +0 -39
- data/lib/sportradar/api/nfl/play_statistics.rb +0 -249
- data/lib/sportradar/api/nfl/player.rb +0 -56
- data/lib/sportradar/api/nfl/position.rb +0 -14
- data/lib/sportradar/api/nfl/quarter.rb +0 -29
- data/lib/sportradar/api/nfl/scoring.rb +0 -25
- data/lib/sportradar/api/nfl/season.rb +0 -23
- data/lib/sportradar/api/nfl/situation.rb +0 -18
- data/lib/sportradar/api/nfl/statistic.rb +0 -28
- data/lib/sportradar/api/nfl/summary.rb +0 -17
- data/lib/sportradar/api/nfl/team.rb +0 -56
- data/lib/sportradar/api/nfl/team_depth_chart.rb +0 -44
- data/lib/sportradar/api/nfl/venue.rb +0 -22
- data/lib/sportradar/api/nfl/week.rb +0 -16
- data/lib/sportradar/api/nfl.rb +0 -211
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 16cb3b28febfcd41fd83739b56120b115bee1c41
|
|
4
|
+
data.tar.gz: 7105f0331b5807f152f920e9fb2322880ba7f567
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 4c9e3b04058b82c88fd4b4fd67ec1698c71f4d8df0489f2b03c7231768b8be869a2878f8b3cdfc307c16f676e420d864ff2fc45658237578c7abcdad4d83e1dd
|
|
7
|
+
data.tar.gz: aa210eb3b481ad666f9277f665f4cd762ea0db1748ccfd6cd1ccdf5098b3601dd265e861a232fa5e51f7df1b9ec99c4bcad6d32c9ab543e896bab9eaf8d46660
|
data/.env.sample
CHANGED
|
@@ -11,6 +11,8 @@ SPORTRADAR_IMAGES_MLS: your-images_mls-api-key
|
|
|
11
11
|
SPORTRADAR_IMAGES_NBA: your-images_nba-api-key
|
|
12
12
|
SPORTRADAR_IMAGES_NFL: your-images_nfl-api-key
|
|
13
13
|
SPORTRADAR_IMAGES_NFL_OFFICIAL_PREMIUM: your-images_nfl-official-premium-api-key
|
|
14
|
+
SPORTRADAR_IMAGES_MLB: your-images_mlb-api-key
|
|
15
|
+
SPORTRADAR_IMAGES_MLB_PREMIUM: your-images_mlb-premium-api-key
|
|
14
16
|
SPORTRADAR_LIVE_IMAGES_MLS: your-live_images_mls-api-key
|
|
15
17
|
SPORTRADAR_LIVE_IMAGES_NBA: your-live_images_nba-api-key
|
|
16
18
|
SPORTRADAR_LIVE_IMAGES_NFL: your-live_images_nfl-api-key
|
data/.travis.yml
CHANGED
data/Gemfile.lock
CHANGED
|
@@ -1,36 +1,37 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
sportradar-api (0.
|
|
4
|
+
sportradar-api (0.11.1)
|
|
5
5
|
activesupport
|
|
6
6
|
httparty (>= 0.14.0)
|
|
7
7
|
|
|
8
8
|
GEM
|
|
9
9
|
remote: https://rubygems.org/
|
|
10
10
|
specs:
|
|
11
|
-
activesupport (5.
|
|
11
|
+
activesupport (5.1.2)
|
|
12
12
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
|
13
13
|
i18n (~> 0.7)
|
|
14
14
|
minitest (~> 5.1)
|
|
15
15
|
tzinfo (~> 1.1)
|
|
16
|
-
addressable (2.
|
|
17
|
-
|
|
18
|
-
|
|
16
|
+
addressable (2.5.1)
|
|
17
|
+
public_suffix (~> 2.0, >= 2.0.2)
|
|
18
|
+
codeclimate-test-reporter (1.0.8)
|
|
19
|
+
simplecov (<= 0.13)
|
|
19
20
|
coderay (1.1.1)
|
|
20
21
|
concurrent-ruby (1.0.5)
|
|
21
|
-
coveralls (0.8.
|
|
22
|
+
coveralls (0.8.19)
|
|
22
23
|
json (>= 1.8, < 3)
|
|
23
24
|
simplecov (~> 0.12.0)
|
|
24
25
|
term-ansicolor (~> 1.3)
|
|
25
26
|
thor (~> 0.19.1)
|
|
26
|
-
tins (
|
|
27
|
+
tins (~> 1.6)
|
|
27
28
|
crack (0.4.3)
|
|
28
29
|
safe_yaml (~> 1.0.0)
|
|
29
30
|
docile (1.1.5)
|
|
30
|
-
dotenv (2.
|
|
31
|
-
ffi (1.9.
|
|
31
|
+
dotenv (2.2.1)
|
|
32
|
+
ffi (1.9.18)
|
|
32
33
|
formatador (0.2.5)
|
|
33
|
-
guard (2.14.
|
|
34
|
+
guard (2.14.1)
|
|
34
35
|
formatador (>= 0.2.4)
|
|
35
36
|
listen (>= 2.7, < 4.0)
|
|
36
37
|
lumberjack (~> 1.0)
|
|
@@ -43,18 +44,18 @@ GEM
|
|
|
43
44
|
guard-minitest (2.4.6)
|
|
44
45
|
guard-compat (~> 1.2)
|
|
45
46
|
minitest (>= 3.0)
|
|
46
|
-
hashdiff (0.3.
|
|
47
|
-
httparty (0.
|
|
47
|
+
hashdiff (0.3.4)
|
|
48
|
+
httparty (0.15.5)
|
|
48
49
|
multi_xml (>= 0.5.2)
|
|
49
|
-
i18n (0.8.
|
|
50
|
-
json (2.0
|
|
50
|
+
i18n (0.8.4)
|
|
51
|
+
json (2.1.0)
|
|
51
52
|
listen (3.1.5)
|
|
52
53
|
rb-fsevent (~> 0.9, >= 0.9.4)
|
|
53
54
|
rb-inotify (~> 0.9, >= 0.9.7)
|
|
54
55
|
ruby_dep (~> 1.2)
|
|
55
|
-
lumberjack (1.0.
|
|
56
|
+
lumberjack (1.0.12)
|
|
56
57
|
method_source (0.8.2)
|
|
57
|
-
minitest (5.
|
|
58
|
+
minitest (5.10.2)
|
|
58
59
|
minitest-focus (1.1.2)
|
|
59
60
|
minitest (>= 4, < 6)
|
|
60
61
|
multi_xml (0.6.0)
|
|
@@ -66,28 +67,29 @@ GEM
|
|
|
66
67
|
coderay (~> 1.1.0)
|
|
67
68
|
method_source (~> 0.8.1)
|
|
68
69
|
slop (~> 3.4)
|
|
70
|
+
public_suffix (2.0.5)
|
|
69
71
|
rake (10.5.0)
|
|
70
|
-
rb-fsevent (0.9.
|
|
71
|
-
rb-inotify (0.9.
|
|
72
|
-
ffi (>= 0.5.0)
|
|
73
|
-
ruby_dep (1.
|
|
72
|
+
rb-fsevent (0.9.8)
|
|
73
|
+
rb-inotify (0.9.10)
|
|
74
|
+
ffi (>= 0.5.0, < 2)
|
|
75
|
+
ruby_dep (1.5.0)
|
|
74
76
|
safe_yaml (1.0.4)
|
|
75
77
|
shellany (0.0.1)
|
|
76
78
|
simplecov (0.12.0)
|
|
77
79
|
docile (~> 1.1.0)
|
|
78
80
|
json (>= 1.8, < 3)
|
|
79
81
|
simplecov-html (~> 0.10.0)
|
|
80
|
-
simplecov-html (0.10.
|
|
82
|
+
simplecov-html (0.10.1)
|
|
81
83
|
slop (3.6.0)
|
|
82
|
-
term-ansicolor (1.
|
|
84
|
+
term-ansicolor (1.6.0)
|
|
83
85
|
tins (~> 1.0)
|
|
84
|
-
thor (0.19.
|
|
85
|
-
thread_safe (0.3.
|
|
86
|
-
tins (1.
|
|
87
|
-
tzinfo (1.2.
|
|
86
|
+
thor (0.19.4)
|
|
87
|
+
thread_safe (0.3.6)
|
|
88
|
+
tins (1.14.0)
|
|
89
|
+
tzinfo (1.2.3)
|
|
88
90
|
thread_safe (~> 0.1)
|
|
89
91
|
vcr (3.0.3)
|
|
90
|
-
webmock (
|
|
92
|
+
webmock (3.0.1)
|
|
91
93
|
addressable (>= 2.3.6)
|
|
92
94
|
crack (>= 0.3.2)
|
|
93
95
|
hashdiff
|
|
@@ -112,4 +114,4 @@ DEPENDENCIES
|
|
|
112
114
|
webmock
|
|
113
115
|
|
|
114
116
|
BUNDLED WITH
|
|
115
|
-
1.
|
|
117
|
+
1.15.3
|
data/README.md
CHANGED
|
@@ -23,7 +23,7 @@ Our goal is to incrementally integrate with them. **Contributions are welcome**
|
|
|
23
23
|
| API | Version | Docs | Implemented? | Priority |
|
|
24
24
|
| --- | --- | --- | --- | --- |
|
|
25
25
|
| NFL | 1 | [📚](http://developer.sportradar.us/page/NFL_Official) | ✅ | 👍 |
|
|
26
|
-
| MLB |
|
|
26
|
+
| MLB | 6 | [📚](https://developer.sportradar.com/files/indexBaseball.html#major-league-baseball-api-v6) | ✅ | 👍 |
|
|
27
27
|
| NHL | 3 | [📚](http://developer.sportradar.us/docs/NHL_API) | - | - |
|
|
28
28
|
| NBA | 3 | [📚](http://developer.sportradar.us/docs/NBA_API) | ✅ | - |
|
|
29
29
|
| NCAAMB | 3 | [📚](http://developer.sportradar.us/docs/NCAA_Mens_Basketball) | ✅ | - |
|
|
@@ -86,15 +86,18 @@ summary = sim.match_summary(sim.simulation_match)
|
|
|
86
86
|
boxscore = sim.match_boxscore(sim.simulation_match)
|
|
87
87
|
```
|
|
88
88
|
|
|
89
|
-
###
|
|
89
|
+
### Football
|
|
90
90
|
|
|
91
|
-
It's possible to
|
|
91
|
+
It's possible to use simulation games from Sportradar. This allows you to see what data looks like during a game (including non game APIs), useful for development during the offseason.
|
|
92
92
|
|
|
93
93
|
```
|
|
94
|
-
Sportradar::Api::Nfl.
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
94
|
+
sims = Sportradar::Api::Football::Nfl.simulations # => returns array of simulation games. Only 1 is inprogress at a time
|
|
95
|
+
sims.each(&:get_pbp).detect(&:started?)
|
|
96
|
+
nfl = Sportradar::Api::Football::Nfl.simulation # => returns Sportradar::Api::Football::Nfl instance with a sim api. useful for mid season stats, standings, etc
|
|
97
|
+
|
|
98
|
+
sims = Sportradar::Api::Football::Ncaafb.simulations # => returns array of simulation games. Only 1 is inprogress at a time
|
|
99
|
+
sims.each(&:get_pbp).detect(&:started?)
|
|
100
|
+
ncaafb = Sportradar::Api::Football::Ncaafb.simulation # => returns Sportradar::Api::Football::Ncaafb instance with a sim api. useful for mid season stats, standings, etc
|
|
98
101
|
```
|
|
99
102
|
|
|
100
103
|
## Development
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# Sportradar Baseball
|
|
2
|
+
|
|
3
|
+

|
|
4
|
+
|
|
5
|
+
*Currently, only MLB is supported.*
|
|
6
|
+
|
|
7
|
+
## MLB
|
|
8
|
+
|
|
9
|
+
Get started with official MLB api v6:
|
|
10
|
+
|
|
11
|
+
```ruby
|
|
12
|
+
mlb = Sportradar::Api::Baseball::Mlb::Hierarchy.new
|
|
13
|
+
res = mlb.get_daily_summary # => res is the raw response from Sportradar. `mlb` now has game summaries to interact with
|
|
14
|
+
res = mlb.get_hierarchy # => res is the raw response from Sportradar. `mlb` now has leagues/divisions/teams to interact with
|
|
15
|
+
mlb.leagues.count # => 2
|
|
16
|
+
mlb.divisions.count # => 6
|
|
17
|
+
mlb.teams.count # => 30
|
|
18
|
+
res = mlb.get_schedule # => res is the raw response from Sportradar. `mlb` now has games to interact with
|
|
19
|
+
mlb.games.count # => 2430
|
|
20
|
+
|
|
21
|
+
game = mlb.games.sample # => Sportradar::Api::Baseball::Game
|
|
22
|
+
data = game.get_pbp # => data is raw response from Sportradar. `game` now has innings/half innings/atbats/pitches to interact with
|
|
23
|
+
game.innings.count # => 10 (Sportradar has an inning #0, representing starting lineups)
|
|
24
|
+
game.half_innings.count # => 20 (if the game went the full 9 innings)
|
|
25
|
+
data = game.get_summary # => data is raw response from Sportradar. `game` now statistical information to interact with
|
|
26
|
+
game.count # `count` contains information about the current game state, such as balls/strikes to current batter, current inning, and outs
|
|
27
|
+
```
|
|
28
|
+
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
module Sportradar
|
|
2
|
+
module Api
|
|
3
|
+
module Baseball
|
|
4
|
+
class Error < Data
|
|
5
|
+
attr_accessor :response, :id, :type, :last_name, :first_name, :preferred_name, :jersey_number
|
|
6
|
+
|
|
7
|
+
def initialize(data, **opts)
|
|
8
|
+
@response = data
|
|
9
|
+
# @game = opts[:game]
|
|
10
|
+
|
|
11
|
+
update(data)
|
|
12
|
+
end
|
|
13
|
+
def update(data, **opts)
|
|
14
|
+
@id = data["id"]
|
|
15
|
+
@type = data["type"]
|
|
16
|
+
@last_name = data["last_name"]
|
|
17
|
+
@first_name = data["first_name"]
|
|
18
|
+
@preferred_name = data["preferred_name"]
|
|
19
|
+
@jersey_number = data["jersey_number"]
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
module Sportradar
|
|
2
|
+
module Api
|
|
3
|
+
module Baseball
|
|
4
|
+
class Event < Data
|
|
5
|
+
attr_accessor :response, :id, :at_bat, :lineup, :warming_up, :half_inning
|
|
6
|
+
# alias :type :event_type
|
|
7
|
+
|
|
8
|
+
def initialize(hash, **opts)
|
|
9
|
+
@response = hash
|
|
10
|
+
@half_inning = opts[:half_inning]
|
|
11
|
+
@at_bat = AtBat.new(hash['at_bat'], event: self) if hash['at_bat']
|
|
12
|
+
@lineup = Lineup.new(hash['lineup'], event: self) if hash['lineup']
|
|
13
|
+
@warming_up = WarmingUp.new(hash['warming_up'], event: self) if hash['warming_up']
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def description
|
|
17
|
+
(@at_bat || @lineup || @warming_up)&.description
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
# def self.new(data, **opts)
|
|
21
|
+
# klass = subclass(data.keys.first)
|
|
22
|
+
# klass.new(data, **opts)
|
|
23
|
+
# rescue => e
|
|
24
|
+
# binding.pry
|
|
25
|
+
# end
|
|
26
|
+
|
|
27
|
+
# def ==(other)
|
|
28
|
+
# @at_bat == other.at_bat && @warming_up == other.warming_up && @lineup == other.lineup
|
|
29
|
+
# end
|
|
30
|
+
def self.subclass(event_type)
|
|
31
|
+
subclasses[event_type]
|
|
32
|
+
end
|
|
33
|
+
def self.subclasses
|
|
34
|
+
@subclasses ||= {
|
|
35
|
+
'at_bat' => AtBat,
|
|
36
|
+
'lineup' => Lineup,
|
|
37
|
+
'warming_up' => WarmingUp,
|
|
38
|
+
}.freeze
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
44
|
+
end
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
module Sportradar
|
|
2
|
+
module Api
|
|
3
|
+
module Baseball
|
|
4
|
+
class Event
|
|
5
|
+
class AtBat < Data
|
|
6
|
+
attr_accessor :response, :id, :event, :hitter_id, :hitter_hand, :pitcher_id, :pitcher_hand, :outcome, :description
|
|
7
|
+
|
|
8
|
+
def initialize(data, **opts)
|
|
9
|
+
@response = data
|
|
10
|
+
@api = opts[:api]
|
|
11
|
+
@event = opts[:event]
|
|
12
|
+
|
|
13
|
+
@id = data["id"]
|
|
14
|
+
@type = data['type']
|
|
15
|
+
|
|
16
|
+
@pitches_hash = {}
|
|
17
|
+
|
|
18
|
+
update(data)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# def ==(other)
|
|
22
|
+
# return false if other.nil?
|
|
23
|
+
# @id == other.id && pitches == other.pitches
|
|
24
|
+
# end
|
|
25
|
+
def outcome_id
|
|
26
|
+
pitches.last&.outcome_id
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def outcome
|
|
30
|
+
pitches.last&.outcome
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
def hit?
|
|
34
|
+
single? || double? || triple? || homerun?
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def single?
|
|
40
|
+
outcome.to_s.include?('Single')
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def double?
|
|
44
|
+
outcome.to_s.include?('Double')
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def triple?
|
|
48
|
+
outcome.to_s.include?('Triple')
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def homerun?
|
|
52
|
+
pitches.last&.homerun?
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def runs?
|
|
56
|
+
runs.any?
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def strikeout?
|
|
60
|
+
pitches.last&.count.dig('strikes') == 3
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
def runs
|
|
64
|
+
pitches.flat_map {|pitch| pitch.runners&.select {|x| x.ending_base == 4 } }.compact
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def update(data, **opts)
|
|
68
|
+
@description = data['description'] if data['description']
|
|
69
|
+
@hitter_id = data['hitter_id'] if data['hitter_id']
|
|
70
|
+
@pitcher_id = data['pitcher_id'] if data['pitcher_id']
|
|
71
|
+
@hitter_hand = data['hitter_hand'] if data['hitter_hand']
|
|
72
|
+
@pitcher_hand = data['pitcher_hand'] if data['pitcher_hand']
|
|
73
|
+
# this hasn't been checked yet
|
|
74
|
+
# pitch events
|
|
75
|
+
pitches = data.dig('events').select {|pitch| pitch["type"] == 'pitch' }
|
|
76
|
+
create_data(@pitches_hash, pitches, klass: Pitch, api: @api, at_bat: self)
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
def data_key
|
|
80
|
+
'at_bat'
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def over?
|
|
84
|
+
pitches.last&.is_ab_over
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
def pitches
|
|
89
|
+
@pitches_hash.values
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
end
|
|
94
|
+
end
|
|
95
|
+
end
|
|
96
|
+
end
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
module Sportradar
|
|
2
|
+
module Api
|
|
3
|
+
module Baseball
|
|
4
|
+
class Event
|
|
5
|
+
class Lineup < Data
|
|
6
|
+
attr_accessor :response, :id, :hitter_id, :outcome, :description, :event, :player_id, :order, :position, :team_id, :last_name, :first_name, :preferred_name, :jersey_number
|
|
7
|
+
|
|
8
|
+
def initialize(data, **opts)
|
|
9
|
+
@response = data
|
|
10
|
+
@event = opts[:event]
|
|
11
|
+
@description = data["description"]
|
|
12
|
+
@id = data["id"]
|
|
13
|
+
@player_id = data["player_id"]
|
|
14
|
+
@order = data["order"]
|
|
15
|
+
@position = data["position"]
|
|
16
|
+
@team_id = data["team_id"]
|
|
17
|
+
@last_name = data["last_name"]
|
|
18
|
+
@first_name = data["first_name"]
|
|
19
|
+
@preferred_name = data["preferred_name"]
|
|
20
|
+
@jersey_number = data["jersey_number"]
|
|
21
|
+
|
|
22
|
+
update(data)
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def update(data, **opts)
|
|
26
|
+
lineup = event.half_inning.inning.game.lineup
|
|
27
|
+
lineup.update_from_lineup_event(data)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def data_key
|
|
31
|
+
'lineup'
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
module Sportradar
|
|
2
|
+
module Api
|
|
3
|
+
module Baseball
|
|
4
|
+
class Event
|
|
5
|
+
class WarmingUp < Data
|
|
6
|
+
attr_accessor :response, :id, :first_name, :last_name, :player_id, :team_id
|
|
7
|
+
|
|
8
|
+
def initialize(data, **opts)
|
|
9
|
+
@response = data
|
|
10
|
+
# @api = opts[:api]
|
|
11
|
+
# @half_inning = opts[:half_inning]
|
|
12
|
+
@event = opts[:event]
|
|
13
|
+
@id = data["id"]
|
|
14
|
+
@type = data['type']
|
|
15
|
+
@first_name = data['first_name'] if data['first_name']
|
|
16
|
+
@last_name = data['last_name'] if data['last_name']
|
|
17
|
+
@player_id = data['player_id'] if data['player_id']
|
|
18
|
+
@team_id = data['team_id'] if data['team_id']
|
|
19
|
+
@preferred_name = data['preferred_name'] if data['preferred_name']
|
|
20
|
+
update(data)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def update(data, **opts)
|
|
24
|
+
# parse pitches
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def data_key
|
|
28
|
+
'warming_up'
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
module Sportradar
|
|
2
|
+
module Api
|
|
3
|
+
module Baseball
|
|
4
|
+
class Fielder < Data
|
|
5
|
+
attr_accessor :response, :id, :starting_base, :ending_base, :outcome_id, :out
|
|
6
|
+
|
|
7
|
+
def initialize(data, **opts)
|
|
8
|
+
@response = data
|
|
9
|
+
# @game = opts[:game]
|
|
10
|
+
|
|
11
|
+
update(data)
|
|
12
|
+
end
|
|
13
|
+
def update(data, **opts)
|
|
14
|
+
@id = data["id"]
|
|
15
|
+
@type = data["type"]
|
|
16
|
+
@sequence = data["sequence"]
|
|
17
|
+
@last_name = data["last_name"]
|
|
18
|
+
@first_name = data["first_name"]
|
|
19
|
+
@preferred_name = data["preferred_name"]
|
|
20
|
+
@jersey_number = data["jersey_number"]
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|