fantasy_foobar 0.1.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/exe/fantasy_foobar +36 -0
- data/lib/fantasy_foobar.rb +21 -0
- data/lib/fantasy_foobar/app_flow.rb +31 -0
- data/lib/fantasy_foobar/data/teams.json +162 -0
- data/lib/fantasy_foobar/kickers_included.rb +27 -0
- data/lib/fantasy_foobar/players.rb +133 -0
- data/lib/fantasy_foobar/stats.rb +137 -0
- data/lib/fantasy_foobar/version.rb +3 -0
- metadata +123 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: c83f0ff5bb7fea00c5a1c606c831b3edf0e0ade3f93d026a23574f68f0ffb594
|
4
|
+
data.tar.gz: 9557bd0f5bca7181e1f45683ef03238edd6d144500e8ee3e1bf763e68cf05a2a
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 10c6fa46121ff14dd9ec99a3fb07708863687edc89abff39645ba26830cb48659a6f6ea89611dd1c093a05e8d42fd2ab5d563ba6721655c9c40193b50ca72623
|
7
|
+
data.tar.gz: bd2c18dd0d21e3f86fd1ee39f1d03963d76855dbea419a30c753107b37579bf67f25f46c318aa4b255e50b6b24c7cb3a897abbc139bcc1e6f250b4d0eef04639
|
data/exe/fantasy_foobar
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'fantasy_foobar'
|
4
|
+
require 'paint'
|
5
|
+
require 'json'
|
6
|
+
require 'net/http'
|
7
|
+
|
8
|
+
FILE_PATH = File.expand_path(File.dirname(__FILE__)).split('/exe')[0]
|
9
|
+
|
10
|
+
file = File.read "#{FILE_PATH}/lib/fantasy_foobar/data/teams.json"
|
11
|
+
TEAMS = JSON.parse(file)
|
12
|
+
|
13
|
+
CURRENT_TEAM = if File.exist?("#{FILE_PATH}/lib/fantasy_foobar/data/current_team.json")
|
14
|
+
JSON.parse(File.read("#{FILE_PATH}/lib/fantasy_foobar/data/current_team.json"))
|
15
|
+
else
|
16
|
+
[]
|
17
|
+
end
|
18
|
+
|
19
|
+
current_games = {}
|
20
|
+
url = 'http://www.nfl.com/liveupdate/scorestrip/ss.xml'
|
21
|
+
test_url = 'http://www.nfl.com/ajax/scorestrip?season=2017&seasonType=REG&week=11'
|
22
|
+
|
23
|
+
req = Net::HTTP.get_response(URI.parse(url)).body
|
24
|
+
doc = Nokogiri::XML(req)
|
25
|
+
|
26
|
+
doc.xpath('//g').each do |x|
|
27
|
+
eid = x.attribute('eid').value
|
28
|
+
current_games[x.attribute('h').value.to_s] = { 'eid' => eid, 'location' => 'home' }
|
29
|
+
current_games[x.attribute('v').value.to_s] = { 'eid' => eid, 'location' => 'away' }
|
30
|
+
end
|
31
|
+
|
32
|
+
File.write("#{FILE_PATH}/lib/fantasy_foobar/data/current_games.json", current_games.to_json)
|
33
|
+
CURRENT_GAMES = current_games.to_json
|
34
|
+
|
35
|
+
fantasy_foobar = FantasyFoobar::Team.new
|
36
|
+
fantasy_foobar.start_app
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'fantasy_foobar/app_flow'
|
2
|
+
require 'fantasy_foobar/players'
|
3
|
+
require 'fantasy_foobar/stats'
|
4
|
+
require 'fantasy_foobar/version'
|
5
|
+
require 'fantasy_foobar/kickers_included'
|
6
|
+
|
7
|
+
module FantasyFoobar
|
8
|
+
class Team
|
9
|
+
def start_app
|
10
|
+
if update_team?
|
11
|
+
remove_players if CURRENT_TEAM.any? && remove_players?
|
12
|
+
add_players if add_players?
|
13
|
+
|
14
|
+
File.write("#{FILE_PATH}/lib/fantasy_foobar/data/current_team.json", CURRENT_TEAM.to_json)
|
15
|
+
end
|
16
|
+
|
17
|
+
puts
|
18
|
+
print_stats
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
def add_players?
|
2
|
+
input = ''
|
3
|
+
while !input.casecmp('y').zero? && !input.casecmp('n').zero?
|
4
|
+
printf 'Would you like to add players to your team? (y/n) '
|
5
|
+
input = gets.chomp
|
6
|
+
end
|
7
|
+
|
8
|
+
input == 'y'
|
9
|
+
end
|
10
|
+
|
11
|
+
def remove_players?
|
12
|
+
input = ''
|
13
|
+
while !input.casecmp('y').zero? && !input.casecmp('n').zero?
|
14
|
+
printf 'Would you like to remove players from your team? (y/n) '
|
15
|
+
input = gets.chomp
|
16
|
+
end
|
17
|
+
|
18
|
+
input == 'y'
|
19
|
+
end
|
20
|
+
|
21
|
+
def update_team?
|
22
|
+
print_current_team
|
23
|
+
|
24
|
+
input = ''
|
25
|
+
while !input.casecmp('y').zero? && !input.casecmp('n').zero?
|
26
|
+
printf 'Would you like to update your current team? (y/n) '
|
27
|
+
input = gets.chomp
|
28
|
+
end
|
29
|
+
|
30
|
+
input == 'y'
|
31
|
+
end
|
@@ -0,0 +1,162 @@
|
|
1
|
+
{
|
2
|
+
"ARI": {
|
3
|
+
"name": "Arizona Cardinals",
|
4
|
+
"primary_color": "#97233F",
|
5
|
+
"secondary_color": "#101820"
|
6
|
+
},
|
7
|
+
"ATL": {
|
8
|
+
"name": "Atlanta Falcons",
|
9
|
+
"primary_color": "#A6192E",
|
10
|
+
"secondary_color": "#101820"
|
11
|
+
},
|
12
|
+
"BAL": {
|
13
|
+
"name": "Baltimore Ravens",
|
14
|
+
"primary_color": "#241773",
|
15
|
+
"secondary_color": "#D0B240"
|
16
|
+
},
|
17
|
+
"BUF": {
|
18
|
+
"name": "Buffalo Bills",
|
19
|
+
"primary_color": "#00338D",
|
20
|
+
"secondary_color": "#C8102E"
|
21
|
+
},
|
22
|
+
"CAR": {
|
23
|
+
"name": "Carolina Panthers",
|
24
|
+
"primary_color": "#0085CA",
|
25
|
+
"secondary_color": "#101820"
|
26
|
+
},
|
27
|
+
"CHI": {
|
28
|
+
"name": "Chicago Bears",
|
29
|
+
"primary_color": "#051C2C",
|
30
|
+
"secondary_color": "#DC4405"
|
31
|
+
},
|
32
|
+
"CIN": {
|
33
|
+
"name": "Cincinnati Bengals",
|
34
|
+
"primary_color": "#FC4C02",
|
35
|
+
"secondary_color": "#101820"
|
36
|
+
},
|
37
|
+
"CLE": {
|
38
|
+
"name": "Cleveland Browns",
|
39
|
+
"primary_color": "#382F2D",
|
40
|
+
"secondary_color": "#EB3300"
|
41
|
+
},
|
42
|
+
"DAL": {
|
43
|
+
"name": "Dallas Cowboys",
|
44
|
+
"primary_color": "#041E42",
|
45
|
+
"secondary_color": "#869397"
|
46
|
+
},
|
47
|
+
"DEN": {
|
48
|
+
"name": "Denver Broncos",
|
49
|
+
"primary_color": "#FC4C02",
|
50
|
+
"secondary_color": "#0C2340"
|
51
|
+
},
|
52
|
+
"DET": {
|
53
|
+
"name": "Detroit Lions",
|
54
|
+
"primary_color": "#0069B1",
|
55
|
+
"secondary_color": "#A2AAAD"
|
56
|
+
},
|
57
|
+
"GB": {
|
58
|
+
"name": "Green Bay Packers",
|
59
|
+
"primary_color": "#175E33",
|
60
|
+
"secondary_color": "#FFB81C"
|
61
|
+
},
|
62
|
+
"HOU": {
|
63
|
+
"name": "Houston Texans",
|
64
|
+
"primary_color": "#091F2C",
|
65
|
+
"secondary_color": "#A6192E"
|
66
|
+
},
|
67
|
+
"IND": {
|
68
|
+
"name": "Indianapolis Colts",
|
69
|
+
"primary_color": "#001489",
|
70
|
+
"secondary_color": "#FFFFFF"
|
71
|
+
},
|
72
|
+
"JAX": {
|
73
|
+
"name": "Jacksonville Jaguars",
|
74
|
+
"primary_color": "#D49F12",
|
75
|
+
"secondary_color": "#006073"
|
76
|
+
},
|
77
|
+
"KC": {
|
78
|
+
"name": "Kansas City Chiefs",
|
79
|
+
"primary_color": "#C8102E",
|
80
|
+
"secondary_color": "#FFB81C"
|
81
|
+
},
|
82
|
+
"LAC": {
|
83
|
+
"name": "Los Angeles Chargers",
|
84
|
+
"primary_color": "#0C2340",
|
85
|
+
"secondary_color": "#FFB81C"
|
86
|
+
},
|
87
|
+
"LA": {
|
88
|
+
"name": "Los Angeles Rams",
|
89
|
+
"primary_color": "#002244",
|
90
|
+
"secondary_color": "#FFFFFF"
|
91
|
+
},
|
92
|
+
"MIA": {
|
93
|
+
"name": "Miami Dolphins",
|
94
|
+
"primary_color": "#008E97",
|
95
|
+
"secondary_color": "#F58220"
|
96
|
+
},
|
97
|
+
"MIN": {
|
98
|
+
"name": "Minnesota Vikings",
|
99
|
+
"primary_color": "#512D6D",
|
100
|
+
"secondary_color": "#FFB81C"
|
101
|
+
},
|
102
|
+
"NE": {
|
103
|
+
"name": "New England Patriots",
|
104
|
+
"primary_color": "#0C2340",
|
105
|
+
"secondary_color": "#C8102E"
|
106
|
+
},
|
107
|
+
"NO": {
|
108
|
+
"name": "New Orleans Saints",
|
109
|
+
"primary_color": "#A28D5B",
|
110
|
+
"secondary_color": "#101820"
|
111
|
+
},
|
112
|
+
"NYG": {
|
113
|
+
"name": "New York Giants",
|
114
|
+
"primary_color": "#001E62",
|
115
|
+
"secondary_color": "#A6192E"
|
116
|
+
},
|
117
|
+
"NYJ": {
|
118
|
+
"name": "New York Jets",
|
119
|
+
"primary_color": "#0C371D",
|
120
|
+
"secondary_color": "#FFFFFF"
|
121
|
+
},
|
122
|
+
"OAK": {
|
123
|
+
"name": "Oakland Raiders",
|
124
|
+
"primary_color": "#101820",
|
125
|
+
"secondary_color": "#A5ACAF"
|
126
|
+
},
|
127
|
+
"PHI": {
|
128
|
+
"name": "Philadelphia Eagles",
|
129
|
+
"primary_color": "#064C53",
|
130
|
+
"secondary_color": "#D3A205"
|
131
|
+
},
|
132
|
+
"PIT": {
|
133
|
+
"name": "Pittsburgh Steelers",
|
134
|
+
"primary_color": "#FFB81C",
|
135
|
+
"secondary_color": "#101820"
|
136
|
+
},
|
137
|
+
"SF": {
|
138
|
+
"name": "San Francisco 49ers",
|
139
|
+
"primary_color": "#9B2743",
|
140
|
+
"secondary_color": "#896C4C"
|
141
|
+
},
|
142
|
+
"SEA": {
|
143
|
+
"name": "Seattle Seahawks",
|
144
|
+
"primary_color": "#001433",
|
145
|
+
"secondary_color": "#4DFF00"
|
146
|
+
},
|
147
|
+
"TB": {
|
148
|
+
"name": "Tampa Bay Buccaneers",
|
149
|
+
"primary_color": "#C8102E",
|
150
|
+
"secondary_color": "#FF8200"
|
151
|
+
},
|
152
|
+
"TEN": {
|
153
|
+
"name": "Tennessee Titans",
|
154
|
+
"primary_color": "#0C2340",
|
155
|
+
"secondary_color": "#4B92DB"
|
156
|
+
},
|
157
|
+
"WAS": {
|
158
|
+
"name": "Washington Redskins",
|
159
|
+
"primary_color": "#862633",
|
160
|
+
"secondary_color": "#FFCD00"
|
161
|
+
}
|
162
|
+
}
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'nfl_data'
|
2
|
+
|
3
|
+
module NflData
|
4
|
+
class PlayerParser
|
5
|
+
include ParserHelper
|
6
|
+
|
7
|
+
attr_reader :base_url
|
8
|
+
|
9
|
+
def initialize
|
10
|
+
@base_url = 'http://www.nfl.com/players/search?category=position&conferenceAbbr=null&playerType=current&conference=ALL&filter='
|
11
|
+
end
|
12
|
+
|
13
|
+
def get_by_position(position)
|
14
|
+
if position == :all
|
15
|
+
{
|
16
|
+
quarterbacks: get('quarterback'),
|
17
|
+
runningbacks: get('runningback'),
|
18
|
+
wide_receivers: get('widereceiver'),
|
19
|
+
tight_ends: get('tightend'),
|
20
|
+
kickers: get('kicker')
|
21
|
+
}
|
22
|
+
else
|
23
|
+
{ position => get(position.to_s.gsub(/s|_/, '')) }
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,133 @@
|
|
1
|
+
def add_player(player, players)
|
2
|
+
opts = players.find_all { |i| i['last_name'].casecmp(player).zero? }
|
3
|
+
unless opts.any?
|
4
|
+
puts
|
5
|
+
puts "Player with the last name '#{player}' does not exist"
|
6
|
+
return
|
7
|
+
end
|
8
|
+
selection = {}
|
9
|
+
|
10
|
+
puts
|
11
|
+
opts.each_with_index do |opt, i|
|
12
|
+
team = TEAMS[opt['team']]
|
13
|
+
primary_color = team['primary_color']
|
14
|
+
secondary_color = team['secondary_color']
|
15
|
+
stat_categories = stat_categories(opt['position'])
|
16
|
+
gsid = get_player_gsid(opt['profile_link'])
|
17
|
+
selection[(i + 1).to_s] = opt.merge(stat_categories).merge(gsid)
|
18
|
+
|
19
|
+
puts "#{i + 1}. #{Paint[opt['full_name'], :bright]} from the #{Paint[team['name'], secondary_color, primary_color, :bright]} "
|
20
|
+
end
|
21
|
+
|
22
|
+
puts
|
23
|
+
puts '----------------------------------------------------- 🏈'
|
24
|
+
|
25
|
+
selected_player = get_selected_player(selection)
|
26
|
+
|
27
|
+
if selected_player.nil?
|
28
|
+
puts
|
29
|
+
puts 'YOUR TEAM HAS NOT BEEN UPDATED'
|
30
|
+
return
|
31
|
+
end
|
32
|
+
|
33
|
+
CURRENT_TEAM << selected_player
|
34
|
+
|
35
|
+
puts
|
36
|
+
puts "You added #{Paint[CURRENT_TEAM.last['full_name'], :bright]} "
|
37
|
+
end
|
38
|
+
|
39
|
+
def add_players
|
40
|
+
players = JSON.parse(NflData::API::Player.get_all)
|
41
|
+
player_pool = players['quarterbacks'] + players['wide_receivers'] + players['runningbacks'] + players['tight_ends'] + players['kickers']
|
42
|
+
print_current_team
|
43
|
+
|
44
|
+
input = 'y'
|
45
|
+
|
46
|
+
while input.casecmp('y').zero?
|
47
|
+
printf 'Add a player to your team: '
|
48
|
+
player = gets.chomp
|
49
|
+
add_player(player, player_pool)
|
50
|
+
|
51
|
+
inner_input = ''
|
52
|
+
while !inner_input.casecmp('y').zero? && !inner_input.casecmp('n').zero?
|
53
|
+
print_current_team
|
54
|
+
printf 'Add another player? (y/n) '
|
55
|
+
inner_input = gets.chomp
|
56
|
+
end
|
57
|
+
input = inner_input
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def bye_week?(player)
|
62
|
+
if JSON.parse(CURRENT_GAMES)[player['team']].nil?
|
63
|
+
puts "#{player['full_name']} does not have a game this week"
|
64
|
+
return true
|
65
|
+
end
|
66
|
+
false
|
67
|
+
end
|
68
|
+
|
69
|
+
def get_player_gsid(url)
|
70
|
+
req = Net::HTTP.get_response(URI.parse(url)).body
|
71
|
+
doc = Nokogiri::HTML(req)
|
72
|
+
|
73
|
+
gsid = doc.xpath("//comment()[contains(.,'GSIS ID')]").first.text.split('GSIS ID: ')[1].split("\n\t")[0]
|
74
|
+
|
75
|
+
{ 'gsid' => gsid }
|
76
|
+
end
|
77
|
+
|
78
|
+
def get_selected_player(selection)
|
79
|
+
puts
|
80
|
+
printf "Input number to confirm player above you'd like to add (enter any other value to cancel): "
|
81
|
+
player = gets.chomp
|
82
|
+
|
83
|
+
if player.to_i.zero?
|
84
|
+
return nil
|
85
|
+
end
|
86
|
+
|
87
|
+
selection[player]
|
88
|
+
end
|
89
|
+
|
90
|
+
def print_current_team
|
91
|
+
puts
|
92
|
+
CURRENT_TEAM.each_with_index do |player, i|
|
93
|
+
team = TEAMS[player['team']]
|
94
|
+
primary_color = team['primary_color']
|
95
|
+
secondary_color = team['secondary_color']
|
96
|
+
puts "#{i + 1}. #{Paint[player['full_name'], :bright]} from the #{Paint[team['name'], secondary_color, primary_color, :bright]} "
|
97
|
+
end
|
98
|
+
puts
|
99
|
+
end
|
100
|
+
|
101
|
+
def remove_player
|
102
|
+
printf "Input the number of player above you'd like to remove (enter any other value to cancel): "
|
103
|
+
player = gets.chomp
|
104
|
+
|
105
|
+
if player.to_i.zero?
|
106
|
+
puts
|
107
|
+
puts 'YOUR TEAM HAS NOT BEEN UPDATED'
|
108
|
+
return
|
109
|
+
end
|
110
|
+
|
111
|
+
unless CURRENT_TEAM.delete_at(player.to_i - 1)
|
112
|
+
puts
|
113
|
+
puts 'YOUR TEAM HAS NOT BEEN UPDATED'
|
114
|
+
end
|
115
|
+
end
|
116
|
+
|
117
|
+
def remove_players
|
118
|
+
input = 'y'
|
119
|
+
|
120
|
+
while input.casecmp('y').zero?
|
121
|
+
print_current_team
|
122
|
+
remove_player
|
123
|
+
|
124
|
+
inner_input = ''
|
125
|
+
while !inner_input.casecmp('y').zero? && !inner_input.casecmp('n').zero?
|
126
|
+
inner_input = 'n' && break unless CURRENT_TEAM.any?
|
127
|
+
print_current_team
|
128
|
+
printf 'Remove another player? (y/n) '
|
129
|
+
inner_input = gets.chomp
|
130
|
+
end
|
131
|
+
input = inner_input
|
132
|
+
end
|
133
|
+
end
|
@@ -0,0 +1,137 @@
|
|
1
|
+
STAT_LINE = {}
|
2
|
+
STAT_CACHE = {}
|
3
|
+
|
4
|
+
def calculate_points(stat_category, data)
|
5
|
+
case stat_category
|
6
|
+
when 'passing' then calculate_passing(data)
|
7
|
+
when 'rushing' then calculate_rushing(data)
|
8
|
+
when 'receiving' then calculate_receiving(data)
|
9
|
+
when 'kicking' then calculate_kicking(data)
|
10
|
+
when 'fumbles' then calculate_fumbles(data)
|
11
|
+
else 0
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def calculate_passing(data)
|
16
|
+
return 0 if data.empty?
|
17
|
+
(data['yds'] * 0.04) + (data['tds'] * 4) + (data['twoptm'] * 2) - (data['ints'] * 2)
|
18
|
+
end
|
19
|
+
|
20
|
+
def calculate_rushing(data)
|
21
|
+
return 0 if data.empty?
|
22
|
+
(data['yds'] * 0.1) + (data['tds'] * 6) + (data['twoptm'] * 2)
|
23
|
+
end
|
24
|
+
|
25
|
+
def calculate_receiving(data)
|
26
|
+
return 0 if data.empty?
|
27
|
+
(data['yds'] * 0.1) + (data['tds'] * 6) + (data['twoptm'] * 2) + (data['rec'] * 0.5)
|
28
|
+
end
|
29
|
+
|
30
|
+
def calculate_kicking(data)
|
31
|
+
return 0 if data.empty?
|
32
|
+
data['xpmade'] + (data['fgm'] * 3) - (data['fga'] - data['fgm'])
|
33
|
+
end
|
34
|
+
|
35
|
+
def calculate_fumbles(data)
|
36
|
+
return 0 if data.empty?
|
37
|
+
data['lost'] * -2
|
38
|
+
end
|
39
|
+
|
40
|
+
def find_or_create_statline(player)
|
41
|
+
STAT_LINE[player['gsid']] ||= {}
|
42
|
+
|
43
|
+
player['stat_categories'].each do |stat|
|
44
|
+
STAT_LINE[player['gsid']][stat] ||= {}
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def print_player_feed(player)
|
49
|
+
return if bye_week?(player)
|
50
|
+
|
51
|
+
player_gsid = player['gsid']
|
52
|
+
team = TEAMS[player['team']]
|
53
|
+
primary_color = team['primary_color']
|
54
|
+
secondary_color = team['secondary_color']
|
55
|
+
STAT_CACHE[player_gsid] = {}
|
56
|
+
eid = JSON.parse(CURRENT_GAMES)[player['team']]['eid']
|
57
|
+
|
58
|
+
loop.with_index do |_, i|
|
59
|
+
begin
|
60
|
+
data = Net::HTTP.get_response(URI.parse("http://www.nfl.com/liveupdate/game-center/#{eid}/#{eid}_gtd.json")).body
|
61
|
+
JSON.parse(data)[eid]['drives'].each do |drive_key, drive_value|
|
62
|
+
STAT_CACHE[player_gsid][drive_key] ||= {}
|
63
|
+
|
64
|
+
next if drive_key == 'crntdrv'
|
65
|
+
drive_value['plays'].each do |play_key, play_value|
|
66
|
+
next if STAT_CACHE[player_gsid][drive_key][play_key]
|
67
|
+
STAT_CACHE[player_gsid][drive_key][play_key] = play_value['desc']
|
68
|
+
|
69
|
+
next unless play_value['players'][player_gsid]
|
70
|
+
puts Paint[play_value['desc'], secondary_color, primary_color, :bright]
|
71
|
+
player['stat_categories'].each do |stat_category|
|
72
|
+
updated_statline(player, data, stat_category)
|
73
|
+
end
|
74
|
+
updated_fantasy_points(player)
|
75
|
+
end
|
76
|
+
end
|
77
|
+
rescue
|
78
|
+
i.zero? && (puts "#{player['full_name']}'s game has not yet started")
|
79
|
+
end
|
80
|
+
sleep 30
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
def print_stats
|
85
|
+
threads = []
|
86
|
+
CURRENT_TEAM.each do |player|
|
87
|
+
threads << Thread.new(player) do |my_player|
|
88
|
+
find_or_create_statline(my_player)
|
89
|
+
print_player_feed(my_player)
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
threads.each(&:join)
|
94
|
+
end
|
95
|
+
|
96
|
+
def stat_categories(pos)
|
97
|
+
categories = case pos
|
98
|
+
when 'QB' then { 'stat_categories' => %w[passing rushing fumbles] }
|
99
|
+
when 'K' then { 'stat_categories' => %w[kicking] }
|
100
|
+
when 'TE' then { 'stat_categories' => %w[receiving fumbles] }
|
101
|
+
else { 'stat_categories' => %w[receiving rushing fumbles] }
|
102
|
+
end
|
103
|
+
categories
|
104
|
+
end
|
105
|
+
|
106
|
+
def updated_fantasy_points(player)
|
107
|
+
points = 0
|
108
|
+
STAT_LINE[player['gsid']].each do |k,v|
|
109
|
+
points += calculate_points(k, v)
|
110
|
+
end
|
111
|
+
STAT_LINE[player['gsid']]['fantasy_points'] = points
|
112
|
+
puts "#{player['full_name']}: #{'%g' % ('%.1f' % points)} fantasy points"
|
113
|
+
end
|
114
|
+
|
115
|
+
def updated_statline(player, data, stat_category)
|
116
|
+
player_name = "#{player['first_name'][0]}.#{player['last_name']}"
|
117
|
+
player_gsid = player['gsid']
|
118
|
+
eid = JSON.parse(CURRENT_GAMES)[player['team']]['eid']
|
119
|
+
location = JSON.parse(CURRENT_GAMES)[player['team']]['location']
|
120
|
+
team_stat_category = JSON.parse(data)[eid][location]['stats'][stat_category]
|
121
|
+
return if team_stat_category.nil?
|
122
|
+
player_data = team_stat_category[player_gsid]
|
123
|
+
return if player_data.nil?
|
124
|
+
|
125
|
+
STAT_LINE[player_gsid] ||= {}
|
126
|
+
STAT_LINE[player_gsid][stat_category] = player_data
|
127
|
+
|
128
|
+
result = case stat_category
|
129
|
+
when 'passing' then "#{player_name}: #{player_data['cmp']}/#{player_data['att']} for #{player_data['yds']} yards with #{player_data['tds']} touchdowns and #{player_data['ints']} interceptions"
|
130
|
+
when 'rushing' then "#{player_name}: #{player_data['att']} attempts for #{player_data['yds']} yards and #{player_data['tds']} touchdowns"
|
131
|
+
when 'receiving' then "#{player_name}: #{player_data['rec']} receptions for #{player_data['yds']} yards and #{player_data['tds']} touchdowns"
|
132
|
+
when 'kicking' then "#{player_name}: #{player_data['fgm']}/#{player_data['fga']} in FGs and #{player_data['xpmade']}/#{player_data['xpa']} in extra points"
|
133
|
+
when 'fumbles' then "#{player_name}: #{player_data['lost']} fumble lost"
|
134
|
+
else ''
|
135
|
+
end
|
136
|
+
puts result
|
137
|
+
end
|
metadata
ADDED
@@ -0,0 +1,123 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: fantasy_foobar
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.4
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Chris Garvin
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2017-12-14 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: nfl_data
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.0.12
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.0.12
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: paint
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: bundler
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '1.15'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '1.15'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rake
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '10.0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '10.0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rspec
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '3.0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '3.0'
|
83
|
+
description:
|
84
|
+
email:
|
85
|
+
- chris.garvin@me.com
|
86
|
+
executables:
|
87
|
+
- fantasy_foobar
|
88
|
+
extensions: []
|
89
|
+
extra_rdoc_files: []
|
90
|
+
files:
|
91
|
+
- exe/fantasy_foobar
|
92
|
+
- lib/fantasy_foobar.rb
|
93
|
+
- lib/fantasy_foobar/app_flow.rb
|
94
|
+
- lib/fantasy_foobar/data/teams.json
|
95
|
+
- lib/fantasy_foobar/kickers_included.rb
|
96
|
+
- lib/fantasy_foobar/players.rb
|
97
|
+
- lib/fantasy_foobar/stats.rb
|
98
|
+
- lib/fantasy_foobar/version.rb
|
99
|
+
homepage: https://www.github.com/chrisgarvin/fantasy_foobar
|
100
|
+
licenses:
|
101
|
+
- MIT
|
102
|
+
metadata: {}
|
103
|
+
post_install_message:
|
104
|
+
rdoc_options: []
|
105
|
+
require_paths:
|
106
|
+
- lib
|
107
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
108
|
+
requirements:
|
109
|
+
- - ">="
|
110
|
+
- !ruby/object:Gem::Version
|
111
|
+
version: '0'
|
112
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
113
|
+
requirements:
|
114
|
+
- - ">="
|
115
|
+
- !ruby/object:Gem::Version
|
116
|
+
version: '0'
|
117
|
+
requirements: []
|
118
|
+
rubyforge_project:
|
119
|
+
rubygems_version: 2.7.3
|
120
|
+
signing_key:
|
121
|
+
specification_version: 4
|
122
|
+
summary: Live console view of your Fantasy Football teams stats
|
123
|
+
test_files: []
|