espn_nba_fantasy 0.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/lib/espn_nba_fantasy/calculate_stats.rb +10 -0
- data/lib/espn_nba_fantasy/league.rb +64 -0
- data/lib/espn_nba_fantasy/player.rb +37 -0
- data/lib/espn_nba_fantasy/player_finder.rb +7 -0
- data/lib/espn_nba_fantasy/team.rb +67 -0
- data/lib/espn_nba_fantasy.rb +4 -0
- metadata +50 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 95c1266ad0e17fe8005d0a2ae6d4c708d96f2a3bc32f552e8e7e982a8a7094a9
|
4
|
+
data.tar.gz: 3e4850b64d6045defc7f213930a6826437c665e1867e2c9f194562ed1323c14f
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: a4c6f37cc975b0b7098f4a5a7c59c4fd6788e90fd2db4d14c079d3db59dba9644273f08ddf8034b042c26e86871ddaf7b44fed3b781bd66de9e5953e90b2557b
|
7
|
+
data.tar.gz: 4ab893440cdd0c8fa580e6247949e4b4dfead8543469d1d94a9275dc6bab25f7e6017797f929a3957a7fdd9c56f17916ebc8467b4b3b56029d2d6f96ceb79ff4
|
@@ -0,0 +1,64 @@
|
|
1
|
+
require 'rest-client'
|
2
|
+
require 'json'
|
3
|
+
require_relative 'constants'
|
4
|
+
require_relative 'team'
|
5
|
+
require_relative 'player_finder'
|
6
|
+
|
7
|
+
class League
|
8
|
+
|
9
|
+
include PlayerFinder
|
10
|
+
|
11
|
+
attr_accessor :teams, :stat_data
|
12
|
+
|
13
|
+
def initialize(league_id, year, s2, sw)
|
14
|
+
@uri = "https://fantasy.espn.com/apis/v3/games/fba/seasons/#{year}/segments/0/leagues/#{league_id}?view=mTeam&view=mRoster&view=mMatchup&view=mSettings&view=mStandings"
|
15
|
+
@cookies = {'espn_s2': "#{s2}", 'SWID': "#{sw}"}
|
16
|
+
@data = JSON.parse(RestClient.get(@uri, {cookies: @cookies}))
|
17
|
+
@teams = make_team_objects
|
18
|
+
@stat_data = make_stat_data
|
19
|
+
end
|
20
|
+
|
21
|
+
def team_list
|
22
|
+
@teams.map{|r| [r.name, r.team_id]}
|
23
|
+
end
|
24
|
+
|
25
|
+
def findplayer(team_name, str)
|
26
|
+
team = teams.select{|t| t.name == team_name}.first
|
27
|
+
return "No team named #{team_name}" unless team
|
28
|
+
|
29
|
+
find_players(team.players, str) || "#{str} cannot be found in #{team_name}'s roster"
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def make_team_objects
|
35
|
+
@data['teams'].map{|team| Team.new(team, self)}
|
36
|
+
end
|
37
|
+
|
38
|
+
def make_stat_data
|
39
|
+
stats = {}
|
40
|
+
teams.each do |team|
|
41
|
+
team.teamstats.each do |stat, value|
|
42
|
+
stats[stat] ? stats[stat] << value : stats[stat] = [value]
|
43
|
+
end
|
44
|
+
end
|
45
|
+
calculate_league_stats(stats)
|
46
|
+
end
|
47
|
+
|
48
|
+
def calculate_league_stats(s)
|
49
|
+
calc = {}
|
50
|
+
s.each do |stat, values|
|
51
|
+
avg = (values.sum/values.length).to_f
|
52
|
+
calc["#{stat} Average"] = avg
|
53
|
+
calc["#{stat} Standard Deviation"] = std_dev(avg, values)
|
54
|
+
end
|
55
|
+
calc
|
56
|
+
end
|
57
|
+
|
58
|
+
def std_dev(mean, values)
|
59
|
+
sum = values.inject(0){|accum, i| accum +(i-mean)**2 }
|
60
|
+
variance = sum/(values.length - 1).to_f
|
61
|
+
Math.sqrt(variance)
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require_relative 'constants'
|
2
|
+
require_relative 'calculate_stats'
|
3
|
+
|
4
|
+
class Player
|
5
|
+
|
6
|
+
include CalculateStats
|
7
|
+
|
8
|
+
attr_reader :name, :player_id, :position, :stats, :team
|
9
|
+
|
10
|
+
def initialize(player, team)
|
11
|
+
@name = player['fullName']
|
12
|
+
@player_id = player['id']
|
13
|
+
@position = POSITION_MAP[player['defaultPositionId']-1]
|
14
|
+
@stats = stat_card_maker(player)
|
15
|
+
@team = team
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def to_s
|
21
|
+
"Player: #{name} | Position: #{position} | Stats: #{stats}"
|
22
|
+
end
|
23
|
+
|
24
|
+
def stat_card_maker(player)
|
25
|
+
avgstats = player['stats'].first['averageStats']
|
26
|
+
statcard = avgstats ? avgstats.transform_keys!{ |k| STATS_MAP[k] }.slice(*STATS) : EMPTY_STATS
|
27
|
+
calculate_stats(statcard)
|
28
|
+
end
|
29
|
+
|
30
|
+
def calculate_stats(s)
|
31
|
+
s['FGA'] = s['FGA'] + 0.0001
|
32
|
+
s['TO'] = s['TO'] + 0.00001
|
33
|
+
s['FTA'] = s['FTA'] + 0.00001
|
34
|
+
add_calculated_stats(s)
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
require_relative 'constants'
|
2
|
+
require_relative 'player'
|
3
|
+
require_relative 'calculate_stats'
|
4
|
+
require_relative 'player_finder'
|
5
|
+
|
6
|
+
class Team
|
7
|
+
|
8
|
+
include CalculateStats
|
9
|
+
include PlayerFinder
|
10
|
+
|
11
|
+
attr_accessor :roster, :players, :name, :teamstats, :league, :team_id
|
12
|
+
|
13
|
+
def initialize(obj, league)
|
14
|
+
@name = obj['name']
|
15
|
+
@team_id = obj['id']
|
16
|
+
@players = roster_maker(obj)
|
17
|
+
@roster = roster_names
|
18
|
+
@teamstats = make_team_stats(@players)
|
19
|
+
@league = league
|
20
|
+
end
|
21
|
+
|
22
|
+
def trade_players(to_trade = [], to_receive = [], other_team_name)
|
23
|
+
other_team = league.teams.select{|team| team.name == other_team_name}.first
|
24
|
+
return "No team named #{other_team_name}" unless other_team
|
25
|
+
own_players = to_trade.map{|player| find_players(players, player)}
|
26
|
+
other_players = to_receive.map{|player| find_players(other_team.players, player)}
|
27
|
+
return "This trade included players not one of the specified teams" if (own_players.include?(nil)|| other_players.include?(nil))
|
28
|
+
{'Trading:' => own_players.map{|p| p.name},
|
29
|
+
'Receiving:' => other_players.map{|p| p.name}}.merge(new_team_stats(own_players, other_players))
|
30
|
+
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
def to_s
|
36
|
+
"Team Name: #{name} | Roster: #{roster_names}"
|
37
|
+
end
|
38
|
+
|
39
|
+
def roster_names
|
40
|
+
players.map(&:name)
|
41
|
+
end
|
42
|
+
|
43
|
+
def stat_differences(old, new)
|
44
|
+
new.map {|stat, val| [stat, val - old[stat]]}.to_h
|
45
|
+
end
|
46
|
+
|
47
|
+
def new_team_stats(own, others)
|
48
|
+
new_ros = players.dup
|
49
|
+
others.each{|other| new_ros << other}
|
50
|
+
own.each {|p| new_ros.delete_at(new_ros.index(p))}
|
51
|
+
newstats = make_team_stats(new_ros)
|
52
|
+
{'Before:' => teamstats, 'After:' => newstats, 'Changes:' => stat_differences(teamstats, newstats) }
|
53
|
+
end
|
54
|
+
|
55
|
+
def roster_maker(obj)
|
56
|
+
obj['roster']['entries'].map {|e| Player.new(e['playerPoolEntry']['player'], self)}
|
57
|
+
end
|
58
|
+
|
59
|
+
def make_team_stats(ros)
|
60
|
+
stats = {}
|
61
|
+
ros.each do |player|
|
62
|
+
player.stats.each {|stat, value| stats[stat] ? stats[stat] += value : stats[stat] = value}
|
63
|
+
end
|
64
|
+
add_calculated_stats(stats)
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
metadata
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: espn_nba_fantasy
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Usborn Ocampo
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2023-06-22 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description: A way to get your league, team, and player information from your ESPN
|
14
|
+
NBA Fantasy League
|
15
|
+
email: usborn116@gmail.com
|
16
|
+
executables: []
|
17
|
+
extensions: []
|
18
|
+
extra_rdoc_files: []
|
19
|
+
files:
|
20
|
+
- lib/espn_nba_fantasy.rb
|
21
|
+
- lib/espn_nba_fantasy/calculate_stats.rb
|
22
|
+
- lib/espn_nba_fantasy/league.rb
|
23
|
+
- lib/espn_nba_fantasy/player.rb
|
24
|
+
- lib/espn_nba_fantasy/player_finder.rb
|
25
|
+
- lib/espn_nba_fantasy/team.rb
|
26
|
+
homepage: https://rubygems.org/gems/espn_nba_fantasy
|
27
|
+
licenses:
|
28
|
+
- UO
|
29
|
+
metadata: {}
|
30
|
+
post_install_message:
|
31
|
+
rdoc_options: []
|
32
|
+
require_paths:
|
33
|
+
- lib
|
34
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
35
|
+
requirements:
|
36
|
+
- - ">="
|
37
|
+
- !ruby/object:Gem::Version
|
38
|
+
version: '0'
|
39
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
40
|
+
requirements:
|
41
|
+
- - ">="
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
44
|
+
requirements: []
|
45
|
+
rubygems_version: 3.4.14
|
46
|
+
signing_key:
|
47
|
+
specification_version: 4
|
48
|
+
summary: A way to get your league, team, and player information from your ESPN NBA
|
49
|
+
Fantasy League
|
50
|
+
test_files: []
|