netflix 0.1.0 → 0.1.1
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.rdoc +27 -24
- data/Rakefile +1 -6
- data/lib/netflix/queue.rb +6 -2
- data/test/http_fixtures/netflix_queue_responses.yml +26 -0
- data/test/http_fixtures/netflix_user_responses.yml +69 -0
- data/test/queue_test.rb +8 -0
- metadata +11 -11
data/README.rdoc
CHANGED
@@ -4,47 +4,50 @@ Copyright (c) 2012 Dean Holdren
|
|
4
4
|
To install: gem install netflix
|
5
5
|
|
6
6
|
This gem uses Netflix's OAuth REST API, you first need to register an application with Netflix at http://developer.netflix.com/apps/register/
|
7
|
+
|
7
8
|
This will provide you with a "consumer key", "consumer secret", and "application name"
|
8
9
|
|
9
10
|
=== To use unauthenticated features (catalog search):
|
10
11
|
* TODO
|
11
12
|
|
12
13
|
=== To use authenticated features (i.e. queue management):
|
13
|
-
*
|
14
|
-
|
14
|
+
* Set the consumer/developer config:
|
15
|
+
Netflix.consumer_key = <your consumer/developer key>
|
16
|
+
Netflix.consumer_secret = <your consumer/developer secret>
|
15
17
|
|
16
18
|
* Do OAuth dance: (This is a one-time per user step, save the result somewhere.)
|
17
19
|
1. Interactive (commandline/irb):
|
18
|
-
|
19
|
-
|
20
|
+
This will open a netflix.com web page to ask the user to authenticate, and provide a pin.
|
21
|
+
access_token = Netflix::Client.new.oauth
|
20
22
|
|
21
23
|
2. or Web application (Rails/Sinatra/etc), define a URL that can handle the callback
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
24
|
+
request_token, auth_url = Netflix::Client.new.oauth_via_callback(my_callback_url)
|
25
|
+
session[:request_token] = request_token
|
26
|
+
redirect_to auth_url
|
27
|
+
|
28
|
+
Then in the handler for "my_callback_url" (i.e. a Rails controller action) retrieve the :oauth_verifier out of the request params
|
29
|
+
oauth_verifier = params[:oauth_verifier]
|
30
|
+
request_token = session[:request_token]
|
31
|
+
access_token = Netflix::Client.new.handle_oauth_callback(request_token, oauth_verifier)
|
30
32
|
|
31
33
|
|
32
34
|
* After OAuth credentials are established:
|
33
|
-
|
34
|
-
|
35
|
-
|
35
|
+
access_token = access_token.token
|
36
|
+
access_secret = access_token.secret
|
37
|
+
user_id = access_token.params["user_id"]
|
38
|
+
|
36
39
|
(Record these, for example in a User table in a database)
|
37
40
|
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
41
|
+
client = Netflix::Client.new(access_token, access_token_secret)
|
42
|
+
user = client.user(user_id)
|
43
|
+
queue = user.available_disc_queue
|
44
|
+
discs = queue.discs
|
45
|
+
disc_one = discs[0]
|
46
|
+
puts "#{disc_one.title} #{disc_one.id}"
|
47
|
+
queue.remove(1) #queue is 1-based, so this is first disc
|
45
48
|
|
46
49
|
=== Credits
|
47
|
-
|
48
|
-
|
50
|
+
This work is based on: REST API documentation of Netflix (http://developer.netflix.com),
|
51
|
+
with some help from twitter gem for OAuth ideas https://github.com/jnunemaker/twitter/
|
49
52
|
|
50
53
|
|
data/Rakefile
CHANGED
@@ -1,5 +1,4 @@
|
|
1
1
|
require 'rake/testtask'
|
2
|
-
#require 'rake/gempackagetask'
|
3
2
|
require 'rubygems/package_task'
|
4
3
|
|
5
4
|
Rake::TestTask.new("test") { |t|
|
@@ -12,7 +11,7 @@ Rake::TestTask.new("test") { |t|
|
|
12
11
|
|
13
12
|
gem_spec = Gem::Specification.new do |s|
|
14
13
|
s.name = "netflix"
|
15
|
-
s.version = "0.1.
|
14
|
+
s.version = "0.1.1"
|
16
15
|
s.authors = ["Dean Holdren"]
|
17
16
|
s.date = %q{2012-01-09}
|
18
17
|
s.description = "Ruby Netflix API wrapper"
|
@@ -33,10 +32,6 @@ gem_spec = Gem::Specification.new do |s|
|
|
33
32
|
s.add_development_dependency("yaml")
|
34
33
|
end
|
35
34
|
|
36
|
-
#Rake::GemPackageTask.new(gem_spec) do |t|
|
37
|
-
# t.need_zip = true
|
38
|
-
#end
|
39
|
-
|
40
35
|
Gem::PackageTask.new(gem_spec) do |pkg|
|
41
36
|
pkg.need_zip = true
|
42
37
|
end
|
data/lib/netflix/queue.rb
CHANGED
@@ -39,8 +39,12 @@ module Netflix
|
|
39
39
|
end
|
40
40
|
|
41
41
|
def discs
|
42
|
-
|
43
|
-
|
42
|
+
if queue_item
|
43
|
+
queue_items = [queue_item].flatten
|
44
|
+
queue_items.map {|queue_item| Disc.new(queue_item)}
|
45
|
+
else
|
46
|
+
[]
|
47
|
+
end
|
44
48
|
end
|
45
49
|
|
46
50
|
private
|
@@ -1169,3 +1169,29 @@ nuid_sub2:
|
|
1169
1169
|
body:
|
1170
1170
|
delete:
|
1171
1171
|
body:
|
1172
|
+
empty_queue:
|
1173
|
+
get:
|
1174
|
+
body: |
|
1175
|
+
{"queue": {
|
1176
|
+
"link": [
|
1177
|
+
{
|
1178
|
+
"href": "http://api.netflix.com/users/empty_queue/queues/disc/available",
|
1179
|
+
"rel": "http://schemas.netflix.com/queues.available",
|
1180
|
+
"title": "available queue"
|
1181
|
+
},
|
1182
|
+
{
|
1183
|
+
"href": "http://api.netflix.com/users/empty_queue/queues/disc/saved",
|
1184
|
+
"rel": "http://schemas.netflix.com/queues.saved",
|
1185
|
+
"title": "saved queue"
|
1186
|
+
}
|
1187
|
+
],
|
1188
|
+
"results_per_page": "0",
|
1189
|
+
"url_template": "http://api.netflix.com/users/empty_queue/queues/disc?{-join|&|sort|start_index|max_results}",
|
1190
|
+
"start_index": "0",
|
1191
|
+
"etag": "0",
|
1192
|
+
"number_of_results": "0"
|
1193
|
+
}}
|
1194
|
+
post:
|
1195
|
+
body:
|
1196
|
+
delete:
|
1197
|
+
body:
|
@@ -205,4 +205,73 @@ nuid_sub2:
|
|
205
205
|
}
|
206
206
|
]},
|
207
207
|
"user_id": "nuid_sub2"
|
208
|
+
}}
|
209
|
+
empty_queue:
|
210
|
+
get:
|
211
|
+
body: |
|
212
|
+
{"user": {
|
213
|
+
"can_instant_watch": true,
|
214
|
+
"first_name": "Empty",
|
215
|
+
"last_name": "Queue",
|
216
|
+
"link": [
|
217
|
+
{
|
218
|
+
"href": "http://api.netflix.com/users/empty_queue/queues",
|
219
|
+
"rel": "http://schemas.netflix.com/queues",
|
220
|
+
"title": "queues"
|
221
|
+
},
|
222
|
+
{
|
223
|
+
"href": "http://api.netflix.com/users/empty_queue/rental_history",
|
224
|
+
"rel": "http://schemas.netflix.com/rental_history",
|
225
|
+
"title": "rental history"
|
226
|
+
},
|
227
|
+
{
|
228
|
+
"href": "http://api.netflix.com/users/empty_queue/recommendations",
|
229
|
+
"rel": "http://schemas.netflix.com/recommendations",
|
230
|
+
"title": "recommendations"
|
231
|
+
},
|
232
|
+
{
|
233
|
+
"href": "http://api.netflix.com/users/empty_queue/title_states",
|
234
|
+
"rel": "http://schemas.netflix.com/title_states",
|
235
|
+
"title": "title states"
|
236
|
+
},
|
237
|
+
{
|
238
|
+
"href": "http://api.netflix.com/users/empty_queue/ratings",
|
239
|
+
"rel": "http://schemas.netflix.com/ratings",
|
240
|
+
"title": "ratings"
|
241
|
+
},
|
242
|
+
{
|
243
|
+
"href": "http://api.netflix.com/users/empty_queue/reviews",
|
244
|
+
"rel": "http://schemas.netflix.com/reviews",
|
245
|
+
"title": "reviews"
|
246
|
+
},
|
247
|
+
{
|
248
|
+
"href": "http://api.netflix.com/users/empty_queue/at_home",
|
249
|
+
"rel": "http://schemas.netflix.com/at_home",
|
250
|
+
"title": "at home"
|
251
|
+
},
|
252
|
+
{
|
253
|
+
"href": "http://api.netflix.com/users/empty_queue/feeds",
|
254
|
+
"rel": "http://schemas.netflix.com/feeds",
|
255
|
+
"title": "feeds"
|
256
|
+
}
|
257
|
+
],
|
258
|
+
"max_maturity_level": {"category": {
|
259
|
+
"label": 1000000,
|
260
|
+
"scheme": "http://api.netflix.com/categories/maturity_level",
|
261
|
+
"term": 1000000
|
262
|
+
}},
|
263
|
+
"nickname": "foobar",
|
264
|
+
"preferred_formats": {"category": [
|
265
|
+
{
|
266
|
+
"label": "Blu-ray",
|
267
|
+
"scheme": "http://api.netflix.com/categories/title_formats",
|
268
|
+
"term": "Blu-ray"
|
269
|
+
},
|
270
|
+
{
|
271
|
+
"label": "DVD",
|
272
|
+
"scheme": "http://api.netflix.com/categories/title_formats",
|
273
|
+
"term": "DVD"
|
274
|
+
}
|
275
|
+
]},
|
276
|
+
"user_id": "empty_queue"
|
208
277
|
}}
|
data/test/queue_test.rb
CHANGED
@@ -61,5 +61,13 @@ class QueueTest < Test::Unit::TestCase
|
|
61
61
|
# }
|
62
62
|
#end
|
63
63
|
|
64
|
+
def test_empty_queue
|
65
|
+
stub_netflix_for_user('empty_queue')
|
66
|
+
user = Netflix::Client.new('nuid_access_key', 'nuid_access_secret').user('empty_queue')
|
67
|
+
available_disc_queue = user.available_disc_queue
|
68
|
+
assert available_disc_queue, "Expected a disc_queue"
|
69
|
+
assert available_disc_queue.discs, "Expected the disc_queue to have a discs attribute"
|
70
|
+
assert_equal 0, available_disc_queue.discs.size, "Expected discs to be empty array #{available_disc_queue.discs[0]}}"
|
71
|
+
end
|
64
72
|
|
65
73
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: netflix
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -13,7 +13,7 @@ date: 2012-01-09 00:00:00.000000000Z
|
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: oauth
|
16
|
-
requirement: &
|
16
|
+
requirement: &2165140260 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *2165140260
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: json
|
27
|
-
requirement: &
|
27
|
+
requirement: &2165139740 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :runtime
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *2165139740
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: launchy
|
38
|
-
requirement: &
|
38
|
+
requirement: &2165139320 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *2165139320
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: fakeweb
|
49
|
-
requirement: &
|
49
|
+
requirement: &2165138840 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: '0'
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *2165138840
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: yaml
|
60
|
-
requirement: &
|
60
|
+
requirement: &2165138360 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,7 +65,7 @@ dependencies:
|
|
65
65
|
version: '0'
|
66
66
|
type: :development
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *2165138360
|
69
69
|
description: Ruby Netflix API wrapper
|
70
70
|
email: deanholdren@gmail.com
|
71
71
|
executables: []
|