sportradar-api 0.12.3 → 0.13.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (59) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/Gemfile.lock +1 -1
  4. data/README.md +3 -3
  5. data/lib/sportradar/api/baseball/game.rb +6 -2
  6. data/lib/sportradar/api/baseball/mlb.rb +1 -1
  7. data/lib/sportradar/api/baseball/pitch.rb +5 -0
  8. data/lib/sportradar/api/basketball/game.rb +14 -2
  9. data/lib/sportradar/api/basketball/nba/player.rb +2 -2
  10. data/lib/sportradar/api/basketball/nba.rb +1 -1
  11. data/lib/sportradar/api/basketball/plays/base.rb +1 -1
  12. data/lib/sportradar/api/data.rb +2 -1
  13. data/lib/sportradar/api/error.rb +1 -1
  14. data/lib/sportradar/api/images.rb +1 -1
  15. data/lib/sportradar/api/request.rb +22 -1
  16. data/lib/sportradar/api/soccer/api.rb +66 -0
  17. data/lib/sportradar/api/soccer/event.rb +45 -0
  18. data/lib/sportradar/api/soccer/fact.rb +56 -53
  19. data/lib/sportradar/api/soccer/group.rb +70 -0
  20. data/lib/sportradar/api/soccer/lineup.rb +31 -0
  21. data/lib/sportradar/api/soccer/match.rb +224 -44
  22. data/lib/sportradar/api/soccer/player.rb +54 -67
  23. data/lib/sportradar/api/soccer/season.rb +58 -7
  24. data/lib/sportradar/api/soccer/standing.rb +43 -6
  25. data/lib/sportradar/api/soccer/team.rb +155 -53
  26. data/lib/sportradar/api/soccer/team_group.rb +57 -0
  27. data/lib/sportradar/api/soccer/tournament.rb +302 -14
  28. data/lib/sportradar/api/soccer/venue.rb +14 -13
  29. data/lib/sportradar/api/{soccer → soccer-old}/boxscore.rb +0 -0
  30. data/lib/sportradar/api/{soccer → soccer-old}/category.rb +0 -0
  31. data/lib/sportradar/api/soccer-old/fact.rb +61 -0
  32. data/lib/sportradar/api/{soccer → soccer-old}/hierarchy.rb +0 -0
  33. data/lib/sportradar/api/soccer-old/match.rb +55 -0
  34. data/lib/sportradar/api/soccer-old/player.rb +88 -0
  35. data/lib/sportradar/api/{soccer → soccer-old}/ranking.rb +0 -0
  36. data/lib/sportradar/api/{soccer → soccer-old}/schedule.rb +0 -0
  37. data/lib/sportradar/api/soccer-old/season.rb +14 -0
  38. data/lib/sportradar/api/soccer-old/standing.rb +13 -0
  39. data/lib/sportradar/api/{soccer → soccer-old}/statistic.rb +0 -0
  40. data/lib/sportradar/api/{soccer → soccer-old}/summary.rb +0 -0
  41. data/lib/sportradar/api/soccer-old/team.rb +63 -0
  42. data/lib/sportradar/api/soccer-old/tournament.rb +20 -0
  43. data/lib/sportradar/api/{soccer → soccer-old}/tournament_group.rb +0 -0
  44. data/lib/sportradar/api/soccer-old/venue.rb +21 -0
  45. data/lib/sportradar/api/soccer-old.rb +158 -0
  46. data/lib/sportradar/api/soccer.rb +18 -152
  47. data/lib/sportradar/api/version.rb +1 -1
  48. data/lib/sportradar/api.rb +17 -18
  49. data/soccer-old/boxscore_test.rb +14 -0
  50. data/soccer-old/hierarchy_test.rb +14 -0
  51. data/soccer-old/match_test.rb +23 -0
  52. data/soccer-old/player_test.rb +40 -0
  53. data/soccer-old/ranking_test.rb +16 -0
  54. data/soccer-old/schedule_test.rb +24 -0
  55. data/soccer-old/standing_test.rb +14 -0
  56. data/soccer-old/summary_test.rb +14 -0
  57. data/soccer-old/team_test.rb +21 -0
  58. data/soccer-old_test.rb +184 -0
  59. metadata +34 -10
@@ -1,63 +1,165 @@
1
1
  module Sportradar
2
2
  module Api
3
- class Soccer::Team < Data
4
- attr_accessor :response, :id, :name, :full_name, :alias, :country_code, :country, :type, :reference_id, :formation, :score, :regular_score, :penalty_score, :winner, :scoring, :statistics, :first_half_score, :second_half_score, :players, :manager, :roster, :jersey_number, :position, :is_player, :is_manager, :rank, :win, :draw, :loss, :goals_for, :goals_against, :points, :change, :goals_diff, :jersey_number, :position, :is_player, :is_manager, :home, :away
5
-
6
-
7
- def initialize(data)
8
- @response = data
9
- @id = data["id"]
10
- @reference_id = data["reference_id"]
11
- @name = data["name"]
12
- @full_name = data["full_name"] || data["name"]
13
- @alias = data["alias"]
14
- @country_code = data["country_code"]
15
- @country = data["country"]
16
- @type = data["type"]
17
- @formation = data["formation"]
18
- @score = data["score"]
19
- @regular_score = data["regular_score"]
20
- @penalty_score = data["penalty_score"]
21
- @winner = data["winner"]
22
- @rank = data["rank"]
23
- @win = data["win"]
24
- @draw = data["draw"]
25
- @loss = data["loss"]
26
- @goals_for = data["goals_for"]
27
- @goals_against = data["goals_against"]
28
- @points = data["points"]
29
- @change = data["change"]
30
- @goals_diff = data["goals_diff"]
31
- @jersey_number = data["jersey_number"]
32
- @position = data["position"]
33
- @is_player = data["is_player"]
34
- @is_manager = data["is_manager"]
35
-
36
- # Standings generate these
37
- @home = OpenStruct.new data["home"] if data["home"]
38
- @away = OpenStruct.new data["away"] if data["away"]
39
-
40
- @scoring = OpenStruct.new data["scoring"] if data["scoring"]
41
- parse_scoring if scoring
42
-
43
- @statistics = OpenStruct.new data["statistics"] if data["statistics"]
44
- @players = parse_into_array(selector: data["players"]["player"], klass: Sportradar::Api::Soccer::Player) if response['players'] && response['players']['player']
45
- @players = parse_into_array(selector: data["roster"]["player"], klass: Sportradar::Api::Soccer::Player) if response['roster'] && response['roster']['player']
46
- @manager = Sportradar::Api::Soccer::Player.new data["manager"] if data["manager"]
47
- end
3
+ module Soccer
4
+ class Team < Data
5
+ attr_accessor :tournament_id
6
+ attr_reader :id, :league_group, :name, :country, :country_code, :abbreviation, :qualifier, :venue
7
+ alias :alias :abbreviation
8
+ attr_reader :team_statistics, :jerseys, :manager, :statistics
9
+
10
+ def initialize(data = {}, league_group: nil, **opts)
11
+ @response = data
12
+ @id = data['id']
13
+ @api = opts[:api]
14
+ @league_group = league_group || data['league_group'] || @api&.league_group
15
+
16
+ @players_hash = {}
17
+ @matches_hash = {}
18
+
19
+ update(data, **opts)
20
+ end
21
+
22
+ def update(data, **opts)
23
+ @id = data['id'] if data['id']
24
+ @league_group = opts[:league_group] || data['league_group'] || @league_group
25
+ get_tournament_id(data, **opts)
26
+
27
+ if data["team"]
28
+ update(data["team"])
29
+ end
30
+
31
+
32
+ @name = data['name'] if data['name']
33
+ @country = data['country'] if data['country']
34
+ @country_code = data['country_code'] if data['country_code']
35
+ @abbreviation = data['abbreviation'] if data['abbreviation']
36
+ @qualifier = data['qualifier'] if data['qualifier']
37
+ @venue = Venue.new(data['venue']) if data['venue']
38
+
39
+ create_data(@players_hash, data['players'], klass: Player, api: api, team: self) if data['players']
40
+ create_data(@players_hash, data['player_statistics'], klass: Player, api: api, team: self) if data['player_statistics']
41
+
42
+ # TODO team statistics
43
+ @team_statistics = data['team_statistics'] if data['team_statistics']
44
+
45
+ create_data(@matches_hash, Soccer.parse_results(data['results']), klass: Match, api: api, team: self) if data['results']
46
+ create_data(@matches_hash, data['schedule'], klass: Match, api: api, team: self) if data['schedule']
47
+
48
+ # TODO roster
49
+ @jerseys = data['jerseys'] if data['jerseys']
50
+ @manager = data['manager'] if data['manager']
51
+ @statistics = data['statistics'] if data['statistics']
52
+ end
53
+
54
+ def get_tournament_id(data, **opts)
55
+ @tournament_id ||= if opts[:tournament]
56
+ opts[:tournament].id
57
+ elsif opts[:season]
58
+ opts[:season].tournament_id
59
+ elsif opts[:match]
60
+ opts[:match].tournament_id
61
+ elsif data['tournament']
62
+ data.dig('tournament', 'id')
63
+ elsif data['season']
64
+ data.dig('season', 'tournament_id')
65
+ end
66
+ end
67
+
68
+ def players
69
+ @players_hash.values
70
+ end
71
+
72
+ def matches
73
+ @matches_hash.values
74
+ end
75
+
76
+ def api
77
+ @api || Sportradar::Api::Soccer::Api.new(league_group: @league_group)
78
+ end
48
79
 
49
- alias_method :roster, :players
80
+ def path_base
81
+ "teams/#{ id }"
82
+ end
83
+
84
+ def path_roster
85
+ "#{ path_base }/profile"
86
+ end
87
+ def get_roster
88
+ data = api.get_data(path_roster).to_h
89
+ ingest_roster(data)
90
+ end
91
+ def ingest_roster(data)
92
+ update(data)
93
+ data
94
+ end
95
+ def queue_roster
96
+ url, headers, options, timeout = api.get_request_info(path_roster)
97
+ {url: url, headers: headers, params: options, timeout: timeout, callback: method(:ingest_roster)}
98
+ end
99
+
100
+ def path_results
101
+ "#{ path_base }/results"
102
+ end
103
+ def get_results
104
+ data = api.get_data(path_results).to_h
105
+ ingest_results(data)
106
+ end
107
+ def ingest_results(data)
108
+ update(data)
109
+ data
110
+ end
111
+ def queue_results
112
+ url, headers, options, timeout = api.get_request_info(path_results)
113
+ {url: url, headers: headers, params: options, timeout: timeout, callback: method(:ingest_results)}
114
+ end
50
115
 
51
- private
116
+ def path_schedule
117
+ "#{ path_base }/schedule"
118
+ end
119
+ def get_schedule
120
+ data = api.get_data(path_schedule).to_h
121
+ ingest_schedule(data)
122
+ end
123
+ def ingest_schedule(data)
124
+ update(data)
125
+ data
126
+ end
127
+ def queue_schedule
128
+ url, headers, options, timeout = api.get_request_info(path_schedule)
129
+ {url: url, headers: headers, params: options, timeout: timeout, callback: method(:ingest_schedule)}
130
+ end
52
131
 
53
- def parse_scoring
54
- if scoring.half.is_a?(Array)
55
- @first_half_score = scoring.half.find {|x| x["number"] == "1"}["points"]
56
- @second_half_score = scoring.half.find {|x| x["number"] == "2"}["points"]
57
- elsif scoring.half.is_a?(Hash)
58
- @first_half_score = scoring.half["points"]
132
+ def path_statistics(tourn_id = self.tournament_id)
133
+ "tournaments/#{ tourn_id }/#{ path_base }/statistics"
134
+ end
135
+ def get_statistics(tourn_id = self.tournament_id)
136
+ data = api.get_data(path_statistics(tourn_id)).to_h
137
+ ingest_statistics(data)
138
+ end
139
+ def ingest_statistics(data)
140
+ update(data)
141
+ data
59
142
  end
143
+ def queue_statistics
144
+ url, headers, options, timeout = api.get_request_info(path_statistics)
145
+ {url: url, headers: headers, params: options, timeout: timeout, callback: method(:ingest_statistics)}
146
+ end
147
+
60
148
  end
61
149
  end
62
150
  end
63
151
  end
152
+
153
+ __END__
154
+
155
+ group = Sportradar::Api::Soccer::Group.new(league_group: 'eu')
156
+ res = group.get_tournaments;
157
+ tour = group.tournaments.sample;
158
+ tour = group.tournament("sr:tournament:17");
159
+ tour.get_results;
160
+ match = tour.matches.first;
161
+ res = match.get_summary;
162
+ team = match.team(:home)
163
+ res = match.get_lineups
164
+
165
+ team = Sportradar::Api::Soccer::Team.new({"id"=>"sr:competitor:42"}, league_group: 'eu')
@@ -0,0 +1,57 @@
1
+ module Sportradar
2
+ module Api
3
+ module Soccer
4
+ class TeamGroup < Data
5
+ attr_reader :league_group, :id, :name, :tournament_id
6
+
7
+ def initialize(data = {}, league_group: nil, **opts)
8
+ @response = data
9
+ @id = data["id"] || data['name']
10
+ @api = opts[:api]
11
+ @league_group = league_group || data['league_group'] || @api&.league_group
12
+
13
+ @teams_hash = {}
14
+
15
+ update(data, **opts)
16
+ end
17
+
18
+ def update(data, **opts)
19
+ @name = data['name']
20
+ get_tournament_id(data, **opts)
21
+
22
+ if team_data = (data['teams'] || data['team_standings'])
23
+ create_data(@teams_hash, team_data, klass: Team, api: api, tournament: opts[:tournament], team_group: self)
24
+ end
25
+ end
26
+
27
+ def get_tournament_id(data, **opts)
28
+ @tournament_id ||= if opts[:tournament]
29
+ opts[:tournament].id
30
+ elsif opts[:season]
31
+ opts[:season].tournament_id
32
+ elsif opts[:match]
33
+ opts[:match].tournament_id
34
+ elsif data['tournament']
35
+ data.dig('tournament', 'id')
36
+ elsif data['season']
37
+ data.dig('season', 'tournament_id')
38
+ end
39
+ end
40
+
41
+
42
+ def teams
43
+ @teams_hash.values
44
+ end
45
+
46
+ def team(id)
47
+ @teams_hash[id]
48
+ end
49
+
50
+ def api
51
+ @api ||= Sportradar::Api::Soccer::Api.new(league_group: @league_group)
52
+ end
53
+
54
+ end
55
+ end
56
+ end
57
+ end
@@ -1,20 +1,308 @@
1
1
  module Sportradar
2
2
  module Api
3
- class Soccer::Tournament < Data
4
- attr_accessor :response, :id, :name, :season_start, :season_end, :season, :type, :reference_id, :coverage, :teams
5
-
6
- def initialize(data)
7
- @response = data
8
- @id = data["id"]
9
- @name = data["name"]
10
- @season_start = data["season_start"]
11
- @season_end = data["season_end"]
12
- @season = data["season"]
13
- @reference_id = data["reference_id"]
14
- @coverage = OpenStruct.new data["coverage"] if data["coverage"]
15
- @teams = parse_into_array(selector: response["team"], klass: Sportradar::Api::Soccer::Team) if response["team"]
16
- end
3
+ module Soccer
4
+ class Tournament < Data
5
+ attr_reader :id, :league_group, :name, :category
6
+
7
+ def initialize(data = {}, league_group: nil, **opts)
8
+ @response = data
9
+ @id = data["id"]
10
+ @api = opts[:api]
11
+ @league_group = league_group || data['league_group'] || @api&.league_group
12
+
13
+ @matches_hash = {}
14
+ @seasons_hash = {}
15
+ @teams_hash = {}
16
+ @standings_hash = {}
17
+ @groups_hash = {}
18
+
19
+ update(data, **opts)
20
+ end
21
+
22
+ def update(data, **opts)
23
+ if data['tournament']
24
+ update(data['tournament'])
25
+ end
26
+
27
+ @name = data["name"]
28
+ @category = data['category'] || @category
29
+
30
+ parse_info(data)
31
+ parse_season(data)
32
+ parse_results(data)
33
+ parse_schedule(data)
34
+ parse_standings(data)
35
+ end
36
+
37
+ def seasons
38
+ @seasons_hash.values
39
+ end
40
+
41
+ def standings(type = nil)
42
+ if type
43
+ @standings_hash[type]
44
+ else
45
+ @standings_hash.values
46
+ end
47
+ end
48
+
49
+ def groups
50
+ @groups_hash.values
51
+ end
52
+
53
+ def group(name = nil) # nil represents the complete team listing
54
+ @groups_hash[name]
55
+ end
56
+
57
+ def matches
58
+ @matches_hash.values
59
+ end
60
+ alias :games :matches
61
+
62
+ # parsing helpers
63
+ def parse_info(data)
64
+ if data['groups']
65
+ create_data(@groups_hash, data['groups'], klass: TeamGroup, api: api, tournament: self, identifier: 'name')
66
+ end
67
+ end
68
+
69
+ def parse_season(data)
70
+ if data['season_coverage_info']
71
+ data['season_coverage_info']['id'] ||= data['season_coverage_info'].delete('season_id')
72
+ create_data(@seasons_hash, data['season_coverage_info'], klass: Season, api: api, tournament: self)
73
+ end
74
+ if data['current_season']
75
+ create_data(@seasons_hash, data['current_season'], klass: Season, api: api, tournament: self, current: true)
76
+ end
77
+ if data['seasons']
78
+ create_data(@seasons_hash, data['seasons'], klass: Season, api: api, tournament: self)
79
+ end
80
+ end
81
+
82
+ def parse_results(data)
83
+ if data['results']
84
+ merged_data = Soccer.parse_results(data['results'])
85
+ create_data(@matches_hash, merged_data, klass: Match, api: api, tournament: self)
86
+ end
87
+ end
88
+
89
+ def parse_schedule(data)
90
+ if data['sport_events']
91
+ create_data(@matches_hash, data['sport_events'], klass: Match, api: api, tournament: self)
92
+ end
93
+ end
94
+
95
+ def parse_standings(data)
96
+ if data['standings']
97
+ create_data(@standings_hash, data['standings'], klass: Standing, api: api, tournament: self, identifier: 'type')
98
+ end
99
+ end
100
+
101
+ def api
102
+ @api ||= Sportradar::Api::Soccer::Api.new(league_group: @league_group)
103
+ end
104
+
105
+ # url path helpers
106
+ def path_base
107
+ "tournaments/#{ id }"
108
+ end
17
109
 
110
+ def path_live_standings
111
+ "#{ path_base }/live_standings"
112
+ end
113
+ def get_live_standings
114
+ data = api.get_data(path_live_standings).to_h
115
+ ingest_live_standings(data)
116
+ end
117
+ alias :get_standings :get_live_standings
118
+ def ingest_live_standings(data)
119
+ update(data)
120
+ # TODO parse the rest of the data. keys: ["tournament", "season", "standings"]
121
+ data
122
+ end
123
+ def queue_live_standings
124
+ url, headers, options, timeout = api.get_request_info(path_live_standings)
125
+ {url: url, headers: headers, params: options, timeout: timeout, callback: method(:ingest_live_standings)}
126
+ end
127
+
128
+ def path_results
129
+ "#{ path_base }/results"
130
+ end
131
+ def get_results
132
+ data = api.get_data(path_results).to_h
133
+ ingest_results(data)
134
+ end
135
+ def ingest_results(data)
136
+ update(data)
137
+ # TODO parse the rest of the data. keys: ["tournament", "results"]
138
+ data
139
+ end
140
+ def queue_results
141
+ url, headers, options, timeout = api.get_request_info(path_results)
142
+ {url: url, headers: headers, params: options, timeout: timeout, callback: method(:ingest_results)}
143
+ end
144
+
145
+ def path_schedule
146
+ "#{ path_base }/schedule"
147
+ end
148
+ def get_schedule
149
+ data = api.get_data(path_schedule).to_h
150
+ ingest_schedule(data)
151
+ end
152
+ def ingest_schedule(data)
153
+ update(data)
154
+ # TODO parse the rest of the data. keys: ["tournament", "sport_events"]
155
+ data
156
+ end
157
+ def queue_schedule
158
+ url, headers, options, timeout = api.get_request_info(path_schedule)
159
+ {url: url, headers: headers, params: options, timeout: timeout, callback: method(:ingest_schedule)}
160
+ end
161
+
162
+ def path_seasons
163
+ "#{ path_base }/seasons"
164
+ end
165
+ def get_seasons
166
+ data = api.get_data(path_seasons).to_h
167
+ ingest_seasons(data)
168
+ end
169
+ def ingest_seasons(data)
170
+ update(data)
171
+ # TODO parse the rest of the data. keys: ["tournament", "seasons"]
172
+ data
173
+ end
174
+ def queue_seasons
175
+ url, headers, options, timeout = api.get_request_info(path_seasons)
176
+ {url: url, headers: headers, params: options, timeout: timeout, callback: method(:ingest_seasons)}
177
+ end
178
+
179
+ def path_info
180
+ "#{ path_base }/info"
181
+ end
182
+ def get_info
183
+ data = api.get_data(path_info).to_h
184
+ ingest_info(data)
185
+ end
186
+ def ingest_info(data)
187
+ update(data)
188
+ # TODO parse the rest of the data. keys: ["tournament", "season", "round", "season_coverage_info", "coverage_info", "groups"]
189
+ data
190
+ end
191
+ def queue_info
192
+ url, headers, options, timeout = api.get_request_info(path_info)
193
+ {url: url, headers: headers, params: options, timeout: timeout, callback: method(:ingest_info)}
194
+ end
195
+
196
+ def path_leaders
197
+ "#{ path_base }/leaders"
198
+ end
199
+ def get_leaders
200
+ data = api.get_data(path_leaders).to_h
201
+ ingest_leaders(data)
202
+ end
203
+ def ingest_leaders(data)
204
+ update(data)
205
+ # TODO parse the rest of the data. keys: ["tournament", "season_coverage_info", "top_points", "top_goals", "top_assists", "top_cards", "top_own_goals"]
206
+ data
207
+ end
208
+ def queue_leaders
209
+ url, headers, options, timeout = api.get_request_leaders(path_leaders)
210
+ {url: url, headers: headers, params: options, timeout: timeout, callback: method(:ingest_leaders)}
211
+ end
212
+
213
+ def self.tournament_ids
214
+ @tournament_ids ||= {
215
+ # Europe group
216
+ 'eu.uefa_champions_league' => "sr:tournament:7",
217
+ 'eu.la_liga' => "sr:tournament:8",
218
+ 'eu.eng_premier_league' => "sr:tournament:17",
219
+ 'eu.serie_a' => "sr:tournament:23",
220
+ 'eu.ligue_1' => "sr:tournament:34",
221
+ 'eu.bundesliga' => "sr:tournament:35",
222
+ 'eu.eredivisie' => "sr:tournament:37",
223
+ 'eu.first_division_a' => "sr:tournament:38",
224
+ 'eu.super_lig' => "sr:tournament:52",
225
+ 'eu.super_league' => "sr:tournament:185",
226
+ 'eu.rus_premier_league' => "sr:tournament:203",
227
+ 'eu.ukr_premier_league' => "sr:tournament:218",
228
+ 'eu.primeira_liga' => "sr:tournament:238",
229
+ 'eu.uefa_super_cup' => "sr:tournament:465",
230
+ 'eu.uefa_europa_league' => "sr:tournament:679",
231
+ 'eu.uefa_youth_league' => "sr:tournament:2324",
232
+ # international (partial listing)
233
+ "intl.world_cup" => "sr:tournament:16",
234
+ "intl.copa_america" => "sr:tournament:133",
235
+ "intl.gold_cup" => "sr:tournament:140",
236
+ "intl.africa_cup_of_nations" => "sr:tournament:270",
237
+ "intl.womens_world_cup" => "sr:tournament:290",
238
+ "intl.olympic_games" => "sr:tournament:436",
239
+ "intl.olympic_games_women" => "sr:tournament:437",
240
+ # other groups below
241
+ }
242
+ end
243
+
244
+ self.tournament_ids.each do |tour_name, tour_id|
245
+ group_code, name = tour_name.split('.')
246
+ define_singleton_method(name) { Sportradar::Api::Soccer::Tournament.new({'id' => tour_id}, league_group: group_code) }
247
+ end
248
+
249
+ end
18
250
  end
19
251
  end
20
252
  end
253
+
254
+ __END__
255
+
256
+ {"id"=>"sr:tournament:17",
257
+ "name"=>"Premier League",
258
+ "sport"=>{"id"=>"sr:sport:1", "name"=>"Soccer"},
259
+ "category"=>{"id"=>"sr:category:1", "name"=>"England", "country_code"=>"ENG"},
260
+ "current_season"=>{"id"=>"sr:season:40942", "name"=>"Premier League 17/18", "start_date"=>"2017-08-11", "end_date"=>"2018-05-14", "year"=>"17/18"},
261
+ "season_coverage_info"=>{"season_id"=>"sr:season:40942", "scheduled"=>381, "played"=>70, "max_coverage_level"=>"platinum", "max_covered"=>70, "min_coverage_level"=>"platinum"}}
262
+
263
+
264
+ group = Sportradar::Api::Soccer::Group.new(league_group: 'eu')
265
+ res = group.get_tournaments;
266
+ tour = group.tournaments.sample
267
+ tour.get_seasons
268
+ tour.get_results
269
+ res = tour.get_schedule
270
+ tour.matches.size
271
+ tour
272
+
273
+ group = Sportradar::Api::Soccer::Group.new(league_group: 'eu')
274
+ res = group.get_tournaments;
275
+ infos = group.tournaments.map{|tour| sleep 1; tour.get_info }
276
+ standings = group.tournaments.map{|tour| sleep 1; tour.get_standings }
277
+ results = group.tournaments.each{|tour| sleep 1; tour.get_results }.flat_map(&:matches)
278
+ standings = group.tournaments.map{|tour| sleep 1; (tour.get_standings rescue nil) }
279
+
280
+ {"UEFA Champions League"=>"sr:tournament:7",
281
+ "LaLiga"=>"sr:tournament:8",
282
+ "Premier League"=>"sr:tournament:218",
283
+ "Serie A"=>"sr:tournament:23",
284
+ "Ligue 1"=>"sr:tournament:34",
285
+ "Bundesliga"=>"sr:tournament:35",
286
+ "Eredivisie"=>"sr:tournament:37",
287
+ "First Division A"=>"sr:tournament:38",
288
+ "Super Lig"=>"sr:tournament:52",
289
+ "Super League"=>"sr:tournament:185",
290
+ "Primeira Liga"=>"sr:tournament:238",
291
+ "UEFA Super Cup"=>"sr:tournament:465",
292
+ "UEFA Europa League"=>"sr:tournament:679",
293
+ "UEFA Youth League"=>"sr:tournament:2324"}
294
+
295
+ sample_leagues = [:la_liga, :eng_premier_league, :bundesliga, :serie_a, :ligue_1]
296
+ tours = sample_leagues.map { |code| Sportradar::Api::Soccer::Tournament.send(code) }
297
+ tours.each{|t| sleep 1; t.get_info }
298
+ teams = tours.flat_map(&:groups).flat_map(&:teams)
299
+ teams.each { |t| sleep 1; t.get_roster }
300
+
301
+
302
+ sample_leagues = [:la_liga, :eng_premier_league, :bundesliga, :serie_a, :ligue_1];
303
+ tours = sample_leagues.map { |code| Sportradar::Api::Soccer::Tournament.send(code) };
304
+ tours.each{|t| sleep 1; t.get_info };
305
+ tours.flat_map(&:groups).flat_map(&:teams);
306
+ teams = tours.flat_map(&:groups).flat_map(&:teams);
307
+ teams.each { |t| sleep 1; t.get_roster };
308
+ teams.map {|t| ["#{t.tournament_id} #{t.name}",t.jerseys]}.to_h
@@ -1,19 +1,20 @@
1
1
  module Sportradar
2
2
  module Api
3
- class Soccer::Venue < Data
3
+ module Soccer
4
+ class Venue < Data
5
+ attr_reader :id, :name, :country_code, :country, :city, :capacity, :coordinates, :reference_id, :response
4
6
 
5
- attr_accessor :id, :name, :country_code, :country, :city, :capacity, :coordinates, :reference_id, :response
6
-
7
- def initialize(data)
8
- @response = data
9
- @id = data["id"]
10
- @name = data["name"]
11
- @country_code = data["country_code"]
12
- @country = data["country"]
13
- @city = data["city"]
14
- @capacity = data["capacity"]
15
- @coordinates = data["coordinates"]
16
- @reference_id = data["reference_id"]
7
+ def initialize(data)
8
+ @response = data
9
+ @id = data["id"]
10
+ @name = data["name"]
11
+ @country_code = data["country_code"]
12
+ @country = data["country"] || data["country_name"]
13
+ @city = data["city"] || data["city_name"]
14
+ @capacity = data["capacity"]
15
+ @coordinates = data["coordinates"] || data["map_coordinates"]
16
+ @reference_id = data["reference_id"]
17
+ end
17
18
  end
18
19
 
19
20
  end