sportradar-api 0.9.12 → 0.11.21
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 +6 -0
- data/.travis.yml +1 -0
- data/Gemfile.lock +32 -30
- data/README.md +12 -9
- 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/broadcast.rb +15 -0
- data/lib/sportradar/api/basketball/game.rb +339 -0
- data/lib/sportradar/api/basketball/injury.rb +41 -0
- data/lib/sportradar/api/basketball/nba/conference.rb +27 -0
- data/lib/sportradar/api/basketball/nba/division.rb +30 -0
- data/lib/sportradar/api/basketball/nba/game.rb +62 -0
- data/lib/sportradar/api/basketball/nba/hierarchy.rb +47 -0
- data/lib/sportradar/api/basketball/nba/player.rb +160 -0
- data/lib/sportradar/api/basketball/nba/quarter.rb +51 -0
- data/lib/sportradar/api/basketball/nba/schedule.rb +43 -0
- data/lib/sportradar/api/basketball/nba/scoring.rb +15 -0
- data/lib/sportradar/api/basketball/nba/season.rb +54 -0
- data/lib/sportradar/api/basketball/nba/series.rb +82 -0
- data/lib/sportradar/api/basketball/nba/team.rb +74 -0
- data/lib/sportradar/api/basketball/nba.rb +129 -0
- data/lib/sportradar/api/basketball/ncaamb/bracket.rb +44 -0
- data/lib/sportradar/api/basketball/ncaamb/conference.rb +41 -0
- data/lib/sportradar/api/basketball/ncaamb/division.rb +42 -0
- data/lib/sportradar/api/basketball/ncaamb/game.rb +75 -0
- data/lib/sportradar/api/basketball/ncaamb/half.rb +49 -0
- data/lib/sportradar/api/basketball/ncaamb/hierarchy.rb +65 -0
- data/lib/sportradar/api/basketball/ncaamb/player.rb +162 -0
- data/lib/sportradar/api/basketball/ncaamb/round.rb +55 -0
- data/lib/sportradar/api/basketball/ncaamb/schedule.rb +41 -0
- data/lib/sportradar/api/basketball/ncaamb/season.rb +55 -0
- data/lib/sportradar/api/basketball/ncaamb/team.rb +61 -0
- data/lib/sportradar/api/basketball/ncaamb/tournament.rb +154 -0
- data/lib/sportradar/api/basketball/ncaamb.rb +149 -0
- data/lib/sportradar/api/basketball/play.rb +75 -0
- data/lib/sportradar/api/basketball/plays/assist.rb +14 -0
- data/lib/sportradar/api/basketball/plays/base.rb +126 -0
- data/lib/sportradar/api/basketball/plays/block.rb +14 -0
- data/lib/sportradar/api/basketball/plays/clear_path_foul.rb +11 -0
- data/lib/sportradar/api/basketball/plays/deadball.rb +11 -0
- data/lib/sportradar/api/basketball/plays/defensive_three_seconds.rb +11 -0
- data/lib/sportradar/api/basketball/plays/delay.rb +11 -0
- data/lib/sportradar/api/basketball/plays/ejection.rb +14 -0
- data/lib/sportradar/api/basketball/plays/end_period.rb +28 -0
- data/lib/sportradar/api/basketball/plays/flagrant_one.rb +11 -0
- data/lib/sportradar/api/basketball/plays/flagrant_two.rb +11 -0
- data/lib/sportradar/api/basketball/plays/foul.rb +17 -0
- data/lib/sportradar/api/basketball/plays/free_throw_made.rb +23 -0
- data/lib/sportradar/api/basketball/plays/free_throw_miss.rb +25 -0
- data/lib/sportradar/api/basketball/plays/jumpball.rb +12 -0
- data/lib/sportradar/api/basketball/plays/kickball.rb +11 -0
- data/lib/sportradar/api/basketball/plays/lineup_change.rb +11 -0
- data/lib/sportradar/api/basketball/plays/offensive_foul.rb +11 -0
- data/lib/sportradar/api/basketball/plays/official_timeout.rb +11 -0
- data/lib/sportradar/api/basketball/plays/open_inbound.rb +9 -0
- data/lib/sportradar/api/basketball/plays/open_tip.rb +11 -0
- data/lib/sportradar/api/basketball/plays/personal_foul.rb +9 -0
- data/lib/sportradar/api/basketball/plays/rebound.rb +28 -0
- data/lib/sportradar/api/basketball/plays/review.rb +11 -0
- data/lib/sportradar/api/basketball/plays/shooting_foul.rb +9 -0
- data/lib/sportradar/api/basketball/plays/shot_made.rb +22 -0
- data/lib/sportradar/api/basketball/plays/shot_miss.rb +22 -0
- data/lib/sportradar/api/basketball/plays/steal.rb +11 -0
- data/lib/sportradar/api/basketball/plays/team_timeout.rb +14 -0
- data/lib/sportradar/api/basketball/plays/technical_foul.rb +14 -0
- data/lib/sportradar/api/basketball/plays/three_point_made.rb +14 -0
- data/lib/sportradar/api/basketball/plays/three_point_miss.rb +11 -0
- data/lib/sportradar/api/basketball/plays/timeout.rb +24 -0
- data/lib/sportradar/api/basketball/plays/turnover.rb +19 -0
- data/lib/sportradar/api/basketball/plays/tv_timeout.rb +11 -0
- data/lib/sportradar/api/basketball/plays/two_point_made.rb +14 -0
- data/lib/sportradar/api/basketball/plays/two_point_miss.rb +11 -0
- data/lib/sportradar/api/basketball/plays.rb +39 -0
- data/lib/sportradar/api/basketball/record.rb +28 -0
- data/lib/sportradar/api/basketball/scoring.rb +103 -0
- data/lib/sportradar/api/basketball/season.rb +20 -0
- data/lib/sportradar/api/basketball/team.rb +136 -0
- data/lib/sportradar/api/basketball/venue.rb +54 -0
- data/lib/sportradar/api/basketball.rb +35 -0
- data/lib/sportradar/api/{nfl/broadcast.rb → broadcast.rb} +1 -1
- data/lib/sportradar/api/content/article.rb +1 -1
- data/lib/sportradar/api/content/article_list.rb +1 -1
- data/lib/sportradar/api/content.rb +17 -5
- data/lib/sportradar/api/data.rb +53 -0
- data/lib/sportradar/api/football/README.md +62 -0
- data/lib/sportradar/api/football/drive.rb +114 -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 +36 -0
- data/lib/sportradar/api/football/ncaafb/game.rb +130 -0
- data/lib/sportradar/api/football/ncaafb/play.rb +97 -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/depth_chart.rb +53 -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/league_depth_chart.rb +41 -0
- data/lib/sportradar/api/football/nfl/play.rb +27 -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/team_depth_chart.rb +44 -0
- data/lib/sportradar/api/football/nfl/week.rb +24 -0
- data/lib/sportradar/api/football/nfl.rb +322 -0
- data/lib/sportradar/api/football/play.rb +116 -0
- data/lib/sportradar/api/football/play_statistics.rb +313 -0
- data/lib/sportradar/api/football/player.rb +121 -0
- data/lib/sportradar/api/football/quarter.rb +46 -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 +32 -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 +47 -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 +51 -9
- data/lib/sportradar/api/mma/event.rb +111 -0
- data/lib/sportradar/api/mma/fight.rb +107 -0
- data/lib/sportradar/api/mma/fighter.rb +95 -0
- data/lib/sportradar/api/mma/judge.rb +70 -0
- data/lib/sportradar/api/mma/league.rb +63 -0
- data/lib/sportradar/api/mma/referee.rb +70 -0
- data/lib/sportradar/api/mma/result.rb +68 -0
- data/lib/sportradar/api/mma/roster.rb +72 -0
- data/lib/sportradar/api/mma/schedule.rb +53 -0
- data/lib/sportradar/api/mma/score.rb +83 -0
- data/lib/sportradar/api/mma/venue.rb +72 -0
- data/lib/sportradar/api/mma.rb +195 -0
- data/lib/sportradar/api/poll.rb +40 -0
- data/lib/sportradar/api/request.rb +40 -8
- data/lib/sportradar/api/soccer/schedule.rb +1 -0
- data/lib/sportradar/api/version.rb +1 -1
- data/lib/sportradar/api.rb +20 -34
- metadata +157 -34
- 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 -16
- 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 -94
- 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 -247
- data/lib/sportradar/api/nfl/player.rb +0 -49
- 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 -205
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
module Sportradar
|
|
2
|
+
module Api
|
|
3
|
+
module Football
|
|
4
|
+
class Ncaafb
|
|
5
|
+
class Division < Data
|
|
6
|
+
attr_accessor :response, :id, :name, :alias
|
|
7
|
+
|
|
8
|
+
def initialize(data, **opts)
|
|
9
|
+
# @response = data
|
|
10
|
+
@api = opts[:api]
|
|
11
|
+
|
|
12
|
+
@id = data["id"]
|
|
13
|
+
@name = data["name"]
|
|
14
|
+
@alias = data["alias"] || data["id"]
|
|
15
|
+
update(data, **opts)
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def update(data, **opts)
|
|
19
|
+
@conferences_hash = create_data({}, data["conferences"], klass: Conference, division: self, api: @api) if data["conferences"]
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def conferences
|
|
23
|
+
@conferences_hash.values
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def conference(code_name)
|
|
27
|
+
conferences_by_name[code_name]
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def conferences_by_name
|
|
31
|
+
@conferences_by_name ||= conferences.map { |c| [c.id, c] }.to_h
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def teams
|
|
35
|
+
conferences.flat_map(&:teams)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
module Sportradar
|
|
2
|
+
module Api
|
|
3
|
+
module Football
|
|
4
|
+
class Ncaafb
|
|
5
|
+
class Drive < Sportradar::Api::Football::Drive
|
|
6
|
+
|
|
7
|
+
def over?
|
|
8
|
+
plays.last&.parsed_ending || (overtime? && ['End of Quarter', 'End of Game'].include?(plays.last&.description))
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def handle_plays_and_events(data, **opts)
|
|
12
|
+
create_data(@plays_hash, data['actions'], klass: Play, api: api, drive: self) if data['actions']
|
|
13
|
+
create_data(@events_hash, data['events'], klass: Event, api: api, drive: self) if data['events']
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def play_count
|
|
17
|
+
plays.count(&:counted_play?)
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def gain
|
|
21
|
+
Array(plays.select(&:counted_play?)).sum do |play|
|
|
22
|
+
Array(play.players).sum do |p|
|
|
23
|
+
p.dig('passing', 'yds').to_i + p.dig('rushing', 'yds').to_i
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
# e = Event.find 17632;
|
|
34
|
+
# sc = e.sportconnector_game;
|
|
35
|
+
# dr = sc.pbp[-3]
|
|
36
|
+
# pl = dr.plays.last
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
module Sportradar
|
|
2
|
+
module Api
|
|
3
|
+
module Football
|
|
4
|
+
class Ncaafb
|
|
5
|
+
class Game < Sportradar::Api::Football::Game
|
|
6
|
+
|
|
7
|
+
def initialize(data, **opts)
|
|
8
|
+
if data['id'].include?('/')
|
|
9
|
+
@year, @type, @week_number, @away_alias, @home_alias = data.delete('id').split('/')
|
|
10
|
+
end
|
|
11
|
+
super
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def clock_display
|
|
15
|
+
if clock && quarter
|
|
16
|
+
quarter > 4 ? quarter_display : "#{clock} #{quarter_display}"
|
|
17
|
+
end
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def path_base
|
|
21
|
+
"#{ year }/#{ type }/#{ week_number.to_s }/#{ away_alias }/#{ home_alias }"
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def generate_title
|
|
25
|
+
if home.full_name && away.full_name
|
|
26
|
+
"#{home.full_name} vs #{away.full_name}"
|
|
27
|
+
elsif home_alias && away_alias
|
|
28
|
+
"#{home_alias} vs #{away_alias}"
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def type # Bowl games don't seem to work when they use the bowl type instead of REG
|
|
33
|
+
'REG'
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def get_extended_box
|
|
38
|
+
data = api.get_data(path_extended_box).to_h
|
|
39
|
+
ingest_extended_box(data)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def queue_extended_box
|
|
43
|
+
url, headers, options, timeout = api.get_request_info(path_extended_box)
|
|
44
|
+
{url: url, headers: headers, params: options, timeout: timeout, callback: method(:ingest_extended_box)}
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def ingest_extended_box(data)
|
|
48
|
+
data = data
|
|
49
|
+
update(data, source: :extended_box)
|
|
50
|
+
check_newness(:extended_box, @clock)
|
|
51
|
+
data
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
def get_summary
|
|
55
|
+
data = api.get_data(path_summary).to_h
|
|
56
|
+
ingest_summary(data)
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def queue_summary
|
|
60
|
+
url, headers, options, timeout = api.get_request_info(path_summary)
|
|
61
|
+
{url: url, headers: headers, params: options, timeout: timeout, callback: method(:ingest_summary)}
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
def ingest_summary(data)
|
|
65
|
+
data = data
|
|
66
|
+
update(data, source: :summary)
|
|
67
|
+
@quarter = data.delete('quarter').to_i
|
|
68
|
+
check_newness(:box, @clock)
|
|
69
|
+
check_newness(:score, @score)
|
|
70
|
+
data
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def ingest_pbp(data)
|
|
74
|
+
super.tap {
|
|
75
|
+
clock = self.plays.last&.clock
|
|
76
|
+
quarter = self.quarters.last&.number
|
|
77
|
+
@clock = clock if clock
|
|
78
|
+
@quarter = quarter if quarter
|
|
79
|
+
}
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
def team_class
|
|
83
|
+
Team
|
|
84
|
+
end
|
|
85
|
+
def period_class
|
|
86
|
+
Quarter
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def period_name
|
|
90
|
+
'quarter'
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
def quarter_class
|
|
94
|
+
Sportradar::Api::Football::Ncaafb::Quarter
|
|
95
|
+
end
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
def api
|
|
99
|
+
@api || Sportradar::Api::Football::Ncaafb::Api.new
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
end
|
|
103
|
+
end
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
end
|
|
107
|
+
|
|
108
|
+
__END__
|
|
109
|
+
|
|
110
|
+
File.binwrite('ncaafb.bin', Marshal.dump(ncaafb))
|
|
111
|
+
|
|
112
|
+
ncaafb = Sportradar::Api::Football::Ncaafb.new(year: 2016)
|
|
113
|
+
ncaafb = Sportradar::Api::Football::Ncaafb.new
|
|
114
|
+
gg = ncaafb.games;
|
|
115
|
+
ncaafb = Marshal.load(File.binread('ncaafb.bin'));
|
|
116
|
+
g2 = ncaafb.games.sample
|
|
117
|
+
g = gg.first;
|
|
118
|
+
g = gg.sample;
|
|
119
|
+
g.week_number
|
|
120
|
+
g.year
|
|
121
|
+
g.type
|
|
122
|
+
g.path_pbp
|
|
123
|
+
res = g.get_pbp;
|
|
124
|
+
|
|
125
|
+
ncaafb = Marshal.load(File.binread('ncaafb.bin'));
|
|
126
|
+
g = ncaafb.games.first;
|
|
127
|
+
res = g.get_pbp;
|
|
128
|
+
g.quarters.first.drives[1]
|
|
129
|
+
|
|
130
|
+
g = gg.detect{|g| g.id == "b8001149-bb55-4014-a3e8-6ac0a261dfe1" } # overtime game
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
module Sportradar
|
|
2
|
+
module Api
|
|
3
|
+
module Football
|
|
4
|
+
class Ncaafb
|
|
5
|
+
class Play < Sportradar::Api::Football::Play
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
def parsed_ending
|
|
9
|
+
@parsed_ending ||= search_for_drive_end
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def counted_play?
|
|
13
|
+
['rush', 'pass'].include?(self.play_type) && !self.description.include?('No Play')
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def halftime?
|
|
17
|
+
@description == "End of 1st Half"
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def queue_details
|
|
21
|
+
if @details
|
|
22
|
+
url, headers, options, timeout = @api.get_request_info(@details)
|
|
23
|
+
{url: url, headers: headers, params: options, timeout: timeout, callback: method(:update)}
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def get_details
|
|
28
|
+
if @details
|
|
29
|
+
data = @api.get_data(@details).to_h
|
|
30
|
+
update(data)
|
|
31
|
+
data
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
private
|
|
36
|
+
|
|
37
|
+
def search_for_drive_end
|
|
38
|
+
case @play_type
|
|
39
|
+
when 'kick'
|
|
40
|
+
nil
|
|
41
|
+
when 'rush'
|
|
42
|
+
# check for fumble
|
|
43
|
+
parse_description_for_drive_end
|
|
44
|
+
when 'pass'
|
|
45
|
+
# check for fumble/interception
|
|
46
|
+
parse_description_for_drive_end
|
|
47
|
+
when 'punt'
|
|
48
|
+
:punt
|
|
49
|
+
when 'penalty'
|
|
50
|
+
nil
|
|
51
|
+
when 'fieldgoal'
|
|
52
|
+
:fg
|
|
53
|
+
when 'extrapoint'
|
|
54
|
+
:pat
|
|
55
|
+
else
|
|
56
|
+
parse_description_for_drive_end
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
# ["kick", "rush", "pass", "punt", "penalty", nil, "fieldgoal", "extrapoint"]
|
|
61
|
+
def parse_description_for_drive_end
|
|
62
|
+
parsed_ending = case @description
|
|
63
|
+
when /intercepted/i
|
|
64
|
+
:interception
|
|
65
|
+
when /fumbles/i
|
|
66
|
+
:fumble
|
|
67
|
+
when /extra point is good/i
|
|
68
|
+
:touchdown
|
|
69
|
+
# when missed extra point
|
|
70
|
+
when /punts/i
|
|
71
|
+
:punt
|
|
72
|
+
when /Field Goal is No Good. blocked/i
|
|
73
|
+
:fg
|
|
74
|
+
when /Field Goal is No Good/i
|
|
75
|
+
:fg
|
|
76
|
+
# when missed field goal
|
|
77
|
+
when /Field Goal is Good/i
|
|
78
|
+
:fg
|
|
79
|
+
when "End of 1st Half"
|
|
80
|
+
:end_of_half
|
|
81
|
+
else
|
|
82
|
+
#
|
|
83
|
+
end
|
|
84
|
+
if parsed_ending
|
|
85
|
+
parsed_ending
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
end
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
__END__
|
|
96
|
+
|
|
97
|
+
{"id"=>"694bb030-be6c-4b6f-a77d-1ea103749463", "game"=>"b3dca62c-f306-4fb8-9856-808e7b42a89f", "type"=>"pass", "official"=>true, "clock"=>":29", "quarter"=>3, "controller"=>"FLA", "updated"=>"2015-08-12T17:03:19+00:00", "formation"=>"Shotgun", "direction"=>"Right", "distance"=>"Short", "summary"=>"6-J.Driskel complete to 11-D.Robinson. 11-D.Robinson runs 9 yards for a touchdown.", "start_situation"=>{"team"=>"FLA", "side"=>"KEN", "yard_line"=>9, "down"=>2, "yfd"=>9}, "end_situation"=>{"team"=>"FLA", "side"=>"KEN", "yard_line"=>2}, "advancements"=>[{"type"=>"progression", "sequence"=>1, "team"=>"FLA", "from"=>{"side"=>"KEN", "yard_line"=>9}, "to"=>{"side"=>"KEN", "yard_line"=>0}}], "score"=>{"type"=>"touchdown", "points"=>6, "team"=>"FLA"}, "players"=>[{"id"=>"55bf8c60-6953-4d83-9982-7e38ff867130", "name"=>"Jeff Driskel", "jersey"=>6, "position"=>"QB", "team"=>"FLA", "passing"=>{"att"=>1, "cmp"=>1, "yds"=>9, "sk"=>0, "sk_yds"=>0, "td"=>1, "int"=>0, "fd"=>1, "sfty"=>0, "rz_att"=>1}}, {"id"=>"9252aab2-b175-4e2f-974d-dc7f6f8c3b3a", "name"=>"Demarcus Robinson", "jersey"=>11, "position"=>"WR", "team"=>"FLA", "receiving"=>{"tar"=>1, "rec"=>1, "yds"=>9, "yac"=>9, "td"=>1, "fum"=>0, "fd"=>1, "rz_tar"=>1}}]}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
module Sportradar
|
|
2
|
+
module Api
|
|
3
|
+
module Football
|
|
4
|
+
class Ncaafb
|
|
5
|
+
class Player < Sportradar::Api::Football::Player
|
|
6
|
+
|
|
7
|
+
def api
|
|
8
|
+
@api || Sportradar::Api::Football::Ncaafb::Api.new
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
__END__
|
|
18
|
+
|
|
19
|
+
ncaafb = Marshal.load(File.binread('ncaafb.bin'));
|
|
20
|
+
|
|
21
|
+
t = ncaafb.teams.first;
|
|
22
|
+
t.get_roster;
|
|
23
|
+
t.players.first
|
|
24
|
+
t.players.first.totals
|
|
25
|
+
|
|
26
|
+
ncaafb = Marshal.load(File.binread('ncaafb.bin'));
|
|
27
|
+
t = ncaafb.teams.sample
|
|
28
|
+
data = t.get_season_stats(2016);
|
|
29
|
+
t.get_roster;
|
|
30
|
+
t.players.sample
|
|
31
|
+
t.players.sample.totals
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
module Sportradar
|
|
2
|
+
module Api
|
|
3
|
+
module Football
|
|
4
|
+
class Ncaafb
|
|
5
|
+
class Subdivision < Data
|
|
6
|
+
attr_accessor :response, :id, :name, :alias
|
|
7
|
+
|
|
8
|
+
def initialize(data, **opts)
|
|
9
|
+
@response = data
|
|
10
|
+
@api = opts[:api]
|
|
11
|
+
|
|
12
|
+
@id = data["id"]
|
|
13
|
+
@name = data["name"]
|
|
14
|
+
|
|
15
|
+
@teams_hash = {}
|
|
16
|
+
@assigned_teams = nil
|
|
17
|
+
# binding.pry
|
|
18
|
+
|
|
19
|
+
create_data(@teams_hash, data["teams"], klass: Team, conference: self, api: @api) if data["teams"]
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def teams
|
|
23
|
+
@assigned_teams || @teams_hash.values
|
|
24
|
+
end
|
|
25
|
+
def teams=(array)
|
|
26
|
+
@assigned_teams = array
|
|
27
|
+
end
|
|
28
|
+
def team(code_name)
|
|
29
|
+
teams_by_name[code_name]
|
|
30
|
+
end
|
|
31
|
+
private def teams_by_name
|
|
32
|
+
@teams_by_name ||= teams.map { |t| [t.alias, t] }.to_h
|
|
33
|
+
end
|
|
34
|
+
def conferences
|
|
35
|
+
teams.flat_map(&:conferences)
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
module Sportradar
|
|
2
|
+
module Api
|
|
3
|
+
module Football
|
|
4
|
+
class Ncaafb
|
|
5
|
+
class Team < Sportradar::Api::Football::Team
|
|
6
|
+
|
|
7
|
+
def alias
|
|
8
|
+
id
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def players
|
|
12
|
+
get_roster if @players_hash.empty?
|
|
13
|
+
@players_hash.values
|
|
14
|
+
end
|
|
15
|
+
alias :roster :players
|
|
16
|
+
|
|
17
|
+
def player_class
|
|
18
|
+
Player
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def path_roster
|
|
22
|
+
"#{ path_base }/roster"
|
|
23
|
+
end
|
|
24
|
+
def path_season_stats(year = season_year, season = ncaafb_season)
|
|
25
|
+
"#{path_base}/#{year}/#{ncaafb_season}/statistics"
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def api
|
|
29
|
+
@api || Sportradar::Api::Football::Ncaafb::Api.new
|
|
30
|
+
end
|
|
31
|
+
def ncaafb_season
|
|
32
|
+
@type || default_season
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
__END__
|
|
43
|
+
|
|
44
|
+
ncaafb = Marshal.load(File.binread('ncaafb.bin'));
|
|
45
|
+
|
|
46
|
+
t = ncaafb.teams.first
|
|
47
|
+
data = t.get_season_stats
|
|
48
|
+
data = t.get_season_stats(2016)
|
|
49
|
+
t.players.count
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
module Sportradar
|
|
2
|
+
module Api
|
|
3
|
+
module Football
|
|
4
|
+
class Ncaafb
|
|
5
|
+
class Week < Sportradar::Api::Football::Week
|
|
6
|
+
|
|
7
|
+
def game_class
|
|
8
|
+
Game
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
__END__
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
ncaafb = Sportradar::Api::Football::Ncaafb.new
|
|
22
|
+
ncaafb = Sportradar::Api::Football::Ncaafb.new
|
|
23
|
+
res1 = ncaafb.get_schedule;
|
|
24
|
+
res2 = ncaafb.get_weekly_schedule;
|