mlb_stats_api 0.2.1 → 0.2.2
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/.rubocop.yml +3 -17
- data/.travis.yml +3 -2
- data/README.md +4 -4
- data/bin/console +1 -0
- data/lib/mlb_stats_api.rb +1 -1
- data/lib/mlb_stats_api/client.rb +10 -3
- data/lib/mlb_stats_api/color_feed.rb +71 -0
- data/lib/mlb_stats_api/conferences.rb +13 -0
- data/lib/mlb_stats_api/config.rb +33 -13
- data/lib/mlb_stats_api/divisions.rb +7 -0
- data/lib/mlb_stats_api/drafts.rb +20 -0
- data/lib/mlb_stats_api/games.rb +33 -8
- data/lib/mlb_stats_api/home_run_derby.rb +18 -0
- data/lib/mlb_stats_api/leagues.rb +36 -0
- data/lib/mlb_stats_api/people.rb +21 -3
- data/lib/mlb_stats_api/schedules.rb +1 -1
- data/lib/mlb_stats_api/seasons.rb +12 -11
- data/lib/mlb_stats_api/sports.rb +17 -3
- data/lib/mlb_stats_api/standings.rb +12 -25
- data/lib/mlb_stats_api/stats.rb +20 -0
- data/lib/mlb_stats_api/teams.rb +4 -5
- data/lib/mlb_stats_api/venues.rb +5 -1
- data/lib/mlb_stats_api/version.rb +1 -1
- metadata +4 -5
- data/lib/mlb_stats_api/venue.rb +0 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c4a7b94d68493363d447c18a5e8d56994508b1a1b6e77a7136e83e07193b6e2b
|
4
|
+
data.tar.gz: 8baf4f5bae5b634f50bbe3bb0c08ec93fd7ad87bd003b645185dc8e36b1da090
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c183c8ba29eac57b6c8487dce7300f547db057c0e33873a831d6d8c365d3493e26f8c8236a9f80efef401be73b88504695ebe9b9a51b566caeb3aad613efca80
|
7
|
+
data.tar.gz: 4ec7c69b0d19650a42629bd4d914a4c24d5574fa325f4285fa953def77d7e320a09464a2a9e4dbbb44836841b135070e15f19ba2f963b7a0bfe39795d7ae1aed
|
data/.rubocop.yml
CHANGED
@@ -1,23 +1,9 @@
|
|
1
1
|
AllCops:
|
2
|
-
Include:
|
3
|
-
- Rakefile
|
4
|
-
- Gemfile
|
5
2
|
TargetRubyVersion: 2.5
|
6
3
|
|
7
4
|
Layout/MultilineMethodCallIndentation:
|
8
5
|
EnforcedStyle: indented
|
9
6
|
|
10
|
-
Metrics/
|
11
|
-
|
12
|
-
|
13
|
-
Metrics/ClassLength:
|
14
|
-
Max: 100
|
15
|
-
|
16
|
-
Metrics/CyclomaticComplexity:
|
17
|
-
Enabled: false
|
18
|
-
|
19
|
-
Metrics/MethodLength:
|
20
|
-
Max: 15
|
21
|
-
|
22
|
-
Style/Documentation:
|
23
|
-
Enabled: false
|
7
|
+
Metrics/BlockLength:
|
8
|
+
Exclude:
|
9
|
+
- 'spec/**/*'
|
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -1,8 +1,8 @@
|
|
1
|
-
|
1
|
+
[](https://travis-ci.com/Fustrate/mlb_stats_api)
|
2
2
|
|
3
|
-
|
3
|
+
# MLBStatsAPI
|
4
4
|
|
5
|
-
|
5
|
+
A ruby gem to interact with the [MLB Stats API](http://statsapi.mlb.com/docs/).
|
6
6
|
|
7
7
|
## Installation
|
8
8
|
|
@@ -32,7 +32,7 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
|
|
32
32
|
|
33
33
|
## Contributing
|
34
34
|
|
35
|
-
Bug reports and pull requests are welcome on GitHub at https://github.com/
|
35
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/fustrate/mlb_stats_api.
|
36
36
|
|
37
37
|
## License
|
38
38
|
|
data/bin/console
CHANGED
data/lib/mlb_stats_api.rb
CHANGED
@@ -8,9 +8,9 @@ require 'mlb_stats_api/errors'
|
|
8
8
|
require 'mlb_stats_api/version'
|
9
9
|
|
10
10
|
require 'mlb_stats_api/base'
|
11
|
+
require 'mlb_stats_api/color_feed'
|
11
12
|
require 'mlb_stats_api/live_feed'
|
12
13
|
require 'mlb_stats_api/team'
|
13
|
-
require 'mlb_stats_api/venue'
|
14
14
|
|
15
15
|
require 'mlb_stats_api/conferences'
|
16
16
|
require 'mlb_stats_api/config'
|
data/lib/mlb_stats_api/client.rb
CHANGED
@@ -47,17 +47,24 @@ module MLBStatsAPI
|
|
47
47
|
def get(endpoint, query = {})
|
48
48
|
url = "/api/v#{query.delete(:version) || DEFAULT_VERSION}#{endpoint}"
|
49
49
|
|
50
|
-
|
50
|
+
args = normalize_query_args(query)
|
51
51
|
|
52
|
-
@logger.info
|
52
|
+
@logger.info "Fetching URL: #{url} Query: #{args.inspect}"
|
53
53
|
|
54
|
-
response = self.class.get url, query:
|
54
|
+
response = self.class.get url, query: args.merge(t: Time.now.to_i)
|
55
55
|
|
56
56
|
raise_exception(response) unless response.code == 200
|
57
57
|
|
58
58
|
response.parsed_response
|
59
59
|
end
|
60
60
|
|
61
|
+
def normalize_query_args(query)
|
62
|
+
query
|
63
|
+
.reject { |_, v| v.nil? }
|
64
|
+
.map { |key, val| [key, val.is_a?(Array) ? val.join(',') : val] }
|
65
|
+
.to_h
|
66
|
+
end
|
67
|
+
|
61
68
|
def load(key, options = {})
|
62
69
|
value = @cache.load(key)
|
63
70
|
|
@@ -0,0 +1,71 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module MLBStatsAPI
|
4
|
+
class ColorFeed < Base
|
5
|
+
attr_reader :id
|
6
|
+
|
7
|
+
def initialize(api, data)
|
8
|
+
@api = api
|
9
|
+
@data = data
|
10
|
+
|
11
|
+
# If we need to nuke and start over, keep this piece
|
12
|
+
@id = data['game_pk']
|
13
|
+
end
|
14
|
+
|
15
|
+
def items
|
16
|
+
@data['items']
|
17
|
+
end
|
18
|
+
|
19
|
+
def reload!
|
20
|
+
@data = @api.get("/game/#{@id}/feed/color")
|
21
|
+
|
22
|
+
true
|
23
|
+
rescue Net::OpenTimeout
|
24
|
+
false
|
25
|
+
end
|
26
|
+
|
27
|
+
# The color feed doesn't use diffs, even though there's an endpoint for it.
|
28
|
+
alias update! reload!
|
29
|
+
|
30
|
+
# def timestamps
|
31
|
+
# @api.color_feed_timestamps(@id)
|
32
|
+
# end
|
33
|
+
|
34
|
+
# def update!
|
35
|
+
# return reload! unless @data
|
36
|
+
|
37
|
+
# diffs = @api.color_feed_diff(
|
38
|
+
# @data['game_pk'],
|
39
|
+
# timecode: @data['timecode']
|
40
|
+
# )
|
41
|
+
|
42
|
+
# return process_diffs(diffs) if diffs.is_a?(Array)
|
43
|
+
|
44
|
+
# # If the diff is too large or too old, a new feed is returned
|
45
|
+
# @data = diffs if diffs.is_a?(Hash)
|
46
|
+
|
47
|
+
# true
|
48
|
+
# rescue Net::OpenTimeout
|
49
|
+
# false
|
50
|
+
# end
|
51
|
+
|
52
|
+
# def process_diffs(diffs)
|
53
|
+
# diffs.each do |diff_set|
|
54
|
+
# Hana::Patch.new(diff_set['diff']).apply(@data)
|
55
|
+
# end
|
56
|
+
|
57
|
+
# @api.logger&.info 'Successfully processed color feed diff'
|
58
|
+
|
59
|
+
# true
|
60
|
+
# rescue Hana::Patch::Exception
|
61
|
+
# @api.logger&.info 'Failed to process color feed diff; nuking'
|
62
|
+
|
63
|
+
# # Nuke it!
|
64
|
+
# @data = nil
|
65
|
+
|
66
|
+
# reload!
|
67
|
+
|
68
|
+
# false
|
69
|
+
# end
|
70
|
+
end
|
71
|
+
end
|
@@ -1,6 +1,19 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module MLBStatsAPI
|
4
|
+
# Only the Pacific Coast League uses conferences
|
5
|
+
# @see https://statsapi.mlb.com/docs/#tag/conference
|
4
6
|
module Conferences
|
7
|
+
# View all PCL conferences.
|
8
|
+
# @see https://statsapi.mlb.com/docs/#operation/conferences
|
9
|
+
def conferences(options = {})
|
10
|
+
get '/conferences', options
|
11
|
+
end
|
12
|
+
|
13
|
+
# View PCL conferences by conferenceId.
|
14
|
+
# @see https://statsapi.mlb.com/docs/#operation/conferences
|
15
|
+
def conference(conference_id, options = {})
|
16
|
+
get "/conferences/#{conference_id}", options
|
17
|
+
end
|
5
18
|
end
|
6
19
|
end
|
data/lib/mlb_stats_api/config.rb
CHANGED
@@ -1,57 +1,77 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module MLBStatsAPI
|
4
|
+
# These methods all return lists of possible values
|
5
|
+
# @see https://statsapi.mlb.com/docs/#tag/config
|
4
6
|
module Config
|
7
|
+
# @see https://statsapi.mlb.com/docs/#operation/gameStatus
|
5
8
|
def game_status
|
6
|
-
get
|
9
|
+
get '/gameStatus'
|
7
10
|
end
|
8
11
|
|
12
|
+
# @see https://statsapi.mlb.com/docs/#operation/baseballStats
|
13
|
+
def baseball_stats
|
14
|
+
get '/baseballStats'
|
15
|
+
end
|
16
|
+
|
17
|
+
# @see https://statsapi.mlb.com/docs/#operation/gameTypes
|
9
18
|
def game_types
|
10
|
-
get
|
19
|
+
get '/gameTypes'
|
11
20
|
end
|
12
21
|
|
22
|
+
# @see https://statsapi.mlb.com/docs/#operation/languages
|
13
23
|
def languages
|
14
|
-
get
|
24
|
+
get '/languages'
|
15
25
|
end
|
16
26
|
|
27
|
+
# @see https://statsapi.mlb.com/docs/#operation/leagueLeaderTypes
|
17
28
|
def league_leader_types
|
18
|
-
get
|
29
|
+
get '/leagueLeaderTypes'
|
19
30
|
end
|
20
31
|
|
32
|
+
# @see https://statsapi.mlb.com/docs/#operation/metrics
|
21
33
|
def metrics
|
22
|
-
get
|
34
|
+
get '/metrics'
|
23
35
|
end
|
24
36
|
|
37
|
+
# @see https://statsapi.mlb.com/docs/#operation/platforms
|
25
38
|
def platforms
|
26
|
-
get
|
39
|
+
get '/platforms'
|
27
40
|
end
|
28
41
|
|
42
|
+
# @see https://statsapi.mlb.com/docs/#operation/positions
|
29
43
|
def positions
|
30
|
-
get
|
44
|
+
get '/positions'
|
31
45
|
end
|
32
46
|
|
47
|
+
# @see https://statsapi.mlb.com/docs/#operation/rosterTypes
|
33
48
|
def roster_types
|
34
|
-
get
|
49
|
+
get '/rosterTypes'
|
35
50
|
end
|
36
51
|
|
52
|
+
# @see https://statsapi.mlb.com/docs/#operation/scheduleEventTypes
|
37
53
|
def schedule_event_types
|
38
|
-
get
|
54
|
+
get '/scheduleEventTypes'
|
39
55
|
end
|
40
56
|
|
57
|
+
# @see https://statsapi.mlb.com/docs/#operation/sitCodes
|
41
58
|
def situation_codes
|
42
|
-
get
|
59
|
+
get '/situationCodes'
|
43
60
|
end
|
44
61
|
|
62
|
+
# @see https://statsapi.mlb.com/docs/#operation/standingsTypes
|
45
63
|
def standings_types
|
46
|
-
get
|
64
|
+
get '/standingsTypes'
|
47
65
|
end
|
48
66
|
|
67
|
+
# @see https://statsapi.mlb.com/docs/#operation/statGroups
|
49
68
|
def stat_groups
|
50
|
-
get
|
69
|
+
get '/statGroups'
|
51
70
|
end
|
52
71
|
|
72
|
+
# @see https://statsapi.mlb.com/docs/#operation/statTypes
|
53
73
|
def stat_types
|
54
|
-
get
|
74
|
+
get '/statTypes'
|
55
75
|
end
|
56
76
|
end
|
57
77
|
end
|
@@ -1,6 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module MLBStatsAPI
|
4
|
+
# @see https://statsapi.mlb.com/docs/#tag/division
|
4
5
|
module Divisions
|
5
6
|
# There are actually far more divisions from other leagues in the API.
|
6
7
|
# I don't think I'll add them until necessary.
|
@@ -12,5 +13,11 @@ module MLBStatsAPI
|
|
12
13
|
nl_central: 205,
|
13
14
|
nl_west: 203
|
14
15
|
}.freeze
|
16
|
+
|
17
|
+
# View league division directorial information.
|
18
|
+
# @see https://statsapi.mlb.com/docs/#operation/divisions
|
19
|
+
def divisions(options = {})
|
20
|
+
get '/divisions', options
|
21
|
+
end
|
15
22
|
end
|
16
23
|
end
|
data/lib/mlb_stats_api/drafts.rb
CHANGED
@@ -1,6 +1,26 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module MLBStatsAPI
|
4
|
+
# Operations pertaining to MLB Rule 4 Draft (First-Year Player Draft)
|
5
|
+
# @see https://statsapi.mlb.com/docs/#tag/draft
|
4
6
|
module Drafts
|
7
|
+
# View drafted players by year.
|
8
|
+
# @see https://statsapi.mlb.com/docs/#operation/draft
|
9
|
+
def draft(year, options = {})
|
10
|
+
get "/draft/#{year}", options
|
11
|
+
end
|
12
|
+
|
13
|
+
# View draft eligible prospects by year.
|
14
|
+
# @see https://statsapi.mlb.com/docs/#operation/draftProspects
|
15
|
+
def draft_prospects(year, options = {})
|
16
|
+
get "/draft/#{year}/prospects", options
|
17
|
+
end
|
18
|
+
|
19
|
+
# View latest player drafted, endpoint best used when draft is currently
|
20
|
+
# open.
|
21
|
+
# @see https://statsapi.mlb.com/docs/#operation/latestDraftPicks
|
22
|
+
def draft_latest(year, options = {})
|
23
|
+
get "/draft/#{year}/latest", options
|
24
|
+
end
|
5
25
|
end
|
6
26
|
end
|
data/lib/mlb_stats_api/games.rb
CHANGED
@@ -3,15 +3,15 @@
|
|
3
3
|
module MLBStatsAPI
|
4
4
|
module Games
|
5
5
|
def boxscore(game_id)
|
6
|
-
get
|
6
|
+
get "/game/#{game_id}/boxscore"
|
7
7
|
end
|
8
8
|
|
9
9
|
def content(game_id, limit: nil)
|
10
|
-
get
|
10
|
+
get "/game/#{game_id}/content", highlightLimit: limit
|
11
11
|
end
|
12
12
|
|
13
13
|
def context_metrics(game_id, timecode: nil)
|
14
|
-
get
|
14
|
+
get "/game/#{game_id}/contextMetrics", timecode: timecode
|
15
15
|
end
|
16
16
|
|
17
17
|
# This endpoint can return very large payloads. It is STRONGLY recommended
|
@@ -34,23 +34,48 @@ module MLBStatsAPI
|
|
34
34
|
raise ArgumentError, 'Please pass either a timecode or a snapshot.'
|
35
35
|
end
|
36
36
|
|
37
|
-
get
|
37
|
+
get "/game/#{game_id}/feed/live/diffPatch", query
|
38
38
|
end
|
39
39
|
|
40
40
|
def live_feed_timestamps(game_id)
|
41
|
-
get
|
41
|
+
get "/game/#{game_id}/feed/live/timestamps", version: '1.1'
|
42
42
|
end
|
43
43
|
|
44
|
+
def color_feed(game_id, timecode: nil)
|
45
|
+
MLBStatsAPI::ColorFeed.new(
|
46
|
+
self,
|
47
|
+
get("/game/#{game_id}/feed/color", timecode: timecode)
|
48
|
+
)
|
49
|
+
end
|
50
|
+
|
51
|
+
# def color_feed_diff(game_id, timecode: nil, snapshot_at: nil)
|
52
|
+
# query = {}
|
53
|
+
|
54
|
+
# if timecode
|
55
|
+
# query[:startTimecode] = timecode
|
56
|
+
# elsif snapshot_at
|
57
|
+
# query[:endTimecode] = snapshot_at
|
58
|
+
# else
|
59
|
+
# raise ArgumentError, 'Please pass either a timecode or a snapshot.'
|
60
|
+
# end
|
61
|
+
|
62
|
+
# get "/game/#{game_id}/feed/color/diffPatch", query
|
63
|
+
# end
|
64
|
+
|
65
|
+
# def color_feed_timestamps(game_id)
|
66
|
+
# get "/game/#{game_id}/feed/color/timestamps"
|
67
|
+
# end
|
68
|
+
|
44
69
|
def linescore(game_id)
|
45
|
-
get
|
70
|
+
get "/game/#{game_id}/linescore"
|
46
71
|
end
|
47
72
|
|
48
73
|
def play_by_play(game_id, timecode: nil)
|
49
|
-
get
|
74
|
+
get "/game/#{game_id}/playByPlay", timecode: timecode
|
50
75
|
end
|
51
76
|
|
52
77
|
def win_probability(game_id, timecode: nil)
|
53
|
-
get
|
78
|
+
get "/game/#{game_id}/winProbability", timecode: timecode
|
54
79
|
end
|
55
80
|
end
|
56
81
|
end
|
@@ -1,6 +1,24 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module MLBStatsAPI
|
4
|
+
# @see https://statsapi.mlb.com/docs/#tag/homerunderby
|
4
5
|
module HomeRunDerby
|
6
|
+
# View a home run derby object based on gamePk.
|
7
|
+
# @see https://statsapi.mlb.com/docs/#operation/homeRunDerbyBracket
|
8
|
+
def home_run_derby(game_pk, options = {})
|
9
|
+
get "/homeRunDerby/#{game_pk}", options
|
10
|
+
end
|
11
|
+
|
12
|
+
# View a home run derby object based on bracket.
|
13
|
+
# @see https://statsapi.mlb.com/docs/#operation/homeRunDerbyBracket
|
14
|
+
def home_run_derby_bracket(game_pk, options = {})
|
15
|
+
get "/homeRunDerby/#{game_pk}/bracket", options
|
16
|
+
end
|
17
|
+
|
18
|
+
# View a home run derby object based on pool.
|
19
|
+
# @see https://statsapi.mlb.com/docs/#operation/homeRunDerbyPool
|
20
|
+
def home_run_derby_pool(game_pk, options = {})
|
21
|
+
get "/homeRunDerby/#{game_pk}/pool", options
|
22
|
+
end
|
5
23
|
end
|
6
24
|
end
|
@@ -1,6 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module MLBStatsAPI
|
4
|
+
# Operations pertaining to leagues
|
5
|
+
# @see https://statsapi.mlb.com/docs/#tag/league
|
4
6
|
module Leagues
|
5
7
|
LEAGUES = {
|
6
8
|
american: 103,
|
@@ -20,5 +22,39 @@ module MLBStatsAPI
|
|
20
22
|
international: 117,
|
21
23
|
midwest: 118
|
22
24
|
}.freeze
|
25
|
+
|
26
|
+
# View league information.
|
27
|
+
# @see https://statsapi.mlb.com/docs/#operation/league
|
28
|
+
def leagues(options = {})
|
29
|
+
unless options[:sportId] || options[:leagueIds]
|
30
|
+
raise ArgumentError, '#leagues requires a sportId or leagueIds'
|
31
|
+
end
|
32
|
+
|
33
|
+
get '/league', options
|
34
|
+
end
|
35
|
+
|
36
|
+
# View All-Star Ballots per league.
|
37
|
+
# @see https://statsapi.mlb.com/docs/#operation/allStarBallot
|
38
|
+
def all_star_ballot(league_id, season = nil, options = {})
|
39
|
+
options[:season] = season || Time.now.year
|
40
|
+
|
41
|
+
get "/league/#{league_id}/allStarBallot", options
|
42
|
+
end
|
43
|
+
|
44
|
+
# View All-Star Write-ins per league.
|
45
|
+
# @see https://statsapi.mlb.com/docs/#operation/allStarWriteIns
|
46
|
+
def all_star_write_ins(league_id, season = nil, options = {})
|
47
|
+
options[:season] = season || Time.now.year
|
48
|
+
|
49
|
+
get "/league/#{league_id}/allStarWriteIns", options
|
50
|
+
end
|
51
|
+
|
52
|
+
# View All-Star Final Vote per league.
|
53
|
+
# @see https://statsapi.mlb.com/docs/#operation/allStarFinalVote
|
54
|
+
def all_star_final_vote(league_id, season = nil, options = {})
|
55
|
+
options[:season] = season || Time.now.year
|
56
|
+
|
57
|
+
get "/league/#{league_id}/allStarFinalVote", options
|
58
|
+
end
|
23
59
|
end
|
24
60
|
end
|
data/lib/mlb_stats_api/people.rb
CHANGED
@@ -1,10 +1,28 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module MLBStatsAPI
|
4
|
+
# Operations pertaining to players, umpires, and coaches
|
5
|
+
# @see https://statsapi.mlb.com/docs/#tag/person
|
4
6
|
module People
|
5
|
-
#
|
6
|
-
|
7
|
-
|
7
|
+
# View one or more person's stats and biographical information.
|
8
|
+
# @see https://statsapi.mlb.com/docs/#operation/person
|
9
|
+
def person(person_ids, options = {})
|
10
|
+
ids = Array(person_ids)
|
11
|
+
|
12
|
+
result = get('/people', options.merge(personIds: ids)).dig('people')
|
13
|
+
|
14
|
+
return result.first if ids.length == 1
|
15
|
+
|
16
|
+
result
|
17
|
+
end
|
18
|
+
alias people person
|
19
|
+
|
20
|
+
# View a player's stats for a specific game.
|
21
|
+
# @see https://statsapi.mlb.com/docs/#operation/currentGameStats
|
22
|
+
def person_game_stats(person_id, options = {})
|
23
|
+
game = options.delete(:gamePk) || 'current'
|
24
|
+
|
25
|
+
get("/people/#{person_id}/stats/game/#{game}", options).dig('stats')
|
8
26
|
end
|
9
27
|
end
|
10
28
|
end
|
@@ -1,18 +1,19 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
# Although this group has two endpoints, they both have the same function.
|
4
|
-
#
|
5
|
-
# /v1/seasons/{seasonId} is the same as /v1/seasons?season={seasonId}
|
6
3
|
module MLBStatsAPI
|
4
|
+
# Operations pertaining to seasons
|
5
|
+
# @see https://statsapi.mlb.com/docs/#tag/season
|
7
6
|
module Seasons
|
8
|
-
#
|
9
|
-
#
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
7
|
+
# View current season info.
|
8
|
+
# @see https://statsapi.mlb.com/docs/#operation/seasons
|
9
|
+
def seasons(options = {})
|
10
|
+
get '/seasons', { sportId: 1 }.merge(options)
|
11
|
+
end
|
12
|
+
|
13
|
+
# View information on an individual season.
|
14
|
+
# @see https://statsapi.mlb.com/docs/#operation/seasons
|
15
|
+
def season(year, options = {})
|
16
|
+
get "/seasons/#{year}", { sportId: 1 }.merge(options)
|
15
17
|
end
|
16
|
-
alias season seasons
|
17
18
|
end
|
18
19
|
end
|
data/lib/mlb_stats_api/sports.rb
CHANGED
@@ -1,13 +1,27 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module MLBStatsAPI
|
4
|
+
# Operations pertaining to sports
|
5
|
+
# @see https://statsapi.mlb.com/docs/#tag/sports
|
4
6
|
module Sports
|
7
|
+
# View information for all sportIds.
|
8
|
+
# @see https://statsapi.mlb.com/docs/#operation/sports
|
5
9
|
def sports
|
6
|
-
get
|
10
|
+
get '/sports'
|
7
11
|
end
|
8
12
|
|
9
|
-
|
10
|
-
|
13
|
+
# View information for any given sportId.
|
14
|
+
# @see https://statsapi.mlb.com/docs/#operation/sports
|
15
|
+
def sport(sport_id, options = {})
|
16
|
+
get "/sports/#{sport_id}", options
|
17
|
+
end
|
18
|
+
|
19
|
+
# View information on a players for a given sportId.
|
20
|
+
# @see https://statsapi.mlb.com/docs/#operation/sportPlayers
|
21
|
+
def sport_players(sport_id, season, options = {})
|
22
|
+
options[:season] = season
|
23
|
+
|
24
|
+
get "/sports/#{sport_id}/players", options
|
11
25
|
end
|
12
26
|
end
|
13
27
|
end
|
@@ -1,36 +1,23 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module MLBStatsAPI
|
4
|
+
# Operations pertaining to standings
|
5
|
+
# @see https://statsapi.mlb.com/docs/#tag/standings
|
4
6
|
module Standings
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
wild_card_with_leaders: 'wildCardWithLeaders',
|
10
|
-
first_half: 'firstHalf',
|
11
|
-
second_half: 'secondHalf',
|
12
|
-
spring_training: 'springTraining',
|
13
|
-
post_season: 'postseason',
|
14
|
-
by_division: 'byDivision',
|
15
|
-
by_conference: 'byConference',
|
16
|
-
by_league: 'byLeague'
|
17
|
-
}.freeze
|
7
|
+
# View standings for a league.
|
8
|
+
# @see https://statsapi.mlb.com/docs/#operation/standings
|
9
|
+
def standings(options = {})
|
10
|
+
options[:hydrate] = 'team' unless options.key?(:hydrate)
|
18
11
|
|
19
|
-
|
20
|
-
|
12
|
+
if options[:leagues] && !options[:leagueId]
|
13
|
+
league_ids = Leagues::LEAGUES.values_at(*options.delete(:leagues))
|
21
14
|
|
22
|
-
|
23
|
-
|
24
|
-
if league_ids.none?
|
25
|
-
raise 'Invalid league(s) - see Leagues::LEAGUES for available names.'
|
15
|
+
options[:leagueId] = league_ids
|
26
16
|
end
|
27
17
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
season: (season || Date.today.year),
|
32
|
-
hydrate: hydrate
|
33
|
-
)
|
18
|
+
options[:leagueId] = [103, 104] unless Array(options[:leagueId])&.any?
|
19
|
+
|
20
|
+
get '/standings', options
|
34
21
|
end
|
35
22
|
end
|
36
23
|
end
|
data/lib/mlb_stats_api/stats.rb
CHANGED
@@ -1,6 +1,26 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module MLBStatsAPI
|
4
|
+
# Operations pertaining to stats
|
5
|
+
# @see https://statsapi.mlb.com/docs/#tag/stats
|
4
6
|
module Stats
|
7
|
+
# View statistics based on statType, group, season, and organization.
|
8
|
+
# @see https://statsapi.mlb.com/docs/#operation/stats
|
9
|
+
def stats(options = {})
|
10
|
+
raise ArgumentError, '#stats requires a stats arg' unless options[:stats]
|
11
|
+
raise ArgumentError, '#stats requires a group arg' unless options[:group]
|
12
|
+
|
13
|
+
get '/stats', options
|
14
|
+
end
|
15
|
+
|
16
|
+
# View leaders for a statistic.
|
17
|
+
# @see https://statsapi.mlb.com/docs/#operation/leaders
|
18
|
+
def stats_leaders(options = {})
|
19
|
+
unless options[:leaderCategories]
|
20
|
+
raise ArgumentError, '#stats_leaders requires a leaderCategories arg'
|
21
|
+
end
|
22
|
+
|
23
|
+
get '/stats/leaders', options
|
24
|
+
end
|
5
25
|
end
|
6
26
|
end
|
data/lib/mlb_stats_api/teams.rb
CHANGED
@@ -11,8 +11,7 @@ module MLBStatsAPI
|
|
11
11
|
end
|
12
12
|
|
13
13
|
def teams(*team_ids)
|
14
|
-
teams = []
|
15
|
-
ids = []
|
14
|
+
teams = ids = []
|
16
15
|
|
17
16
|
team_ids.each do |team_id|
|
18
17
|
value = @cache.load("mlb_stats_api:teams:#{team_id}")
|
@@ -28,13 +27,13 @@ module MLBStatsAPI
|
|
28
27
|
end
|
29
28
|
|
30
29
|
def affiliates(team_id, season: nil)
|
31
|
-
get
|
30
|
+
get "/teams/#{team_id}/affiliates", season: season
|
32
31
|
end
|
33
32
|
|
34
33
|
def coaches(team_id, date: nil)
|
35
34
|
date ||= Date.today
|
36
35
|
|
37
|
-
get
|
36
|
+
get "/teams/#{team_id}/coaches", date: date.strftime('%m/%d/%Y')
|
38
37
|
end
|
39
38
|
|
40
39
|
# def leaders(team_id)
|
@@ -42,7 +41,7 @@ module MLBStatsAPI
|
|
42
41
|
# end
|
43
42
|
|
44
43
|
def roster(team_id, type:, date: nil)
|
45
|
-
get
|
44
|
+
get "/teams/#{team_id}/roster/#{type}", date: date.strftime('%m/%d/%Y')
|
46
45
|
end
|
47
46
|
|
48
47
|
protected
|
data/lib/mlb_stats_api/venues.rb
CHANGED
@@ -1,9 +1,13 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module MLBStatsAPI
|
4
|
+
# Operations pertaining to venues
|
5
|
+
# @see https://statsapi.mlb.com/docs/#tag/venue
|
4
6
|
module Venues
|
7
|
+
# View information for a venue based on venueId.
|
8
|
+
# @see https://statsapi.mlb.com/docs/#operation/venues
|
5
9
|
def venue(venue_id)
|
6
|
-
|
10
|
+
get("/venues/#{venue_id}").dig('venues', 0)
|
7
11
|
end
|
8
12
|
end
|
9
13
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mlb_stats_api
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Steven Hoffman
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-04-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -128,6 +128,7 @@ files:
|
|
128
128
|
- lib/mlb_stats_api.rb
|
129
129
|
- lib/mlb_stats_api/base.rb
|
130
130
|
- lib/mlb_stats_api/client.rb
|
131
|
+
- lib/mlb_stats_api/color_feed.rb
|
131
132
|
- lib/mlb_stats_api/conferences.rb
|
132
133
|
- lib/mlb_stats_api/config.rb
|
133
134
|
- lib/mlb_stats_api/divisions.rb
|
@@ -145,7 +146,6 @@ files:
|
|
145
146
|
- lib/mlb_stats_api/stats.rb
|
146
147
|
- lib/mlb_stats_api/team.rb
|
147
148
|
- lib/mlb_stats_api/teams.rb
|
148
|
-
- lib/mlb_stats_api/venue.rb
|
149
149
|
- lib/mlb_stats_api/venues.rb
|
150
150
|
- lib/mlb_stats_api/version.rb
|
151
151
|
- mlb_stats_api.gemspec
|
@@ -168,8 +168,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
168
168
|
- !ruby/object:Gem::Version
|
169
169
|
version: '0'
|
170
170
|
requirements: []
|
171
|
-
|
172
|
-
rubygems_version: 2.7.6
|
171
|
+
rubygems_version: 3.0.3
|
173
172
|
signing_key:
|
174
173
|
specification_version: 4
|
175
174
|
summary: MLB has a new Stats API!
|