espn_rb 0.0.4 → 0.0.5
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.
- data/README.md +67 -22
- data/lib/espn_rb.rb +1 -0
- data/lib/espn_rb/headline.rb +2 -2
- data/lib/espn_rb/headline_image.rb +68 -0
- data/lib/espn_rb/headline_item.rb +39 -8
- data/lib/espn_rb/headline_response.rb +13 -10
- data/lib/espn_rb/version.rb +1 -1
- data/spec/espn_rb_spec.rb +4 -0
- metadata +3 -2
data/README.md
CHANGED
@@ -1,16 +1,16 @@
|
|
1
1
|
# EspnRb
|
2
2
|
|
3
|
-
A ruby wrapper for the ESPN api. It allows you to interact, in a semantically pleasing way, with the ESPN api. Currently it only allows access to the publicly available Headline API which can be found [here](http://developer.espn.com/docs/headlines). I am working to bring more of ESPN's features to espn_rb. While I do that I'll try to keep this document updated to its current functionality. That said, I hope you enjoy.
|
3
|
+
A ruby wrapper for the ESPN api. It allows you to interact, in a semantically pleasing way, with the ESPN api. Currently it only allows access to the publicly available Headline API which can be found [here](http://developer.espn.com/docs/headlines). I am working to bring more of ESPN's features to espn_rb. While I do that I'll try to keep this document updated to its current functionality. That said, I hope you enjoy.
|
4
4
|
|
5
|
-
|
5
|
+
 in mind. ^_^
|
6
6
|
|
7
|
-
|
7
|
+
## Installation
|
8
8
|
|
9
9
|
Add this line to your application's Gemfile:
|
10
|
-
|
11
|
-
gem
|
12
|
-
|
13
|
-
In order to use espn_rb you need to first get an API key from ESPN [ESPN api request](http://developer.espn.com/member/register). Once you've gotten that squared away you can use the public requests straight away.
|
10
|
+
|
11
|
+
gem "espn_rb"
|
12
|
+
|
13
|
+
In order to use espn_rb you need to first get an API key from ESPN [ESPN api request](http://developer.espn.com/member/register). Once you've gotten that squared away you can use the public requests straight away.
|
14
14
|
|
15
15
|
|
16
16
|
## Set your API key
|
@@ -18,7 +18,7 @@ In order to use espn_rb you need to first get an API key from ESPN [ESPN api req
|
|
18
18
|
The easiest way to set your api key for use with espn_rb is to export it as an environment variable. Do that like so:
|
19
19
|
|
20
20
|
```sh
|
21
|
-
$ export espn_api_key=YOUR_SUPER_SECRET_API_KEY
|
21
|
+
$ export espn_api_key=YOUR_SUPER_SECRET_API_KEY
|
22
22
|
```
|
23
23
|
|
24
24
|
If you want to pass it in to your objects you may do so explicitly like so:
|
@@ -27,7 +27,7 @@ If you want to pass it in to your objects you may do so explicitly like so:
|
|
27
27
|
espn = EspnRb.headlines(:api_key => YOUR_SUPER_SECRET_API_KEY)
|
28
28
|
```
|
29
29
|
|
30
|
-
For the sake of simplicity all my examples will assume that you have exported the API key as an environment variable.
|
30
|
+
For the sake of simplicity all my examples will assume that you have exported the API key as an environment variable.
|
31
31
|
|
32
32
|
## Espn Headines
|
33
33
|
|
@@ -40,22 +40,44 @@ require 'espn_rb'
|
|
40
40
|
espn = Espn.headlines
|
41
41
|
|
42
42
|
espn.all
|
43
|
+
#=> HeadlineResponse
|
43
44
|
```
|
44
45
|
|
45
46
|
Which will return an HeadlineResponse object.
|
46
47
|
|
47
|
-
#### Get ESPN response as
|
48
|
+
#### Get ESPN response as a hash
|
48
49
|
|
49
50
|
To get the response straight from the horses' mouth:
|
50
51
|
|
51
52
|
```ruby
|
52
53
|
# from above
|
53
|
-
|
54
|
+
|
54
55
|
espn.all.response
|
55
|
-
#=> ESPN's response string as
|
56
|
+
#=> ESPN's response string as a hash
|
56
57
|
```
|
57
58
|
|
58
|
-
The raw response from ESPN will give you the top ten stories meeting your criteria.
|
59
|
+
The raw response from ESPN will give you the top ten stories meeting your criteria.
|
60
|
+
|
61
|
+
### HeadlineResponse
|
62
|
+
|
63
|
+
Now includes Enumerable which allows you to treat the HeadlineResponse as an iterable object.
|
64
|
+
|
65
|
+
```ruby
|
66
|
+
espn = EspnRb.headlines
|
67
|
+
espn.all.map(&:title)
|
68
|
+
|
69
|
+
#=> ["Celtics-Clippers Preview",
|
70
|
+
# "Warriors 97, Clippers 93",
|
71
|
+
# "Hawks 106, Kings 99",
|
72
|
+
# "Warriors-Clippers, Box",
|
73
|
+
# "Warriors 97, Clippers 93",
|
74
|
+
# "Hawks 106, Kings 99",
|
75
|
+
# "Bucks-Nets Preview",
|
76
|
+
# "Hawks-Kings, Box",
|
77
|
+
# "Grizzlies 94, Nuggets 91",
|
78
|
+
# "Grizzlies-Nuggets, Box"]
|
79
|
+
|
80
|
+
```
|
59
81
|
|
60
82
|
#### Collections
|
61
83
|
|
@@ -66,9 +88,9 @@ Since the above response is a basic collection and each headline share many comm
|
|
66
88
|
|
67
89
|
# Available methods are [headlines descriptions sources bylines types]
|
68
90
|
|
69
|
-
espn.all.response.titles
|
91
|
+
espn.all.response.titles
|
70
92
|
#=> ["array", "of", "ESPN", "titles"]
|
71
|
-
|
93
|
+
|
72
94
|
espn.all.response.descriptions
|
73
95
|
#=> ["array", "of", "ESPN", "descriptions"]
|
74
96
|
|
@@ -84,26 +106,49 @@ espn = EspnRb.headlines
|
|
84
106
|
|
85
107
|
espn.nba(:news) #=> HeadlineResponse
|
86
108
|
espn.nba(:top) #=> HeadlineResponse
|
87
|
-
espn.nba(
|
109
|
+
espn.nba(:for_date => "2012-03-09") #=> HeadlineResponse # Will include all stories for that date
|
110
|
+
espn.nba(:for_athlete => "1234") #=> HeadlineResponse # Will include all stories for that athleteId
|
88
111
|
|
89
112
|
```
|
90
113
|
|
91
|
-
|
114
|
+
### HeadlineItem
|
92
115
|
|
93
|
-
The HeadlineResponse Object holdes in it the headlines split into HeadlineItems. Here is where you can get Specific information about each story.
|
116
|
+
The HeadlineResponse Object holdes in it the headlines split into HeadlineItems. Here is where you can get Specific information about each story. Some of the options are:
|
94
117
|
|
95
118
|
```ruby
|
96
119
|
espn = EspnRb.headlines
|
97
|
-
|
120
|
+
headline_item = espn.nba[2] #=> HeadlineItem
|
98
121
|
|
99
|
-
|
100
|
-
|
101
|
-
|
122
|
+
headline_item.web_url #=> "http://sports.espn.go.com/espn/wire?section=nba&id=7664408&ex_cid=espnapi_public"
|
123
|
+
headline_item.id #=> 7664408
|
124
|
+
headline_item.title #=> "Mavericks-Kings Preview"
|
125
|
+
headline_item.athletes #=> ["Johnny B", "Freddie Flintstone", "Etc"]
|
126
|
+
headline_item.leagues #=> ["46"]
|
127
|
+
headline_item.athlete_ids #=> ["123", "132", "123"]
|
102
128
|
|
103
129
|
# More to come in future versions.
|
104
130
|
headline_response.headline #=> JSON hash from original response.
|
105
131
|
```
|
106
132
|
|
133
|
+
HeadlineItem will now also respond to #images which will return an HeadlineResponse::HeadlineItem::Images class which contains the images associated with the HeadlineItem in a class that is also enumerable which lets you access the images with nice little methods like:
|
134
|
+
|
135
|
+
```ruby
|
136
|
+
espn = EspnRb.headlines
|
137
|
+
headline_item = espn.nfl[2]
|
138
|
+
|
139
|
+
headline_item.images => HeadlineResponse::HeadlineItem::Images
|
140
|
+
|
141
|
+
# or to actually use the images
|
142
|
+
|
143
|
+
images = headline_item.images
|
144
|
+
|
145
|
+
images.first.landscape #=> true
|
146
|
+
images.first.url #=> http://path-to-img.com/blah-blah-blah
|
147
|
+
|
148
|
+
# or list all the urls
|
149
|
+
|
150
|
+
images.map(&:url) #=> ["list", "of", "image", "urls"]
|
151
|
+
```
|
107
152
|
#### HELP
|
108
153
|
|
109
154
|
```ruby
|
data/lib/espn_rb.rb
CHANGED
data/lib/espn_rb/headline.rb
CHANGED
@@ -33,7 +33,7 @@ module EspnRb
|
|
33
33
|
end
|
34
34
|
|
35
35
|
# This will define singleton methods for all resources defined
|
36
|
-
# in EspnRb::Headline
|
36
|
+
# in EspnRb::Headline#api_resources
|
37
37
|
#
|
38
38
|
# @return [HeadlineResponse] which contains the espn response object and assocated methods.
|
39
39
|
def create_headline_methods
|
@@ -86,7 +86,7 @@ module EspnRb
|
|
86
86
|
api_methods[:for_athlete][:url].gsub(":athleteId", opt[:for_athlete])
|
87
87
|
end
|
88
88
|
|
89
|
-
# Takes EspnRb::Headline
|
89
|
+
# Takes EspnRb::Headline#api_methods[:for_date][:url] and subs out the options passed by user
|
90
90
|
# @example internal call
|
91
91
|
# for_date({:for_date => "2012-01-01"}) => '/news/dates/20120101'
|
92
92
|
def for_date(opt)
|
@@ -0,0 +1,68 @@
|
|
1
|
+
class HeadlineResponse
|
2
|
+
class HeadlineItem
|
3
|
+
class Images
|
4
|
+
include Enumerable
|
5
|
+
attr_reader :images
|
6
|
+
|
7
|
+
def initialize(images)
|
8
|
+
@images = images.map {|img| Image.new img }
|
9
|
+
end
|
10
|
+
|
11
|
+
def each &block
|
12
|
+
@images.each &block
|
13
|
+
end
|
14
|
+
|
15
|
+
def [](int)
|
16
|
+
@images[int]
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
class Image
|
21
|
+
attr_reader :image
|
22
|
+
|
23
|
+
def initialize(image)
|
24
|
+
@image = image
|
25
|
+
end
|
26
|
+
|
27
|
+
# returns true if the image is landscape oriented.
|
28
|
+
def landscape?
|
29
|
+
@image["width"] > @image["height"]
|
30
|
+
end
|
31
|
+
|
32
|
+
# returns true if the image is portrait oriented.
|
33
|
+
def portrait?
|
34
|
+
!landscape?
|
35
|
+
end
|
36
|
+
|
37
|
+
# returns caption of image
|
38
|
+
def caption
|
39
|
+
@image["caption"]
|
40
|
+
end
|
41
|
+
|
42
|
+
# returns name of image
|
43
|
+
def name
|
44
|
+
@image["name"]
|
45
|
+
end
|
46
|
+
|
47
|
+
# returns url of image
|
48
|
+
def url
|
49
|
+
@image["url"]
|
50
|
+
end
|
51
|
+
|
52
|
+
# returns credit (attribution) of image
|
53
|
+
def credit
|
54
|
+
@image["credit"]
|
55
|
+
end
|
56
|
+
|
57
|
+
# returns width of image
|
58
|
+
def width
|
59
|
+
@image["width"]
|
60
|
+
end
|
61
|
+
|
62
|
+
# returns height of image
|
63
|
+
def height
|
64
|
+
@image["height"]
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
@@ -7,7 +7,7 @@ class HeadlineResponse
|
|
7
7
|
end
|
8
8
|
|
9
9
|
# @example
|
10
|
-
# espn = EspnRb
|
10
|
+
# espn = EspnRb.headlines
|
11
11
|
# espn.nba.first.web_url => "http://some-valid-nba-article"
|
12
12
|
# @return [String] web_url for Item
|
13
13
|
def web_url(mobile=false)
|
@@ -15,24 +15,55 @@ class HeadlineResponse
|
|
15
15
|
end
|
16
16
|
|
17
17
|
# @example
|
18
|
-
# espn = EspnRb
|
18
|
+
# espn = EspnRb.headlines
|
19
19
|
# espn.ncaa_football.first.title => "Gators Win!!"
|
20
20
|
# @return [String] title for Item
|
21
21
|
def title
|
22
22
|
@headline["headline"]
|
23
23
|
end
|
24
24
|
|
25
|
+
# @example
|
26
|
+
# espn = EspnRb.headlines
|
27
|
+
# espn.ncaa_football.first.description => "Some string about what happened in the article."
|
28
|
+
# @return [String] description for Item
|
29
|
+
def description
|
30
|
+
@headline["description"]
|
31
|
+
end
|
32
|
+
|
33
|
+
# @example
|
34
|
+
# espn = EspnRb.headlines
|
35
|
+
# espn.ncaa_football.first.source => "Page 2"
|
36
|
+
# @return [String] source for Item
|
37
|
+
def source
|
38
|
+
@headline["source"]
|
39
|
+
end
|
40
|
+
|
41
|
+
# @example
|
42
|
+
# espn = EspnRb.headlines
|
43
|
+
# espn.ncaa_football.first.last_modified => "2012-03-16T04:07:56Z"
|
44
|
+
# @return [String] title for Item
|
45
|
+
def last_modified
|
46
|
+
@headline["lastModified"]
|
47
|
+
end
|
48
|
+
|
49
|
+
# @example
|
50
|
+
# espn = EspnRb.headlines
|
51
|
+
# espn.ncaa_football.first.last_modified => "2012-03-16T04:07:56Z"
|
52
|
+
# @return [Images] Images class containing the collection of images associated with the item.
|
53
|
+
def images
|
54
|
+
Images.new @headline["images"]
|
55
|
+
end
|
25
56
|
|
26
57
|
# @example
|
27
|
-
# espn = EspnRb
|
28
|
-
# espn.ncaa_football.first.id => 1234
|
58
|
+
# espn = EspnRb.headlines
|
59
|
+
# espn.ncaa_football.first.id => '1234'
|
29
60
|
# @return [Integer] id for Item
|
30
61
|
def id
|
31
62
|
@headline["id"]
|
32
63
|
end
|
33
64
|
|
34
65
|
# @example
|
35
|
-
# espn = EspnRb
|
66
|
+
# espn = EspnRb.headlines
|
36
67
|
# espn.nba.first.api_url => "http://some-valid-nba-article"
|
37
68
|
# @return [String] api_url for Item
|
38
69
|
def api_url
|
@@ -47,7 +78,7 @@ class HeadlineResponse
|
|
47
78
|
# Provides access to categories sub-hash. If available
|
48
79
|
#
|
49
80
|
# @example
|
50
|
-
# espn = EspnRb
|
81
|
+
# espn = EspnRb.headlines
|
51
82
|
# espn.nba.first.athletes
|
52
83
|
# #=> ["Johnny B", "Freddie Flintstone", "Etc"]
|
53
84
|
def athletes
|
@@ -57,7 +88,7 @@ class HeadlineResponse
|
|
57
88
|
# Provides access to categories sub-hash. If available
|
58
89
|
#
|
59
90
|
# @example
|
60
|
-
# espn = EspnRb
|
91
|
+
# espn = EspnRb.headlines
|
61
92
|
# espn.nba.first.leagues
|
62
93
|
# #=> ["46"]
|
63
94
|
def leagues
|
@@ -67,7 +98,7 @@ class HeadlineResponse
|
|
67
98
|
# Provides access to categories sub-hash. If available
|
68
99
|
#
|
69
100
|
# @example
|
70
|
-
# espn = EspnRb
|
101
|
+
# espn = EspnRb.headlines
|
71
102
|
# espn.nba.first.athlete_ids
|
72
103
|
# #=> ["123", "132", "123"]
|
73
104
|
def athlete_ids
|
@@ -3,7 +3,7 @@ class HeadlineResponse
|
|
3
3
|
|
4
4
|
attr_reader :response,:responses
|
5
5
|
|
6
|
-
# Sets response from EspnRb::Headline
|
6
|
+
# Sets response from EspnRb::Headline#get_results. Splits response object into composite parts
|
7
7
|
# so that we can include enumerable
|
8
8
|
def initialize(response)
|
9
9
|
@response = @response || response
|
@@ -12,13 +12,7 @@ class HeadlineResponse
|
|
12
12
|
|
13
13
|
# define each so that Enumerable methods work properly.
|
14
14
|
def each &block
|
15
|
-
@responses.each
|
16
|
-
if block_given?
|
17
|
-
block.call response
|
18
|
-
else
|
19
|
-
yield response
|
20
|
-
end
|
21
|
-
end
|
15
|
+
@responses.each &block
|
22
16
|
end
|
23
17
|
|
24
18
|
# Allows the user to specify which HeadlineItem they'd like to work with via it's index in the @responses array
|
@@ -28,13 +22,22 @@ class HeadlineResponse
|
|
28
22
|
@responses[int]
|
29
23
|
end
|
30
24
|
|
25
|
+
# Returns the all the links associated with this HeadlineResponse
|
26
|
+
# @option options [String] :type Either web, or mobile.
|
27
|
+
# @return [Array] array of links.
|
28
|
+
def links(type=nil)
|
29
|
+
type = type.nil? ? "web" : type
|
30
|
+
@response["headlines"].map{|r| r["links"][type]["href"] }
|
31
|
+
end
|
32
|
+
|
33
|
+
|
31
34
|
# Defines a few collection methods to allow the user to view all of the @response like attributes
|
32
35
|
# @note available methods are headlines, descriptions, sources, bylines, types
|
33
36
|
#
|
34
37
|
# @example Valid method call
|
35
|
-
# EspnRb
|
38
|
+
# EspnRb.headlines.nba.titles #=> ['title1', 'title2', 'title3', 'title4', 'etc']
|
36
39
|
# @example Invalid method call
|
37
|
-
# EspnRb
|
40
|
+
# EspnRb.headlines.nba.not_an_available_method #=> nil
|
38
41
|
# @return [Array] array of like items or nil
|
39
42
|
def method_missing(sym, *args)
|
40
43
|
sym.to_s == "titles" ? sym = :headlines : sym
|
data/lib/espn_rb/version.rb
CHANGED
data/spec/espn_rb_spec.rb
CHANGED
@@ -59,6 +59,10 @@ describe EspnRb::Headline do
|
|
59
59
|
it { @espn.all[1].title.should == 'Oilers-Sharks Preview' }
|
60
60
|
it { @espn.all[1].api_url.should == 'http://api.espn.com/v1/sports/news/7651009' }
|
61
61
|
it { @espn.all[1].id.should == 7651009 }
|
62
|
+
it { @espn.all[1].title.should == "Oilers-Sharks Preview" }
|
63
|
+
it { @espn.all[1].description.should == "The San Jose Sharks are trying to reverse what's becoming a free fall through the Western Conference standings."}
|
64
|
+
it { @espn.all[1].source.should == "Associated Press"}
|
65
|
+
it { @espn.all[1].last_modified.should == "2012-03-06T06:55:01Z"}
|
62
66
|
end
|
63
67
|
|
64
68
|
context "HeadlineItem should return an array of requested entries from categories sub-hash" do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: espn_rb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-03-
|
12
|
+
date: 2012-03-22 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: A Ruby wrapper for ESPN's api.
|
15
15
|
email:
|
@@ -29,6 +29,7 @@ files:
|
|
29
29
|
- lib/espn_rb/api_definitions/headline_methods.yaml
|
30
30
|
- lib/espn_rb/api_definitions/headline_resources.yaml
|
31
31
|
- lib/espn_rb/headline.rb
|
32
|
+
- lib/espn_rb/headline_image.rb
|
32
33
|
- lib/espn_rb/headline_item.rb
|
33
34
|
- lib/espn_rb/headline_response.rb
|
34
35
|
- lib/espn_rb/utilities.rb
|