tmm1-youtube-g 0.4.9.1 → 0.5.0
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/History.txt +3 -1
- data/Manifest.txt +28 -0
- data/README.txt +1 -0
- data/lib/youtube_g.rb +1 -1
- data/lib/youtube_g/client.rb +7 -3
- data/lib/youtube_g/model/video.rb +6 -0
- data/lib/youtube_g/parser.rb +10 -1
- data/lib/youtube_g/request/base_search.rb +1 -1
- data/lib/youtube_g/request/user_search.rb +27 -2
- data/lib/youtube_g/response/video_search.rb +18 -0
- data/test/test_client.rb +13 -1
- data/test/test_video_search.rb +12 -2
- data/youtube-g.gemspec +29 -28
- metadata +5 -4
data/History.txt
CHANGED
@@ -1,4 +1,6 @@
|
|
1
|
-
==
|
1
|
+
== 0.4.9.9 / 2008-09-01
|
2
|
+
|
3
|
+
* Add Geodata information (thanks Jose Galisteo)
|
2
4
|
* Added :page and :per_page options, this allows easier usage of the will_paginate
|
3
5
|
plugin with the library. The :offset and :max_results options are no longer available. [Daniel Insley]
|
4
6
|
* Added ability to get video responses on the instances of the YouTube::Model::Video object. [Daniel Insley]
|
data/Manifest.txt
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
History.txt
|
2
|
+
Manifest.txt
|
3
|
+
README.txt
|
4
|
+
Rakefile
|
5
|
+
TODO.txt
|
6
|
+
lib/youtube_g.rb
|
7
|
+
lib/youtube_g/client.rb
|
8
|
+
lib/youtube_g/logger.rb
|
9
|
+
lib/youtube_g/model/author.rb
|
10
|
+
lib/youtube_g/model/category.rb
|
11
|
+
lib/youtube_g/model/contact.rb
|
12
|
+
lib/youtube_g/model/content.rb
|
13
|
+
lib/youtube_g/model/playlist.rb
|
14
|
+
lib/youtube_g/model/rating.rb
|
15
|
+
lib/youtube_g/model/thumbnail.rb
|
16
|
+
lib/youtube_g/model/user.rb
|
17
|
+
lib/youtube_g/model/video.rb
|
18
|
+
lib/youtube_g/parser.rb
|
19
|
+
lib/youtube_g/record.rb
|
20
|
+
lib/youtube_g/request/base_search.rb
|
21
|
+
lib/youtube_g/request/standard_search.rb
|
22
|
+
lib/youtube_g/request/user_search.rb
|
23
|
+
lib/youtube_g/request/video_search.rb
|
24
|
+
lib/youtube_g/request/video_upload.rb
|
25
|
+
lib/youtube_g/response/video_search.rb
|
26
|
+
test/test_client.rb
|
27
|
+
test/test_video.rb
|
28
|
+
test/test_video_search.rb
|
data/README.txt
CHANGED
@@ -37,6 +37,7 @@ Basic queries:
|
|
37
37
|
client.videos_by(:categories => [:news, :sports])
|
38
38
|
client.videos_by(:categories => [:news, :sports], :tags => ['soccer', 'football'])
|
39
39
|
client.videos_by(:user => 'liz')
|
40
|
+
client.videos_by(:favorites, :user => 'liz')
|
40
41
|
|
41
42
|
Standard feeds:
|
42
43
|
|
data/lib/youtube_g.rb
CHANGED
data/lib/youtube_g/client.rb
CHANGED
@@ -35,10 +35,10 @@ class YouTubeG
|
|
35
35
|
# YouTubeG::Response::VideoSearch
|
36
36
|
def videos_by(params, options={})
|
37
37
|
request_params = params.respond_to?(:to_hash) ? params : options
|
38
|
-
request_params[:page]
|
38
|
+
request_params[:page] = integer_or_default(request_params[:page], 1)
|
39
39
|
|
40
40
|
unless request_params[:max_results]
|
41
|
-
request_params[:max_results] = request_params[:per_page]
|
41
|
+
request_params[:max_results] = integer_or_default(request_params[:per_page], 25)
|
42
42
|
end
|
43
43
|
|
44
44
|
unless request_params[:offset]
|
@@ -48,7 +48,7 @@ class YouTubeG
|
|
48
48
|
if params.respond_to?(:to_hash) and not params[:user]
|
49
49
|
request = YouTubeG::Request::VideoSearch.new(request_params)
|
50
50
|
elsif (params.respond_to?(:to_hash) && params[:user]) || (params == :favorites)
|
51
|
-
request = YouTubeG::Request::UserSearch.new(
|
51
|
+
request = YouTubeG::Request::UserSearch.new(params, request_params)
|
52
52
|
else
|
53
53
|
request = YouTubeG::Request::StandardSearch.new(params, request_params)
|
54
54
|
end
|
@@ -77,5 +77,9 @@ class YouTubeG
|
|
77
77
|
page == 1 ? 1 : ((per_page * page) - per_page + 1)
|
78
78
|
end
|
79
79
|
|
80
|
+
def integer_or_default(value, default)
|
81
|
+
value = value.to_i
|
82
|
+
value > 0 ? value : default
|
83
|
+
end
|
80
84
|
end
|
81
85
|
end
|
@@ -108,6 +108,12 @@ class YouTubeG
|
|
108
108
|
|
109
109
|
# *Fixnum*:: Number of times that the video has been viewed
|
110
110
|
attr_reader :view_count
|
111
|
+
|
112
|
+
# Geodata
|
113
|
+
attr_reader :where
|
114
|
+
attr_reader :position
|
115
|
+
attr_reader :latitude
|
116
|
+
attr_reader :longitude
|
111
117
|
|
112
118
|
attr_reader :statistics
|
113
119
|
|
data/lib/youtube_g/parser.rb
CHANGED
@@ -91,6 +91,11 @@ class YouTubeG
|
|
91
91
|
noembed = entry.elements["yt:noembed"] ? true : false
|
92
92
|
racy = entry.elements["media:rating"] ? true : false
|
93
93
|
|
94
|
+
if where = entry.elements["georss:where"]
|
95
|
+
position = where.elements["gml:Point"].elements["gml:pos"].text
|
96
|
+
latitude, longitude = position.split(" ")
|
97
|
+
end
|
98
|
+
|
94
99
|
YouTubeG::Model::Video.new(
|
95
100
|
:video_id => video_id,
|
96
101
|
:published_at => published_at,
|
@@ -108,7 +113,11 @@ class YouTubeG
|
|
108
113
|
:rating => rating,
|
109
114
|
:view_count => view_count,
|
110
115
|
:noembed => noembed,
|
111
|
-
:racy => racy
|
116
|
+
:racy => racy,
|
117
|
+
:where => where,
|
118
|
+
:position => position,
|
119
|
+
:latitude => latitude,
|
120
|
+
:longitude => longitude)
|
112
121
|
end
|
113
122
|
|
114
123
|
def parse_media_content (media_content_element)
|
@@ -1,10 +1,27 @@
|
|
1
1
|
class YouTubeG
|
2
2
|
module Request #:nodoc:
|
3
3
|
class UserSearch < BaseSearch #:nodoc:
|
4
|
+
attr_reader :max_results # max_results
|
5
|
+
attr_reader :order_by # orderby, ([relevance], viewCount, published, rating)
|
6
|
+
attr_reader :offset # start-index
|
7
|
+
|
4
8
|
def initialize(params, options={})
|
9
|
+
@max_results, @order_by, @offset = nil
|
5
10
|
@url = base_url
|
6
|
-
|
7
|
-
|
11
|
+
|
12
|
+
if params == :favorites
|
13
|
+
@url << "#{options[:user]}/favorites"
|
14
|
+
set_instance_variables(options)
|
15
|
+
elsif params[:user] && options[:favorites]
|
16
|
+
@url << "#{params[:user]}/favorites"
|
17
|
+
set_instance_variables(params)
|
18
|
+
break
|
19
|
+
elsif params[:user]
|
20
|
+
@url << "#{params[:user]}/uploads"
|
21
|
+
set_instance_variables(params)
|
22
|
+
end
|
23
|
+
|
24
|
+
@url << build_query_params(to_youtube_params)
|
8
25
|
end
|
9
26
|
|
10
27
|
private
|
@@ -12,6 +29,14 @@ class YouTubeG
|
|
12
29
|
def base_url #:nodoc:
|
13
30
|
super << "users/"
|
14
31
|
end
|
32
|
+
|
33
|
+
def to_youtube_params #:nodoc:
|
34
|
+
{
|
35
|
+
'max-results' => @max_results,
|
36
|
+
'orderby' => @order_by,
|
37
|
+
'start-index' => @offset
|
38
|
+
}
|
39
|
+
end
|
15
40
|
end
|
16
41
|
|
17
42
|
end
|
@@ -18,6 +18,24 @@ class YouTubeG
|
|
18
18
|
|
19
19
|
# *Array*:: Array of YouTubeG::Model::Video records
|
20
20
|
attr_reader :videos
|
21
|
+
|
22
|
+
def current_page
|
23
|
+
((offset - 1) / max_result_count) + 1
|
24
|
+
end
|
25
|
+
|
26
|
+
# current_page + 1 or nil if there is no next page
|
27
|
+
def next_page
|
28
|
+
current_page < total_pages ? (current_page + 1) : nil
|
29
|
+
end
|
30
|
+
|
31
|
+
# current_page - 1 or nil if there is no previous page
|
32
|
+
def previous_page
|
33
|
+
current_page > 1 ? (current_page - 1) : nil
|
34
|
+
end
|
35
|
+
|
36
|
+
def total_pages
|
37
|
+
(total_result_count / max_result_count.to_f).ceil
|
38
|
+
end
|
21
39
|
end
|
22
40
|
end
|
23
41
|
end
|
data/test/test_client.rb
CHANGED
@@ -52,7 +52,6 @@ class TestClient < Test::Unit::TestCase
|
|
52
52
|
assert_equal 51, response2.offset
|
53
53
|
end
|
54
54
|
|
55
|
-
|
56
55
|
def test_should_get_videos_for_multiword_metasearch_query
|
57
56
|
response = @client.videos_by(:query => 'christina ricci')
|
58
57
|
|
@@ -132,6 +131,13 @@ class TestClient < Test::Unit::TestCase
|
|
132
131
|
response = @client.videos_by(:user => 'liz')
|
133
132
|
response.videos.each { |v| assert_valid_video v }
|
134
133
|
end
|
134
|
+
|
135
|
+
def test_should_get_videos_by_user_with_pagination_and_ordering
|
136
|
+
response = @client.videos_by(:user => 'liz', :page => 2, :per_page => '2', :order_by => 'published')
|
137
|
+
response.videos.each { |v| assert_valid_video v }
|
138
|
+
assert_equal 3, response.offset
|
139
|
+
assert_equal 2, response.max_result_count
|
140
|
+
end
|
135
141
|
|
136
142
|
# HTTP 403 Error
|
137
143
|
# def test_should_get_favorite_videos_by_user
|
@@ -139,6 +145,12 @@ class TestClient < Test::Unit::TestCase
|
|
139
145
|
# response.videos.each { |v| assert_valid_video v }
|
140
146
|
# end
|
141
147
|
|
148
|
+
def test_should_get_favorite_videos_by_user
|
149
|
+
response = @client.videos_by(:favorites, :user => 'drnicwilliams')
|
150
|
+
assert_equal "http://gdata.youtube.com/feeds/api/users/drnicwilliams/favorites", response.feed_id
|
151
|
+
response.videos.each { |v| assert_valid_video v }
|
152
|
+
end
|
153
|
+
|
142
154
|
def test_should_get_videos_for_query_search_with_categories_excluded
|
143
155
|
video = @client.video_by("EkF4JD2rO3Q")
|
144
156
|
assert_equal "<object width=\"425\" height=\"350\">\n <param name=\"movie\" value=\"http://www.youtube.com/v/EkF4JD2rO3Q\"></param>\n <param name=\"wmode\" value=\"transparent\"></param>\n <embed src=\"http://www.youtube.com/v/EkF4JD2rO3Q\" type=\"application/x-shockwave-flash\" \n wmode=\"transparent\" width=\"425\" height=\"350\"></embed>\n</object>\n", video.embed_html
|
data/test/test_video_search.rb
CHANGED
@@ -74,7 +74,7 @@ class TestVideoSearch < Test::Unit::TestCase
|
|
74
74
|
|
75
75
|
def test_should_build_url_for_most_viewed_offset_and_max_results_with_time
|
76
76
|
request = YouTubeG::Request::StandardSearch.new(:top_rated, :offset => 5, :max_results => 10, :time => :today)
|
77
|
-
assert_equal "http://gdata.youtube.com/feeds/api/standardfeeds/top_rated?
|
77
|
+
assert_equal "http://gdata.youtube.com/feeds/api/standardfeeds/top_rated?max-results=10&start-index=5&time=today", request.url
|
78
78
|
end
|
79
79
|
|
80
80
|
def test_should_raise_exception_for_invalid_type
|
@@ -111,7 +111,7 @@ class TestVideoSearch < Test::Unit::TestCase
|
|
111
111
|
request = YouTubeG::Request::VideoSearch.new(:query => 'bench press',
|
112
112
|
:categories => { :exclude => [:comedy, :entertainment] },
|
113
113
|
:max_results => 10)
|
114
|
-
assert_equal "http://gdata.youtube.com/feeds/api/videos/-/-Comedy/-Entertainment/?vq=bench+press
|
114
|
+
assert_equal "http://gdata.youtube.com/feeds/api/videos/-/-Comedy/-Entertainment/?max-results=10&vq=bench+press", request.url
|
115
115
|
end
|
116
116
|
|
117
117
|
# -- User Queries ---------------------------------------------------------------------------------
|
@@ -121,8 +121,18 @@ class TestVideoSearch < Test::Unit::TestCase
|
|
121
121
|
assert_equal "http://gdata.youtube.com/feeds/api/users/liz/uploads", request.url
|
122
122
|
end
|
123
123
|
|
124
|
+
def test_should_build_url_for_videos_by_user_paginate_and_order
|
125
|
+
request = YouTubeG::Request::UserSearch.new(:user => 'liz', :offset => 20, :max_results => 10, :order_by => 'published')
|
126
|
+
assert_equal "http://gdata.youtube.com/feeds/api/users/liz/uploads?max-results=10&orderby=published&start-index=20", request.url
|
127
|
+
end
|
128
|
+
|
124
129
|
def test_should_build_url_for_favorite_videos_by_user
|
125
130
|
request = YouTubeG::Request::UserSearch.new(:favorites, :user => 'liz')
|
126
131
|
assert_equal "http://gdata.youtube.com/feeds/api/users/liz/favorites", request.url
|
127
132
|
end
|
133
|
+
|
134
|
+
def test_should_build_url_for_favorite_videos_by_user_paginate
|
135
|
+
request = YouTubeG::Request::UserSearch.new(:favorites, :user => 'liz', :offset => 20, :max_results => 10)
|
136
|
+
assert_equal "http://gdata.youtube.com/feeds/api/users/liz/favorites?max-results=10&start-index=20", request.url
|
137
|
+
end
|
128
138
|
end
|
data/youtube-g.gemspec
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
spec = Gem::Specification.new do |s|
|
2
2
|
s.name = 'youtube-g'
|
3
|
-
s.version = '0.
|
4
|
-
s.date = '
|
3
|
+
s.version = '0.5.0'
|
4
|
+
s.date = '2009-01-07'
|
5
5
|
s.summary = 'An object-oriented Ruby wrapper for the YouTube GData API'
|
6
6
|
s.email = "ruby-youtube-library@googlegroups.com"
|
7
7
|
s.homepage = "http://youtube-g.rubyforge.org/"
|
@@ -12,32 +12,33 @@ spec = Gem::Specification.new do |s|
|
|
12
12
|
# ruby -rpp -e "pp Dir['**/*.*'].map"
|
13
13
|
s.files = [
|
14
14
|
"History.txt",
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
15
|
+
"lib/youtube_g/client.rb",
|
16
|
+
"lib/youtube_g/logger.rb",
|
17
|
+
"lib/youtube_g/model/author.rb",
|
18
|
+
"lib/youtube_g/model/category.rb",
|
19
|
+
"lib/youtube_g/model/contact.rb",
|
20
|
+
"lib/youtube_g/model/content.rb",
|
21
|
+
"lib/youtube_g/model/playlist.rb",
|
22
|
+
"lib/youtube_g/model/rating.rb",
|
23
|
+
"lib/youtube_g/model/thumbnail.rb",
|
24
|
+
"lib/youtube_g/model/user.rb",
|
25
|
+
"lib/youtube_g/model/video.rb",
|
26
|
+
"lib/youtube_g/parser.rb",
|
27
|
+
"lib/youtube_g/record.rb",
|
28
|
+
"lib/youtube_g/request/base_search.rb",
|
29
|
+
"lib/youtube_g/request/standard_search.rb",
|
30
|
+
"lib/youtube_g/request/user_search.rb",
|
31
|
+
"lib/youtube_g/request/video_search.rb",
|
32
|
+
"lib/youtube_g/request/video_upload.rb",
|
33
|
+
"lib/youtube_g/response/video_search.rb",
|
34
|
+
"lib/youtube_g.rb",
|
35
|
+
"Manifest.txt",
|
36
|
+
"README.txt",
|
37
|
+
"test/test_client.rb",
|
38
|
+
"test/test_video.rb",
|
39
|
+
"test/test_video_search.rb",
|
40
|
+
"TODO.txt",
|
41
|
+
"youtube-g.gemspec"
|
41
42
|
]
|
42
43
|
|
43
44
|
s.test_files = [
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tmm1-youtube-g
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Shane Vitarana
|
@@ -12,7 +12,7 @@ autorequire:
|
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
14
|
|
15
|
-
date:
|
15
|
+
date: 2009-01-07 00:00:00 -08:00
|
16
16
|
default_executable:
|
17
17
|
dependencies: []
|
18
18
|
|
@@ -27,8 +27,6 @@ extra_rdoc_files:
|
|
27
27
|
- README.txt
|
28
28
|
files:
|
29
29
|
- History.txt
|
30
|
-
- README.txt
|
31
|
-
- TODO.txt
|
32
30
|
- lib/youtube_g/client.rb
|
33
31
|
- lib/youtube_g/logger.rb
|
34
32
|
- lib/youtube_g/model/author.rb
|
@@ -49,9 +47,12 @@ files:
|
|
49
47
|
- lib/youtube_g/request/video_upload.rb
|
50
48
|
- lib/youtube_g/response/video_search.rb
|
51
49
|
- lib/youtube_g.rb
|
50
|
+
- Manifest.txt
|
51
|
+
- README.txt
|
52
52
|
- test/test_client.rb
|
53
53
|
- test/test_video.rb
|
54
54
|
- test/test_video_search.rb
|
55
|
+
- TODO.txt
|
55
56
|
- youtube-g.gemspec
|
56
57
|
has_rdoc: true
|
57
58
|
homepage: http://youtube-g.rubyforge.org/
|