opta_sd 1.0.0
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 +7 -0
- data/.gitignore +1 -0
- data/.rspec +3 -0
- data/Gemfile +22 -0
- data/Gemfile.lock +63 -0
- data/MIT-LICENSE +20 -0
- data/README.md +400 -0
- data/Rakefile +1 -0
- data/config/opta_sd.yml +2 -0
- data/config/parameters.yml +74 -0
- data/errors.yml +21 -0
- data/lib/opta_sd.rb +42 -0
- data/lib/opta_sd/core.rb +119 -0
- data/lib/opta_sd/error.rb +31 -0
- data/lib/opta_sd/soccer/commentary.rb +21 -0
- data/lib/opta_sd/soccer/match.rb +20 -0
- data/lib/opta_sd/soccer/match_event.rb +13 -0
- data/lib/opta_sd/soccer/match_facts.rb +14 -0
- data/lib/opta_sd/soccer/match_preview.rb +14 -0
- data/lib/opta_sd/soccer/match_statistics.rb +14 -0
- data/lib/opta_sd/soccer/pass_matrix.rb +14 -0
- data/lib/opta_sd/soccer/player_career.rb +15 -0
- data/lib/opta_sd/soccer/possession.rb +13 -0
- data/lib/opta_sd/soccer/rankings.rb +14 -0
- data/lib/opta_sd/soccer/seasonal_stats.rb +14 -0
- data/lib/opta_sd/soccer/soccer.rb +19 -0
- data/lib/opta_sd/soccer/squads.rb +14 -0
- data/lib/opta_sd/soccer/team_standings.rb +22 -0
- data/lib/opta_sd/soccer/tournament_calendar.rb +24 -0
- data/lib/opta_sd/soccer/tournament_schedule.rb +14 -0
- data/lib/opta_sd/version.rb +3 -0
- data/opta_sd.gemspec +27 -0
- data/spec/commentary_spec.rb +39 -0
- data/spec/match_event_spec.rb +26 -0
- data/spec/match_facts_spec.rb +14 -0
- data/spec/match_preview_spec.rb +15 -0
- data/spec/match_spec.rb +32 -0
- data/spec/match_statistics_spec.rb +43 -0
- data/spec/pass_matrix_spec.rb +27 -0
- data/spec/player_career_spec.rb +38 -0
- data/spec/possession_spec.rb +23 -0
- data/spec/rankings_spec.rb +14 -0
- data/spec/seasonal_stats_spec.rb +26 -0
- data/spec/spec_helper.rb +15 -0
- data/spec/squads.rb +40 -0
- data/spec/team_standings_spec.rb +61 -0
- data/spec/tournament_schedule_spec.rb +13 -0
- data/spec/tournament_spec.rb +48 -0
- metadata +169 -0
@@ -0,0 +1,19 @@
|
|
1
|
+
module OptaSD
|
2
|
+
module Soccer
|
3
|
+
class SoccerCore < OptaSD::Core
|
4
|
+
|
5
|
+
attr_accessor :params, :data
|
6
|
+
|
7
|
+
def initialize
|
8
|
+
super
|
9
|
+
@sport = 'soccerdata'
|
10
|
+
end
|
11
|
+
|
12
|
+
def resource(resource_id)
|
13
|
+
@resource = resource_id
|
14
|
+
self
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module OptaSD
|
2
|
+
module Soccer
|
3
|
+
class Squads < OptaSD::Soccer::SoccerCore
|
4
|
+
|
5
|
+
boolean_params 'squads', :people, :detailed
|
6
|
+
resource_params 'squads', :tournament, :contestant
|
7
|
+
|
8
|
+
def initialize
|
9
|
+
super
|
10
|
+
@feed_name = 'squads'
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module OptaSD
|
2
|
+
module Soccer
|
3
|
+
class TeamStandings < OptaSD::Soccer::SoccerCore
|
4
|
+
|
5
|
+
boolean_params 'standings', :live
|
6
|
+
resource_params 'standings', :stage, :tournament, :type
|
7
|
+
|
8
|
+
def initialize
|
9
|
+
super
|
10
|
+
@feed_name = 'standings'
|
11
|
+
end
|
12
|
+
|
13
|
+
%w(total home away form-total form-home form-away).each do |type_value|
|
14
|
+
define_method type_value.gsub('-','_') do
|
15
|
+
self.type(type_value)
|
16
|
+
self
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module OptaSD
|
2
|
+
module Soccer
|
3
|
+
class TournamentCalendar < OptaSD::Soccer::SoccerCore
|
4
|
+
|
5
|
+
resource_params 'tournamentcalendar', :competition
|
6
|
+
|
7
|
+
def initialize
|
8
|
+
super
|
9
|
+
@feed_name = 'tournamentcalendar'
|
10
|
+
end
|
11
|
+
|
12
|
+
def active
|
13
|
+
@resource = @resource ? @resource + '/active' : 'active'
|
14
|
+
self
|
15
|
+
end
|
16
|
+
|
17
|
+
def authorized
|
18
|
+
@resource = @resource ? @resource + '/authorized' : 'authorized'
|
19
|
+
self
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
data/opta_sd.gemspec
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
$:.push File.expand_path("../lib", __FILE__)
|
2
|
+
|
3
|
+
# Maintain your gem's version:
|
4
|
+
require "opta_sd/version"
|
5
|
+
|
6
|
+
# Describe your gem and declare its dependencies:
|
7
|
+
Gem::Specification.new do |s|
|
8
|
+
s.name = "opta_sd"
|
9
|
+
s.version = OptaSD::VERSION
|
10
|
+
s.authors = ["Ali Al-Sheiba"]
|
11
|
+
s.email = ["ali.alsheiba@gmail.com"]
|
12
|
+
s.homepage = "https://github.com/ali-sheiba/opta_sd"
|
13
|
+
s.summary = "Opta Sports Data Soccer API."
|
14
|
+
s.description = "OPTA SD is a library to Integrate and Utilize Opta Sports Data Apis."
|
15
|
+
s.license = "MIT"
|
16
|
+
|
17
|
+
s.files = Dir["{config,lib}/**/*", "MIT-LICENSE", "Rakefile", "README.md"]
|
18
|
+
s.files = `git ls-files -z`.split("\x0")
|
19
|
+
s.executables = s.files.grep(%r{^bin\/}) { |f| File.basename(f) }
|
20
|
+
s.test_files = s.files.grep(%r{^(test|spec|features)\/})
|
21
|
+
s.require_paths = ['lib']
|
22
|
+
|
23
|
+
s.add_development_dependency "bundler"
|
24
|
+
s.add_development_dependency "rspec", '~> 3.5'
|
25
|
+
s.add_dependency "nokogiri", '~> 1.7', '>= 1.7.0.1'
|
26
|
+
s.add_dependency "json"
|
27
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe OptaSD::Soccer::Commentary do
|
4
|
+
|
5
|
+
before do
|
6
|
+
@valid_match_id = "bsu6pjne1eqz2hs8r3685vbhl"
|
7
|
+
end
|
8
|
+
|
9
|
+
it "gets all commentary" do
|
10
|
+
match = OptaSD::Soccer::Commentary.new.resource(@valid_match_id).get
|
11
|
+
|
12
|
+
expect(match.data).to include("message")
|
13
|
+
end
|
14
|
+
|
15
|
+
it "build commentary with type manual" do
|
16
|
+
match = OptaSD::Soccer::Commentary.new.resource(@valid_match_id).manual.get
|
17
|
+
|
18
|
+
url = match.send(:build_uri).to_s
|
19
|
+
expect(url).to include('type=manual')
|
20
|
+
expect(match.data).to include("message")
|
21
|
+
end
|
22
|
+
|
23
|
+
it "build commentary with type fallback" do
|
24
|
+
match = OptaSD::Soccer::Commentary.new.resource(@valid_match_id).fallback.get
|
25
|
+
|
26
|
+
url = match.send(:build_uri).to_s
|
27
|
+
expect(url).to include('type=fallback')
|
28
|
+
expect(match.data).to include("message")
|
29
|
+
end
|
30
|
+
|
31
|
+
it "build commentary with type auto" do
|
32
|
+
match = OptaSD::Soccer::Commentary.new.resource(@valid_match_id).auto.get
|
33
|
+
|
34
|
+
url = match.send(:build_uri).to_s
|
35
|
+
expect(url).to include('type=auto')
|
36
|
+
expect(match.data).to include("message")
|
37
|
+
end
|
38
|
+
|
39
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe OptaSD::Soccer::MatchEvent do
|
4
|
+
|
5
|
+
before do
|
6
|
+
@valid_match_id = "bsu6pjne1eqz2hs8r3685vbhl"
|
7
|
+
end
|
8
|
+
|
9
|
+
it "get match_event by resource" do
|
10
|
+
match = OptaSD::Soccer::MatchEvent.new.resource(@valid_match_id).get
|
11
|
+
expect(match.data).to include("matchInfo")
|
12
|
+
expect(match.data).to include("liveData")
|
13
|
+
expect(match.data["matchInfo"]).to include("id" => @valid_match_id)
|
14
|
+
end
|
15
|
+
|
16
|
+
it "get match_event by fixture" do
|
17
|
+
match = OptaSD::Soccer::MatchEvent.new.fixture(@valid_match_id).get
|
18
|
+
expect(match.data).to include("matchInfo")
|
19
|
+
expect(match.data).to include("liveData")
|
20
|
+
expect(match.data['liveData']).to include("matchDetails")
|
21
|
+
expect(match.data['liveData']).to include("event")
|
22
|
+
expect(match.data['liveData']['event'][0]).to include("qualifier")
|
23
|
+
expect(match.data["matchInfo"]).to include("id" => @valid_match_id)
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe OptaSD::Soccer::MatchFacts do
|
4
|
+
|
5
|
+
before do
|
6
|
+
@valid_match_id = "bsu6pjne1eqz2hs8r3685vbhl"
|
7
|
+
end
|
8
|
+
|
9
|
+
it "get match_facts by resource" do
|
10
|
+
match = OptaSD::Soccer::MatchFacts.new.resource(@valid_match_id).get
|
11
|
+
expect(match.data).to include("message")
|
12
|
+
expect(match.data["matchInfo"]).to include("id" => @valid_match_id)
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe OptaSD::Soccer::MatchPreview do
|
4
|
+
|
5
|
+
before do
|
6
|
+
@valid_match_id = "cndzn1rr227qe4m9ozd6okba6"
|
7
|
+
end
|
8
|
+
|
9
|
+
it "get match_facts by resource" do
|
10
|
+
# match = OptaSD::Soccer::MatchPreview.new.resource(@valid_match_id)#.get
|
11
|
+
# sdapidocumentation Account not Authorised for this request
|
12
|
+
# expect(match.data).to include("message")
|
13
|
+
# expect(match.data["matchInfo"]).to include("id" => @valid_match_id)
|
14
|
+
end
|
15
|
+
end
|
data/spec/match_spec.rb
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe OptaSD::Soccer::Match do
|
4
|
+
|
5
|
+
before do
|
6
|
+
@valid_match_id = "bsu6pjne1eqz2hs8r3685vbhl"
|
7
|
+
@invalid_match_id = "invalid_match_id"
|
8
|
+
end
|
9
|
+
|
10
|
+
it "get match by response_id" do
|
11
|
+
match = OptaSD::Soccer::Match.new.resource(@valid_match_id).get
|
12
|
+
|
13
|
+
expect(match.data).to include("matchInfo")
|
14
|
+
expect(match.data).to_not include("liveData")
|
15
|
+
expect(match.data["matchInfo"]).to include("id" => @valid_match_id)
|
16
|
+
end
|
17
|
+
|
18
|
+
it "get a match details by resource id" do
|
19
|
+
match = OptaSD::Soccer::Match.new.resource(@valid_match_id).live.get
|
20
|
+
|
21
|
+
expect(match.data).to include("matchInfo")
|
22
|
+
expect(match.data).to include("liveData")
|
23
|
+
end
|
24
|
+
|
25
|
+
it "raise exceptions" do
|
26
|
+
expect{
|
27
|
+
match = OptaSD::Soccer::Match.new.resource(@invalid_match_id).get
|
28
|
+
}.to raise_error(OptaSD::Error, "User not Authorised") # this message should change once we get valid account
|
29
|
+
end
|
30
|
+
|
31
|
+
|
32
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe OptaSD::Soccer::MatchStatistics do
|
4
|
+
|
5
|
+
before do
|
6
|
+
@valid_match_id = "bsu6pjne1eqz2hs8r3685vbhl"
|
7
|
+
end
|
8
|
+
|
9
|
+
it "get statistics by resource" do
|
10
|
+
match = OptaSD::Soccer::MatchStatistics.new.resource(@valid_match_id).get
|
11
|
+
expect(match.data).to include("matchInfo")
|
12
|
+
expect(match.data).to include("liveData")
|
13
|
+
expect(match.data["matchInfo"]).to include("id" => @valid_match_id)
|
14
|
+
end
|
15
|
+
|
16
|
+
it "get statistics by fixture" do
|
17
|
+
match = OptaSD::Soccer::MatchStatistics.new.fixture(@valid_match_id).get
|
18
|
+
|
19
|
+
expect(match.data).to include("liveData")
|
20
|
+
expect(match.data['liveData']).to include("matchDetails")
|
21
|
+
expect(match.data['liveData']).to include("goal")
|
22
|
+
expect(match.data['liveData']).to include("missedPen")
|
23
|
+
expect(match.data['liveData']).to include("missedPen")
|
24
|
+
expect(match.data['liveData']).to include("card")
|
25
|
+
expect(match.data['liveData']).to include("substitute")
|
26
|
+
expect(match.data['liveData']).to include("lineUp")
|
27
|
+
expect(match.data['liveData']).to include("matchDetailsExtra")
|
28
|
+
|
29
|
+
expect(match.data).to include("matchInfo")
|
30
|
+
expect(match.data["matchInfo"]).to include("id" => @valid_match_id)
|
31
|
+
end
|
32
|
+
|
33
|
+
it "gets detailed statistics" do
|
34
|
+
detailed = OptaSD::Soccer::MatchStatistics.new.fixture(@valid_match_id).detailed.get
|
35
|
+
not_detailed = OptaSD::Soccer::MatchStatistics.new.fixture(@valid_match_id).get
|
36
|
+
|
37
|
+
detailed_player = detailed.data['liveData']['lineUp'][0]['player'][0]
|
38
|
+
not_detailed_player = not_detailed.data['liveData']['lineUp'][0]['player'][0]
|
39
|
+
|
40
|
+
expect(detailed_player['stat'].size).to be > not_detailed_player['stat'].size
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe OptaSD::Soccer::PassMatrix do
|
4
|
+
|
5
|
+
before do
|
6
|
+
@valid_match_id = "bsu6pjne1eqz2hs8r3685vbhl"
|
7
|
+
end
|
8
|
+
|
9
|
+
it "get pass_matrix by resource" do
|
10
|
+
match = OptaSD::Soccer::PassMatrix.new.resource(@valid_match_id).get
|
11
|
+
expect(match.data).to include("matchInfo")
|
12
|
+
expect(match.data).to include("liveData")
|
13
|
+
expect(match.data["matchInfo"]).to include("id" => @valid_match_id)
|
14
|
+
end
|
15
|
+
|
16
|
+
it "get pass_matrix by fixture" do
|
17
|
+
match = OptaSD::Soccer::PassMatrix.new.fixture(@valid_match_id).get
|
18
|
+
|
19
|
+
expect(match.data).to include("liveData")
|
20
|
+
player = match.data['liveData']['lineUp'][0]['player'][0]
|
21
|
+
expect(player).to include("playerPass")
|
22
|
+
|
23
|
+
expect(match.data).to include("matchInfo")
|
24
|
+
expect(match.data["matchInfo"]).to include("id" => @valid_match_id)
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe OptaSD::Soccer::PlayerCareer do
|
4
|
+
|
5
|
+
before do
|
6
|
+
@player_uuid = "1c4gmhsc0mfjl2or3oxggg6hh"
|
7
|
+
@contestant_id = "apoawtpvac4zqlancmvw4nk4o"
|
8
|
+
end
|
9
|
+
|
10
|
+
it "get player career by resource" do
|
11
|
+
match = OptaSD::Soccer::PlayerCareer.new.resource(@player_uuid).get
|
12
|
+
expect(match.data).to include("person")
|
13
|
+
expect(match.data['person'][0]['id']).to eq(@player_uuid)
|
14
|
+
end
|
15
|
+
|
16
|
+
it "get player career by person params" do
|
17
|
+
match = OptaSD::Soccer::PlayerCareer.new.person(@player_uuid).get
|
18
|
+
expect(match.data).to include("person")
|
19
|
+
expect(match.data['person'][0]['id']).to eq(@player_uuid)
|
20
|
+
end
|
21
|
+
|
22
|
+
it "gets players career of contestant" do
|
23
|
+
match = OptaSD::Soccer::PlayerCareer.new.contestant(@contestant_id).get
|
24
|
+
expect(match.data).to include("person")
|
25
|
+
expect(match.data['person'].count).to be > 1
|
26
|
+
end
|
27
|
+
|
28
|
+
it "gets players career of contestant" do
|
29
|
+
active = OptaSD::Soccer::PlayerCareer.new.contestant(@contestant_id).active(true).get
|
30
|
+
active_url = active.send(:build_uri).to_s
|
31
|
+
expect(active_url).to include("active=yes")
|
32
|
+
|
33
|
+
inactive = OptaSD::Soccer::PlayerCareer.new.contestant(@contestant_id).active(false).get
|
34
|
+
inactive_url = inactive.send(:build_uri).to_s
|
35
|
+
expect(inactive_url).to include("active=no")
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe OptaSD::Soccer::Possession do
|
4
|
+
|
5
|
+
before do
|
6
|
+
@valid_match_id = "bsu6pjne1eqz2hs8r3685vbhl"
|
7
|
+
end
|
8
|
+
|
9
|
+
it "get possession by resource" do
|
10
|
+
match = OptaSD::Soccer::Possession.new.resource(@valid_match_id).get
|
11
|
+
expect(match.data).to include("matchInfo")
|
12
|
+
expect(match.data).to include("liveData")
|
13
|
+
expect(match.data["matchInfo"]).to include("id" => @valid_match_id)
|
14
|
+
end
|
15
|
+
|
16
|
+
it "get possession by fixture" do
|
17
|
+
match = OptaSD::Soccer::Possession.new.fixture(@valid_match_id).get
|
18
|
+
expect(match.data).to include("matchInfo")
|
19
|
+
expect(match.data).to include("liveData")
|
20
|
+
expect(match.data["matchInfo"]).to include("id" => @valid_match_id)
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe OptaSD::Soccer::Rankings do
|
4
|
+
|
5
|
+
before do
|
6
|
+
@tournament_id = "bnni2f2e6ii20b1wmzcsbpj2o"
|
7
|
+
end
|
8
|
+
|
9
|
+
it "get match_facts by resource" do
|
10
|
+
ranking = OptaSD::Soccer::Rankings.new.resource(@tournament_id)#.get
|
11
|
+
# sdapidocumentation Account not Authorised for this request
|
12
|
+
# expect(match.data["matchInfo"]).to include("id" => @valid_match_id)
|
13
|
+
end
|
14
|
+
end
|