espn_nba_fantasy 0.0.0
Sign up to get free protection for your applications and to get access to all the features.
- 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: []
|