youtube 0.8.0 → 0.8.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/CHANGELOG +13 -0
- data/README +2 -0
- data/Rakefile +1 -1
- data/lib/youtube.rb +57 -7
- data/test/test_api.rb +38 -2
- metadata +2 -2
data/CHANGELOG
CHANGED
@@ -1,3 +1,16 @@
|
|
1
|
+
* 2007/02/12
|
2
|
+
|
3
|
+
- [drummr77] Added fix to check if returned video response contains an
|
4
|
+
Array or not. Return nil instead of erroring out.
|
5
|
+
|
6
|
+
- [drummr77] Fixed Video.length accessor. Changed to Video.length_seconds.
|
7
|
+
|
8
|
+
- [drummr77] Added new API methods:
|
9
|
+
youtube.videos.list_by_related (with paging),
|
10
|
+
youtube.videos.list_by_playlist (with paging),
|
11
|
+
youtube.videos.list_by_category (with paging)
|
12
|
+
youtube.videos.list_by_category_and_tag (with paging)
|
13
|
+
|
1
14
|
* 2006/11/15
|
2
15
|
|
3
16
|
- [drummr77] Applied a modified version of the patch sent in by Lucas
|
data/README
CHANGED
@@ -8,6 +8,8 @@ http://www.youtube.com/my_profile_dev.
|
|
8
8
|
|
9
9
|
The RubyForge project is at http://rubyforge.org/projects/youtube.
|
10
10
|
|
11
|
+
The Google Group to discuss issues and bugs is at http://groups.google.com/group/ruby-youtube-library?hl=en.
|
12
|
+
|
11
13
|
== About
|
12
14
|
|
13
15
|
Implements version 2 of YouTube's API.
|
data/Rakefile
CHANGED
data/lib/youtube.rb
CHANGED
@@ -57,14 +57,15 @@ module YouTube
|
|
57
57
|
# videos of the supplied +username+.
|
58
58
|
def favorite_videos(username)
|
59
59
|
response = users_list_favorite_videos(:user => username)
|
60
|
-
response
|
60
|
+
_parse_video_response(response)
|
61
61
|
end
|
62
62
|
|
63
63
|
# Returns a list of YouTube::Friend objects detailing the friends of
|
64
64
|
# the supplied +username+.
|
65
65
|
def friends(username)
|
66
66
|
response = users_list_friends(:user => username)
|
67
|
-
response['friend_list']['friend']
|
67
|
+
friends = response['friend_list']['friend']
|
68
|
+
friends.is_a?(Array) ? friends.compact.map { |friend| Friend.new(friend) } : nil
|
68
69
|
end
|
69
70
|
|
70
71
|
# Returns a list of YouTube::Video objects detailing the videos
|
@@ -75,21 +76,65 @@ module YouTube
|
|
75
76
|
# +per_page+ = the number of results per page (default: 20, max 100).
|
76
77
|
def videos_by_tag(tag, page = 1, per_page = 20)
|
77
78
|
response = videos_list_by_tag(:tag => tag, :page => page, :per_page => per_page)
|
78
|
-
response
|
79
|
+
_parse_video_response(response)
|
80
|
+
end
|
81
|
+
|
82
|
+
# Returns a list of YouTube::Video objects that match any of the
|
83
|
+
# specified +tag+s.
|
84
|
+
#
|
85
|
+
# Optional parameters are:
|
86
|
+
# +page+ = the "page" of results to retrieve (e.g. 1, 2, 3)
|
87
|
+
# +per_page+ = the number of results per page (default: 20, max 100).
|
88
|
+
def videos_by_related(tag, page = 1, per_page = 20)
|
89
|
+
response = videos_list_by_related(:tag => tag, :page => page, :per_page => per_page)
|
90
|
+
_parse_video_response(response)
|
91
|
+
end
|
92
|
+
|
93
|
+
# Returns a list of YouTube::Video objects with the specified
|
94
|
+
# +playlist id+.
|
95
|
+
#
|
96
|
+
# Optional parameters are:
|
97
|
+
# +page+ = the "page" of results to retrieve (e.g. 1, 2, 3)
|
98
|
+
# +per_page+ = the number of results per page (default: 20, max 100).
|
99
|
+
def videos_by_playlist(id, page = 1, per_page = 20)
|
100
|
+
response = videos_list_by_playlist(:id => id, :page => page, :per_page => per_page)
|
101
|
+
_parse_video_response(response)
|
102
|
+
end
|
103
|
+
|
104
|
+
# Returns a list of YouTube::Video objects with the specified
|
105
|
+
# +category id+.
|
106
|
+
#
|
107
|
+
# Optional parameters are:
|
108
|
+
# +page+ = the "page" of results to retrieve (e.g. 1, 2, 3)
|
109
|
+
# +per_page+ = the number of results per page (default: 20, max 100).
|
110
|
+
def videos_by_category(id, page = 1, per_page = 20)
|
111
|
+
response = videos_list_by_category(:category_id => id, :page => page, :per_page => per_page)
|
112
|
+
_parse_video_response(response)
|
113
|
+
end
|
114
|
+
|
115
|
+
# Returns a list of YouTube::Video objects detailing the videos
|
116
|
+
# matching the supplied +category id+ and +tag+.
|
117
|
+
#
|
118
|
+
# Optional parameters are:
|
119
|
+
# +page+ = the "page" of results to retrieve (e.g. 1, 2, 3)
|
120
|
+
# +per_page+ = the number of results per page (default: 20, max 100).
|
121
|
+
def videos_by_category_and_tag(id, tag, page = 1, per_page = 20)
|
122
|
+
response = videos_list_by_category_and_tag(:category_id => id, :tag => tag, :page => page, :per_page => per_page)
|
123
|
+
_parse_video_response(response)
|
79
124
|
end
|
80
125
|
|
81
126
|
# Returns a list of YouTube::Video objects detailing the videos
|
82
127
|
# uploaded by the specified +username+.
|
83
128
|
def videos_by_user(username)
|
84
129
|
response = videos_list_by_user(:user => username)
|
85
|
-
response
|
130
|
+
_parse_video_response(response)
|
86
131
|
end
|
87
132
|
|
88
133
|
# Returns a list of YouTube::Video objects detailing the current
|
89
134
|
# global set of featured videos on YouTube.
|
90
135
|
def featured_videos
|
91
136
|
response = videos_list_featured
|
92
|
-
response
|
137
|
+
_parse_video_response(response)
|
93
138
|
end
|
94
139
|
|
95
140
|
# Returns a YouTube::VideoDetails object detailing additional
|
@@ -131,6 +176,11 @@ module YouTube
|
|
131
176
|
def _http_get(url)
|
132
177
|
Net::HTTP.get_response(URI.parse(url)).body.to_s
|
133
178
|
end
|
179
|
+
|
180
|
+
def _parse_video_response(response)
|
181
|
+
videos = response['video_list']['video']
|
182
|
+
videos.is_a?(Array) ? videos.compact.map { |video| Video.new(video) } : nil
|
183
|
+
end
|
134
184
|
end
|
135
185
|
|
136
186
|
class Friend
|
@@ -199,7 +249,7 @@ module YouTube
|
|
199
249
|
attr_reader :description
|
200
250
|
attr_reader :embed_url
|
201
251
|
attr_reader :id
|
202
|
-
attr_reader :
|
252
|
+
attr_reader :length_seconds
|
203
253
|
attr_reader :rating_avg
|
204
254
|
attr_reader :rating_count
|
205
255
|
attr_reader :tags
|
@@ -214,7 +264,7 @@ module YouTube
|
|
214
264
|
@comment_count = payload['comment_count'].to_i
|
215
265
|
@description = payload['description']
|
216
266
|
@id = payload['id']
|
217
|
-
@
|
267
|
+
@length_seconds = payload['length_seconds'].to_i
|
218
268
|
@rating_avg = payload['rating_avg'].to_f
|
219
269
|
@rating_count = payload['rating_count'].to_i
|
220
270
|
@tags = payload['tags']
|
data/test/test_api.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
require 'test/unit'
|
3
3
|
require 'youtube'
|
4
|
+
require 'pp'
|
4
5
|
|
5
6
|
# This test class assumes an active internet connection
|
6
7
|
class TestAPI < Test::Unit::TestCase
|
@@ -30,6 +31,11 @@ class TestAPI < Test::Unit::TestCase
|
|
30
31
|
# pull out one to scrutinize
|
31
32
|
sample = favorites.first
|
32
33
|
_test_video(sample)
|
34
|
+
|
35
|
+
# user doesn't exist / test exception handling
|
36
|
+
assert_raise RuntimeError do
|
37
|
+
favorites = @client.favorite_videos('dsfa98sd7fa9s8d7fd8')
|
38
|
+
end
|
33
39
|
end
|
34
40
|
|
35
41
|
def test_friends
|
@@ -50,18 +56,47 @@ class TestAPI < Test::Unit::TestCase
|
|
50
56
|
end
|
51
57
|
|
52
58
|
def test_videos_by_tag
|
59
|
+
# test case where videos exist
|
53
60
|
videos = @client.videos_by_tag('iron maiden')
|
54
61
|
_test_video_list(videos)
|
55
|
-
|
56
62
|
videos = @client.videos_by_tag('caffe trieste')
|
57
63
|
_test_video_list(videos)
|
64
|
+
|
65
|
+
# test case where no videos exist
|
66
|
+
videos = @client.videos_by_tag('u423oi4j23oi4j234io')
|
67
|
+
assert_nil videos
|
58
68
|
end
|
59
69
|
|
60
70
|
def test_videos_by_user
|
71
|
+
# test case where videos exist
|
61
72
|
videos = @client.videos_by_user('whytheluckystiff')
|
62
73
|
_test_video_list(videos)
|
74
|
+
|
75
|
+
# test case where videos don't exist
|
76
|
+
videos = @client.videos_by_user('br0wnpunk')
|
77
|
+
assert_nil videos
|
63
78
|
end
|
64
79
|
|
80
|
+
def test_videos_by_related
|
81
|
+
videos = @client.videos_by_related('squats')
|
82
|
+
_test_video_list(videos)
|
83
|
+
end
|
84
|
+
|
85
|
+
def test_videos_by_playlist
|
86
|
+
videos = @client.videos_by_playlist('4009D81B1E0277A1')
|
87
|
+
_test_video_list(videos)
|
88
|
+
end
|
89
|
+
|
90
|
+
# def test_videos_by_category
|
91
|
+
# videos = @client.videos_by_category('10')
|
92
|
+
# _test_video_list(videos)
|
93
|
+
# end
|
94
|
+
#
|
95
|
+
# def test_videos_by_category_and_tag
|
96
|
+
# videos = @client.videos_by_category_and_tag('10', 'punk')
|
97
|
+
# _test_video_list(videos)
|
98
|
+
# end
|
99
|
+
|
65
100
|
def test_featured_videos
|
66
101
|
videos = @client.featured_videos
|
67
102
|
_test_video_list(videos)
|
@@ -149,9 +184,10 @@ class TestAPI < Test::Unit::TestCase
|
|
149
184
|
# check other attributes
|
150
185
|
assert (video.thumbnail_url =~ /\.jpg$/)
|
151
186
|
assert (video.title && video.title.length > 0)
|
187
|
+
assert (video.length_seconds > 0)
|
152
188
|
assert (video.upload_time && video.upload_time.is_a?(Time))
|
153
189
|
_assert_youtube_url video.url
|
154
|
-
assert (video.view_count
|
190
|
+
assert (video.view_count >= 0)
|
155
191
|
assert (video.tags && video.tags.length > 0)
|
156
192
|
assert (video.author && video.author.length > 0)
|
157
193
|
end
|
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.8.11
|
|
3
3
|
specification_version: 1
|
4
4
|
name: youtube
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.8.
|
7
|
-
date:
|
6
|
+
version: 0.8.5
|
7
|
+
date: 2007-02-12 00:00:00 -06:00
|
8
8
|
summary: A Ruby object-oriented interface to the YouTube REST API.
|
9
9
|
require_paths:
|
10
10
|
- lib
|