youtube_it 1.3.1 → 1.4.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/README.txt +5 -1
- data/VERSION +1 -1
- data/lib/youtube_it/client.rb +9 -2
- data/lib/youtube_it/model/comment.rb +11 -0
- data/lib/youtube_it/model/user.rb +7 -1
- data/lib/youtube_it/parser.rb +56 -0
- data/lib/youtube_it/request/video_upload.rb +14 -3
- data/lib/youtube_it.rb +2 -1
- data/pkg/youtube_it-1.3.1.gem +0 -0
- data/test/test_client.rb +1 -1
- data/youtube_it.gemspec +3 -1
- metadata +3 -1
data/README.txt
CHANGED
|
@@ -68,6 +68,11 @@ Upload videos:
|
|
|
68
68
|
|
|
69
69
|
client.video_delete("FQK1URcxmb4")
|
|
70
70
|
|
|
71
|
+
Profiles
|
|
72
|
+
|
|
73
|
+
You can get a users profile:
|
|
74
|
+
|
|
75
|
+
client.profile(user_id)
|
|
71
76
|
|
|
72
77
|
|
|
73
78
|
Comments
|
|
@@ -236,4 +241,3 @@ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
|
|
236
241
|
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
|
237
242
|
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
|
238
243
|
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
239
|
-
|
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
1.
|
|
1
|
+
1.4.0
|
data/lib/youtube_it/client.rb
CHANGED
|
@@ -115,8 +115,11 @@ class YouTubeIt
|
|
|
115
115
|
client.add_comment(video_id, comment)
|
|
116
116
|
end
|
|
117
117
|
|
|
118
|
-
|
|
119
|
-
|
|
118
|
+
# opts is converted to get params and appended to comments gdata api url
|
|
119
|
+
# eg opts = { 'max-results' => 10, 'start-index' => 20 }
|
|
120
|
+
# hash does _not_ play nice with symbols
|
|
121
|
+
def comments(video_id, opts = {})
|
|
122
|
+
client.comments(video_id, opts)
|
|
120
123
|
end
|
|
121
124
|
|
|
122
125
|
def add_favorite(video_id)
|
|
@@ -131,6 +134,10 @@ class YouTubeIt
|
|
|
131
134
|
client.favorites
|
|
132
135
|
end
|
|
133
136
|
|
|
137
|
+
def profile(user_id)
|
|
138
|
+
client.profile(user_id)
|
|
139
|
+
end
|
|
140
|
+
|
|
134
141
|
def playlist(playlist_id)
|
|
135
142
|
client.playlist playlist_id
|
|
136
143
|
end
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
class YouTubeIt
|
|
2
|
+
module Model
|
|
3
|
+
class Comment < YouTubeIt::Record
|
|
4
|
+
attr_reader :content, :published, :title, :updated, :url
|
|
5
|
+
|
|
6
|
+
# YouTubeIt::Model::Author:: Information about the YouTube user who owns a piece of video content.
|
|
7
|
+
attr_reader :author
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
|
|
@@ -4,17 +4,23 @@ class YouTubeIt
|
|
|
4
4
|
attr_reader :age
|
|
5
5
|
attr_reader :books
|
|
6
6
|
attr_reader :company
|
|
7
|
+
attr_reader :description
|
|
7
8
|
attr_reader :gender
|
|
8
9
|
attr_reader :hobbies
|
|
9
10
|
attr_reader :hometown
|
|
11
|
+
attr_reader :last_login
|
|
10
12
|
attr_reader :location
|
|
13
|
+
attr_reader :join_date
|
|
11
14
|
attr_reader :movies
|
|
12
15
|
attr_reader :music
|
|
13
16
|
attr_reader :occupation
|
|
14
17
|
attr_reader :relationship
|
|
15
18
|
attr_reader :school
|
|
16
|
-
attr_reader :
|
|
19
|
+
attr_reader :subscribers
|
|
20
|
+
attr_reader :upload_views
|
|
17
21
|
attr_reader :username
|
|
22
|
+
attr_reader :videos_watched
|
|
23
|
+
attr_reader :view_count
|
|
18
24
|
end
|
|
19
25
|
end
|
|
20
26
|
end
|
data/lib/youtube_it/parser.rb
CHANGED
|
@@ -19,6 +19,36 @@ class YouTubeIt
|
|
|
19
19
|
end
|
|
20
20
|
end
|
|
21
21
|
|
|
22
|
+
class CommentsFeedParser < FeedParser #:nodoc:
|
|
23
|
+
# return array of comments
|
|
24
|
+
def parse_content(content)
|
|
25
|
+
doc = REXML::Document.new(content.body)
|
|
26
|
+
feed = doc.elements["feed"]
|
|
27
|
+
|
|
28
|
+
comments = []
|
|
29
|
+
feed.elements.each("entry") do |entry|
|
|
30
|
+
comments << parse_entry(entry)
|
|
31
|
+
end
|
|
32
|
+
return comments
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
protected
|
|
36
|
+
def parse_entry(entry)
|
|
37
|
+
author = YouTubeIt::Model::Author.new(
|
|
38
|
+
:name => entry.elements["author"].elements["name"].text,
|
|
39
|
+
:uri => entry.elements["author"].elements["uri"].text
|
|
40
|
+
)
|
|
41
|
+
YouTubeIt::Model::Comment.new(
|
|
42
|
+
:author => author,
|
|
43
|
+
:content => entry.elements["content"].text,
|
|
44
|
+
:published => entry.elements["published"].text,
|
|
45
|
+
:title => entry.elements["title"].text,
|
|
46
|
+
:updated => entry.elements["updated "].text,
|
|
47
|
+
:url => entry.elements["id"].text
|
|
48
|
+
)
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
22
52
|
class PlaylistFeedParser < FeedParser #:nodoc:
|
|
23
53
|
|
|
24
54
|
def parse_content(content)
|
|
@@ -63,6 +93,32 @@ class YouTubeIt
|
|
|
63
93
|
end
|
|
64
94
|
end
|
|
65
95
|
|
|
96
|
+
class ProfileFeedParser < FeedParser #:nodoc:
|
|
97
|
+
def parse_content(content)
|
|
98
|
+
xml = REXML::Document.new(content.body)
|
|
99
|
+
entry = xml.elements["entry"] || xml.elements["feed"]
|
|
100
|
+
YouTubeIt::Model::User.new(
|
|
101
|
+
:age => entry.elements["yt:age"] ? entry.elements["yt:age"].text : nil,
|
|
102
|
+
:company => entry.elements["yt:company"] ? entry.elements["yt:company"].text : nil,
|
|
103
|
+
:gender => entry.elements["yt:gender"] ? entry.elements["yt:gender"].text : nil,
|
|
104
|
+
:hobbies => entry.elements["yt:hobbies"] ? entry.elements["yt:hobbies"].text : nil,
|
|
105
|
+
:hometown => entry.elements["yt:hometown"] ? entry.elements["yt:hometown"].text : nil,
|
|
106
|
+
:location => entry.elements["yt:location"] ? entry.elements["yt:location"].text : nil,
|
|
107
|
+
:last_login => entry.elements["yt:statistics"].attributes["lastWebAccess"],
|
|
108
|
+
:join_date => entry.elements["published"] ? entry.elements["published"].text : nil,
|
|
109
|
+
:movies => entry.elements["yt:movies"] ? entry.elements["yt:movies"].text : nil,
|
|
110
|
+
:music => entry.elements["yt:music"] ? entry.elements["yt:music"].text : nil,
|
|
111
|
+
:occupation => entry.elements["yt:occupation"] ? entry.elements["yt:occupation"].text : nil,
|
|
112
|
+
:relationship => entry.elements["yt:relationship"] ? entry.elements["yt:relationship"].text : nil,
|
|
113
|
+
:school => entry.elements["yt:school"] ? entry.elements["yt:school"].text : nil,
|
|
114
|
+
:subscribers => entry.elements["yt:statistics"].attributes["subscriberCount"],
|
|
115
|
+
:videos_watched => entry.elements["yt:statistics"].attributes["videoWatchCount"],
|
|
116
|
+
:view_count => entry.elements["yt:statistics"].attributes["viewCount"],
|
|
117
|
+
:upload_views => entry.elements["yt:statistics"].attributes["totalUploadViews"]
|
|
118
|
+
)
|
|
119
|
+
end
|
|
120
|
+
end
|
|
121
|
+
|
|
66
122
|
class VideoFeedParser < FeedParser #:nodoc:
|
|
67
123
|
|
|
68
124
|
def parse_content(content)
|
|
@@ -209,12 +209,14 @@ class YouTubeIt
|
|
|
209
209
|
{:code => response.code, :body => response.body}
|
|
210
210
|
end
|
|
211
211
|
|
|
212
|
-
def comments(video_id)
|
|
213
|
-
comment_url = "/feeds/api/videos/%s/comments" % video_id
|
|
212
|
+
def comments(video_id, opts = {})
|
|
213
|
+
comment_url = "/feeds/api/videos/%s/comments?" % video_id
|
|
214
|
+
comment_url << opts.collect { |k,p| [k,p].join '=' }.join('&')
|
|
214
215
|
http_connection do |session|
|
|
215
216
|
response = session.get(comment_url)
|
|
216
217
|
raise_on_faulty_response(response)
|
|
217
218
|
{:code => response.code, :body => response.body}
|
|
219
|
+
return YouTubeIt::Parser::CommentsFeedParser.new(response).parse
|
|
218
220
|
end
|
|
219
221
|
end
|
|
220
222
|
|
|
@@ -261,6 +263,15 @@ class YouTubeIt
|
|
|
261
263
|
return true
|
|
262
264
|
end
|
|
263
265
|
|
|
266
|
+
def profile(user_id)
|
|
267
|
+
profile_url = "/feeds/api/users/%s?v=2" % user_id
|
|
268
|
+
http_connection do |session|
|
|
269
|
+
response = session.get(profile_url)
|
|
270
|
+
raise_on_faulty_response(response)
|
|
271
|
+
return YouTubeIt::Parser::ProfileFeedParser.new(response).parse
|
|
272
|
+
end
|
|
273
|
+
end
|
|
274
|
+
|
|
264
275
|
def playlist(playlist_id)
|
|
265
276
|
playlist_url = "/feeds/api/playlists/%s?v=2" % playlist_id
|
|
266
277
|
http_connection do |session|
|
|
@@ -589,4 +600,4 @@ class YouTubeIt
|
|
|
589
600
|
end
|
|
590
601
|
end
|
|
591
602
|
end
|
|
592
|
-
end
|
|
603
|
+
end
|
data/lib/youtube_it.rb
CHANGED
|
@@ -51,6 +51,7 @@ end
|
|
|
51
51
|
parser
|
|
52
52
|
model/author
|
|
53
53
|
model/category
|
|
54
|
+
model/comment
|
|
54
55
|
model/contact
|
|
55
56
|
model/content
|
|
56
57
|
model/playlist
|
|
@@ -65,4 +66,4 @@ end
|
|
|
65
66
|
request/video_search
|
|
66
67
|
response/video_search
|
|
67
68
|
chain_io
|
|
68
|
-
).each{|m| require File.dirname(__FILE__) + '/youtube_it/' + m }
|
|
69
|
+
).each{|m| require File.dirname(__FILE__) + '/youtube_it/' + m }
|
|
Binary file
|
data/test/test_client.rb
CHANGED
|
@@ -233,7 +233,7 @@ class TestClient < Test::Unit::TestCase
|
|
|
233
233
|
def test_should_add_new_comment
|
|
234
234
|
video_id ="H1TrfM3xbgc"
|
|
235
235
|
@client.add_comment(video_id, "test comment")
|
|
236
|
-
comment = @client.comments(video_id)
|
|
236
|
+
comment = @client.comments(video_id).first.content
|
|
237
237
|
assert comment.match(/test comment/)
|
|
238
238
|
end
|
|
239
239
|
|
data/youtube_it.gemspec
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
|
|
6
6
|
Gem::Specification.new do |s|
|
|
7
7
|
s.name = %q{youtube_it}
|
|
8
|
-
s.version = "1.
|
|
8
|
+
s.version = "1.4.0"
|
|
9
9
|
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
|
11
11
|
s.authors = ["chebyte", "kylejginavan"]
|
|
@@ -27,6 +27,7 @@ Gem::Specification.new do |s|
|
|
|
27
27
|
"lib/youtube_it/client.rb",
|
|
28
28
|
"lib/youtube_it/model/author.rb",
|
|
29
29
|
"lib/youtube_it/model/category.rb",
|
|
30
|
+
"lib/youtube_it/model/comment.rb",
|
|
30
31
|
"lib/youtube_it/model/contact.rb",
|
|
31
32
|
"lib/youtube_it/model/content.rb",
|
|
32
33
|
"lib/youtube_it/model/playlist.rb",
|
|
@@ -43,6 +44,7 @@ Gem::Specification.new do |s|
|
|
|
43
44
|
"lib/youtube_it/request/video_upload.rb",
|
|
44
45
|
"lib/youtube_it/response/video_search.rb",
|
|
45
46
|
"lib/youtube_it/version.rb",
|
|
47
|
+
"pkg/youtube_it-1.3.1.gem",
|
|
46
48
|
"test/files/youtube_video_response.xml",
|
|
47
49
|
"test/helper.rb",
|
|
48
50
|
"test/test.mov",
|
metadata
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
name: youtube_it
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease:
|
|
5
|
-
version: 1.
|
|
5
|
+
version: 1.4.0
|
|
6
6
|
platform: ruby
|
|
7
7
|
authors:
|
|
8
8
|
- chebyte
|
|
@@ -56,6 +56,7 @@ files:
|
|
|
56
56
|
- lib/youtube_it/client.rb
|
|
57
57
|
- lib/youtube_it/model/author.rb
|
|
58
58
|
- lib/youtube_it/model/category.rb
|
|
59
|
+
- lib/youtube_it/model/comment.rb
|
|
59
60
|
- lib/youtube_it/model/contact.rb
|
|
60
61
|
- lib/youtube_it/model/content.rb
|
|
61
62
|
- lib/youtube_it/model/playlist.rb
|
|
@@ -72,6 +73,7 @@ files:
|
|
|
72
73
|
- lib/youtube_it/request/video_upload.rb
|
|
73
74
|
- lib/youtube_it/response/video_search.rb
|
|
74
75
|
- lib/youtube_it/version.rb
|
|
76
|
+
- pkg/youtube_it-1.3.1.gem
|
|
75
77
|
- test/files/youtube_video_response.xml
|
|
76
78
|
- test/helper.rb
|
|
77
79
|
- test/test.mov
|