nba 0.0.2 → 0.0.3

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