nba 0.0.2 → 0.0.3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 91a5381ea2ab0af2822bd27dbe4d0e12ec4514c7
4
- data.tar.gz: b90e24f82c2e1dd024b59c2299a32e8afc46597e
3
+ metadata.gz: a6edbb764b7db372af336943c23f327892f69201
4
+ data.tar.gz: 309776fcc0d7a86217ed7db6f8fa00173e5c7976
5
5
  SHA512:
6
- metadata.gz: 63791f32a033ad8bcf725c38bbc3150453bbd2669a974edcd02679980087de0fd5f6b3e6c6b14a2c8fa9587b02f93398e293048f6355047aca09f76cc0bede73
7
- data.tar.gz: f4f92cc7eaac36c0bfa2c8d09e670500d1f0289924867e88ee480575ad904e7f7db8437609003dec0e51077e740a94fad0a3c012a279598bc70e617ec0bc866d
6
+ metadata.gz: a38f60de34c804ac8a240cadefefe6ea30d7921bb090267d83887e16b8de6b58f0d0a7d7b6e661e5cb7eeb3244f1d6239683742c59f494f92133174d57a841bb
7
+ data.tar.gz: f4a54d4f3f5993beff2314655b1d37117781547d25e99844888d1e65916eaa31de8393a69137ff59f7b4ec7d7b1cc7a1aae32483ad78f698d87dd637108a6a3c
data/README.md CHANGED
@@ -6,7 +6,7 @@
6
6
  [gem]: https://rubygems.org/gems/nba
7
7
  [travis]: https://travis-ci.org/larrylv/nba
8
8
 
9
- NBA.rb is a Ruby library for retrieving NBA League players, teams and divisions.
9
+ NBA.rb is a Ruby library for retrieving NBA League games, schedules, teams and players.
10
10
 
11
11
  Insipred by [@sferik][sferik]'s [MLB.rb][mlb].
12
12
 
@@ -19,8 +19,17 @@ Insipred by [@sferik][sferik]'s [MLB.rb][mlb].
19
19
  ## Usage Examples
20
20
  $ irb
21
21
  >> require 'nba'
22
+ >> NBA::Game.all '20140102'
23
+ # => Final/OT - Cavaliers 87 : 81 Magic
24
+ # => Final - Heat 114 : 123 Warriors
25
+ # => Final - Bulls 94 : 82 Celtics
26
+ # => Final - Thunder 93 : 95 Nets
27
+ # => Final - Spurs 101 : 105 Knicks
28
+ # => Final - Suns 91 : 99 Grizzlies
29
+ # => Final - Jazz 96 : 87 Bucks
30
+ # => Final - Trail Blazers 134 : 104 Bobcats
31
+ # => Final - Kings 104 : 113 76ers
22
32
  >> NBA::Team.all.first.name # => "Atlanta Hawks"
23
- >> NBA::Team.all.first.division # => "Southeast Division"
24
33
  >> NBA::Team.all.first.founded # => 1946
25
34
  >> NBA::Team.all.first.players.first.name # => "Al Horford"
26
35
  >> NBA::Team.all.first.players.first.number # => 15
data/Rakefile CHANGED
@@ -9,10 +9,8 @@ namespace :cache do
9
9
  require 'nba'
10
10
  desc 'Update the teams file cache'
11
11
  task :update do
12
- doc = NBA::Team.results_from_freebase(true)
13
- File.open('cache/teams.json', 'w') do |file|
14
- file.write(doc.body)
15
- end
12
+ doc = NBA::Team.results_from_freebase
13
+ File.write('cache/teams.json', JSON.pretty_generate(doc))
16
14
  end
17
15
  end
18
16
 
@@ -0,0 +1,29 @@
1
+ require 'faraday_middleware/response_middleware'
2
+ require 'nokogiri'
3
+
4
+ module FaradayMiddleware
5
+ class ScrapeGame < ResponseMiddleware
6
+ define_parser do |body|
7
+ doc = Nokogiri::HTML.parse body
8
+ doc.css('.score-row .mod-content').inject([]) do |results, game_node|
9
+ home_team_node = game_node.css('.home').first
10
+ home_team = home_team_node.css('p.team-name').first.search('a').first.content
11
+ home_score = home_team_node.css('.finalScore').first.content
12
+
13
+ away_team_node = game_node.css('.away').first
14
+ away_team = away_team_node.css('p.team-name').first.search('a').first.content
15
+ away_score = away_team_node.css('.finalScore').first.content
16
+
17
+ status = game_node.css('.game-status').first.search('p').first.content
18
+
19
+ results << {
20
+ :home_team => home_team,
21
+ :home_score => (home_score.strip rescue ''),
22
+ :away_team => away_team,
23
+ :away_score => (away_score.strip rescue ''),
24
+ :status => status
25
+ }
26
+ end
27
+ end
28
+ end
29
+ end
data/lib/nba.rb CHANGED
@@ -1,3 +1,4 @@
1
1
  require 'nba/request'
2
2
  require 'nba/team'
3
3
  require 'nba/player'
4
+ require 'nba/game'
@@ -0,0 +1,60 @@
1
+ module NBA
2
+ class Game
3
+ attr_reader :home_team, :home_score, :away_team, :away_score, :status
4
+
5
+ # Returns an array of Team objects
6
+ #
7
+ # @example
8
+ # NBA::Game.all '20140102'
9
+ # >> Final/OT - Cavaliers 87 : 81 Magic
10
+ # >> Final - Heat 114 : 123 Warriors
11
+ # >> Final - Bulls 94 : 82 Celtics
12
+ # >> Final - Thunder 93 : 95 Nets
13
+ # >> Final - Spurs 101 : 105 Knicks
14
+ # >> Final - Suns 91 : 99 Grizzlies
15
+ # >> Final - Jazz 96 : 87 Bucks
16
+ # >> Final - Trail Blazers 134 : 104 Bobcats
17
+ # >> Final - Kings 104 : 113 76ers
18
+ def self.all(date = (Time.now.utc - 5 * 60 * 60).strftime("%Y%m%d"))
19
+ games = results_to_game(results_from_espn(date))
20
+ print(games)
21
+ end
22
+
23
+ def pretty_format(options = {})
24
+ self.status.center(options[:status_length].to_i + 1) + " - " + \
25
+ self.home_team.center(options[:home_length].to_i + 1) + " " + \
26
+ (self.home_score =~ /\d/ ? self.home_score.center(4) : "") + " : " + \
27
+ (self.away_score =~ /\d/ ? self.away_score.center(4) : "") + " " + \
28
+ self.away_team.center(options[:away_length].to_i + 1)
29
+ end
30
+
31
+ private
32
+ def initialize(attributes = {})
33
+ attributes.each do |key, value|
34
+ instance_variable_set("@#{key}", value) if self.respond_to?(key)
35
+ end
36
+ end
37
+
38
+ def self.length_options_of(games)
39
+ {
40
+ :status_length => games.map(&:status).map(&:length).max,
41
+ :home_length => games.map(&:home_team).map(&:length).max,
42
+ :away_length => games.map(&:away_team).map(&:length).max,
43
+ }
44
+ end
45
+
46
+ def self.print(games)
47
+ length_options = length_options_of(games)
48
+ puts games.map { |game| game.pretty_format(length_options) }.join("\n")
49
+ end
50
+
51
+ def self.results_to_game(results)
52
+ results.map { |result| new result }
53
+ end
54
+
55
+ def self.results_from_espn(date)
56
+ options = {:date => date}
57
+ Request.get_games('/nba/scoreboard', options)
58
+ end
59
+ end
60
+ end
@@ -1,23 +1,35 @@
1
1
  require 'faraday'
2
2
  require 'faraday_middleware'
3
+ require 'faraday_middleware/scrape_game'
3
4
 
4
5
  module NBA
5
6
  # @private
6
7
  class Request
7
- # Perform an HTTP GET request
8
- def self.get(path, options = {}, raw = false)
9
- response = connection(raw).get do |request|
8
+ def self.get_teams(path, options = {})
9
+ freebase_connection.get do |request|
10
10
  request.url(path, options)
11
- end
12
- raw ? response : response.body
11
+ end.body
12
+ end
13
+
14
+ def self.get_games(path, options = {})
15
+ espn_connection.get do |request|
16
+ request.url(path, options)
17
+ end.body
13
18
  end
14
19
 
15
20
  private
16
21
 
17
- def self.connection(raw = false)
22
+ def self.freebase_connection
18
23
  Faraday.new(:url => 'https://www.googleapis.com', :ssl => {:verify => false}) do |builder|
19
24
  builder.request :url_encoded
20
- builder.use FaradayMiddleware::ParseJson unless raw
25
+ builder.use FaradayMiddleware::ParseJson
26
+ builder.adapter Faraday.default_adapter
27
+ end
28
+ end
29
+
30
+ def self.espn_connection
31
+ Faraday.new(:url => 'http://scores.espn.go.com') do |builder|
32
+ builder.use FaradayMiddleware::ScrapeGame
21
33
  builder.adapter Faraday.default_adapter
22
34
  end
23
35
  end
@@ -1,8 +1,8 @@
1
- require 'faraday'
2
-
3
1
  module NBA
4
2
  class Team
5
- attr_reader :name, :founded, :conference, :division, :championships, :players
3
+ attr_reader :name, :founded, :conference, :division, :championships, :players, :head_coach, :team_stats
4
+
5
+ alias :coach :head_coach
6
6
 
7
7
  # Returns an array of Team objects
8
8
  #
@@ -35,9 +35,9 @@ module NBA
35
35
  end
36
36
  end
37
37
 
38
- def self.results_from_freebase(raw = false)
38
+ def self.results_from_freebase
39
39
  options = {:query => mql_query}
40
- Request.get('/freebase/v1/mqlread', options, raw)
40
+ Request.get_teams('/freebase/v1/mqlread', options)
41
41
  end
42
42
 
43
43
  def self.results_from_cache
@@ -50,18 +50,16 @@ module NBA
50
50
 
51
51
  def self.results_to_team(results)
52
52
  results['result'].map do |result|
53
- founded = result['/sports/sports_team/founded']
54
- conference = result['/basketball/basketball_team/conference']
55
- division = result['/basketball/basketball_team/division']
56
- championships = result['/sports/sports_team/championships']
57
53
  players = result['/sports/sports_team/roster']
58
54
 
59
55
  new(
60
56
  :name => result['name'],
61
- :founded => founded,
62
- :conference => conference,
63
- :division => division,
64
- :championships => championships,
57
+ :conference => result['/basketball/basketball_team/conference'],
58
+ :division => result['/basketball/basketball_team/division'],
59
+ :head_coach => result['/basketball/basketball_team/head_coach'],
60
+ :team_stats => result['/basketball/basketball_team/team_stats'],
61
+ :founded => result['/sports/sports_team/founded'],
62
+ :championships => result['/sports/sports_team/championships'],
65
63
  :players => (players ? Player.all_from_roster(players) : [])
66
64
  )
67
65
  end
@@ -73,11 +71,10 @@ module NBA
73
71
  [{
74
72
  "name": null,
75
73
  "mid": null,
76
- "/sports/sports_team/founded": null,
77
- "/common/topic/image": [],
78
74
  "/basketball/basketball_team/head_coach": null,
79
75
  "/basketball/basketball_team/conference": null,
80
76
  "/basketball/basketball_team/division": null,
77
+ "/sports/sports_team/founded": null,
81
78
  "/sports/sports_team/championships": [],
82
79
  "/sports/sports_team/roster": [{
83
80
  "number": null,
@@ -87,6 +84,12 @@ module NBA
87
84
  "position": [],
88
85
  "sort": "player"
89
86
  }],
87
+ "/basketball/basketball_team/team_stats": [{
88
+ "optional": true,
89
+ "season": null,
90
+ "wins": null,
91
+ "losses": null
92
+ }],
90
93
  "sort": "name",
91
94
  "type": "/basketball/basketball_team",
92
95
  "/sports/sports_team/league": [{
@@ -1,3 +1,3 @@
1
1
  module Nba
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
@@ -8,7 +8,7 @@ Gem::Specification.new do |spec|
8
8
  spec.version = Nba::VERSION
9
9
  spec.authors = ["Larry Lv"]
10
10
  spec.email = ["larrylv1990@gmail.com"]
11
- spec.summary = %q{NBA.rb is a Ruby library for retrieving NBA League players, teams and divisions}
11
+ spec.summary = %q{NBA.rb is a Ruby library for retrieving NBA League games, schedules, teams and players.}
12
12
  spec.description = spec.summary
13
13
  spec.homepage = ""
14
14
  spec.license = "MIT"
@@ -20,7 +20,8 @@ Gem::Specification.new do |spec|
20
20
 
21
21
  spec.add_runtime_dependency 'faraday', ['~> 0.8', '< 0.10']
22
22
  spec.add_runtime_dependency 'faraday_middleware', '~> 0.9'
23
- spec.add_dependency 'json', '~> 1.8'
23
+ spec.add_runtime_dependency 'json', '~> 1.8'
24
+ spec.add_runtime_dependency 'nokogiri', '~> 1.6.1'
24
25
 
25
26
  spec.add_development_dependency "bundler", "~> 1.5"
26
27
  end
@@ -22,7 +22,7 @@ describe NBA::Team, '.all' do
22
22
 
23
23
  it 'returns the correct player results' do
24
24
  teams = NBA::Team.all
25
- expect(teams.first.players.first.name).to eq 'Al Horford'
25
+ expect(teams.first.players.first.name).to_not be_nil
26
26
  end
27
27
  end
28
28
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nba
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Larry Lv
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-01-02 00:00:00.000000000 Z
11
+ date: 2014-01-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -58,6 +58,20 @@ dependencies:
58
58
  - - "~>"
59
59
  - !ruby/object:Gem::Version
60
60
  version: '1.8'
61
+ - !ruby/object:Gem::Dependency
62
+ name: nokogiri
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: 1.6.1
68
+ type: :runtime
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: 1.6.1
61
75
  - !ruby/object:Gem::Dependency
62
76
  name: bundler
63
77
  requirement: !ruby/object:Gem::Requirement
@@ -72,8 +86,8 @@ dependencies:
72
86
  - - "~>"
73
87
  - !ruby/object:Gem::Version
74
88
  version: '1.5'
75
- description: NBA.rb is a Ruby library for retrieving NBA League players, teams and
76
- divisions
89
+ description: NBA.rb is a Ruby library for retrieving NBA League games, schedules,
90
+ teams and players.
77
91
  email:
78
92
  - larrylv1990@gmail.com
79
93
  executables: []
@@ -84,11 +98,12 @@ files:
84
98
  - ".travis.yml"
85
99
  - Gemfile
86
100
  - LICENSE.md
87
- - LICENSE.txt
88
101
  - README.md
89
102
  - Rakefile
90
103
  - cache/teams.json
104
+ - lib/faraday_middleware/scrape_game.rb
91
105
  - lib/nba.rb
106
+ - lib/nba/game.rb
92
107
  - lib/nba/player.rb
93
108
  - lib/nba/request.rb
94
109
  - lib/nba/team.rb
@@ -119,7 +134,8 @@ rubyforge_project:
119
134
  rubygems_version: 2.2.0
120
135
  signing_key:
121
136
  specification_version: 4
122
- summary: NBA.rb is a Ruby library for retrieving NBA League players, teams and divisions
137
+ summary: NBA.rb is a Ruby library for retrieving NBA League games, schedules, teams
138
+ and players.
123
139
  test_files:
124
140
  - spec/nba_spec.rb
125
141
  - spec/spec_helper.rb
@@ -1,22 +0,0 @@
1
- Copyright (c) 2014 Larry Lv
2
-
3
- MIT License
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining
6
- a copy of this software and associated documentation files (the
7
- "Software"), to deal in the Software without restriction, including
8
- without limitation the rights to use, copy, modify, merge, publish,
9
- distribute, sublicense, and/or sell copies of the Software, and to
10
- permit persons to whom the Software is furnished to do so, subject to
11
- the following conditions:
12
-
13
- The above copyright notice and this permission notice shall be
14
- included in all copies or substantial portions of the Software.
15
-
16
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
- EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
- NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
- LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
- OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
- WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.