youtube_it 2.1.4 → 2.1.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.rdoc +57 -5
- data/lib/youtube_it.rb +3 -3
- data/lib/youtube_it/chain_io.rb +1 -1
- data/lib/youtube_it/client.rb +48 -11
- data/lib/youtube_it/model/comment.rb +3 -3
- data/lib/youtube_it/model/playlist.rb +1 -1
- data/lib/youtube_it/model/user.rb +7 -0
- data/lib/youtube_it/model/video.rb +37 -4
- data/lib/youtube_it/parser.rb +269 -218
- data/lib/youtube_it/request/base_search.rb +4 -0
- data/lib/youtube_it/request/video_search.rb +20 -4
- data/lib/youtube_it/request/video_upload.rb +166 -70
- data/lib/youtube_it/version.rb +1 -1
- data/youtube_it.gemspec +20 -91
- metadata +72 -134
- data/Gemfile +0 -12
- data/Gemfile.lock +0 -43
- data/Manifest.txt +0 -37
- data/Rakefile +0 -58
- data/VERSION +0 -1
- data/test/files/recorded_response.xml +0 -1
- data/test/files/youtube_video_response.xml +0 -53
- data/test/helper.rb +0 -9
- data/test/test.mov +0 -0
- data/test/test_chain_io.rb +0 -63
- data/test/test_client.rb +0 -454
- data/test/test_field_search.rb +0 -48
- data/test/test_video.rb +0 -48
- data/test/test_video_feed_parser.rb +0 -271
- data/test/test_video_search.rb +0 -147
data/Rakefile
DELETED
@@ -1,58 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
require 'rubygems'
|
4
|
-
require 'bundler'
|
5
|
-
begin
|
6
|
-
Bundler.setup(:default, :test)
|
7
|
-
rescue Bundler::BundlerError => e
|
8
|
-
$stderr.puts e.message
|
9
|
-
$stderr.puts "Run `bundle install` to install missing gems"
|
10
|
-
exit e.status_code
|
11
|
-
end
|
12
|
-
require 'rake'
|
13
|
-
|
14
|
-
require 'jeweler'
|
15
|
-
Jeweler::Tasks.new do |gem|
|
16
|
-
# gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
|
17
|
-
gem.name = "youtube_it"
|
18
|
-
gem.summary = %Q{The most complete Ruby wrapper for youtube api's}
|
19
|
-
gem.description = %Q{Upload, delete, update, comment on youtube videos all from one gem.}
|
20
|
-
gem.email = "kylejginavan@gmail.com"
|
21
|
-
gem.homepage = "http://github.com/kylejginavan/youtube_it"
|
22
|
-
gem.authors = ["kylejginavan","chebyte", "mseppae"]
|
23
|
-
# dependencies defined in Gemfile
|
24
|
-
end
|
25
|
-
Jeweler::RubygemsDotOrgTasks.new
|
26
|
-
|
27
|
-
require 'rake/testtask'
|
28
|
-
Rake::TestTask.new(:test) do |test|
|
29
|
-
test.libs << 'test'
|
30
|
-
test.pattern = 'test/**/test_*.rb'
|
31
|
-
test.verbose = true
|
32
|
-
end
|
33
|
-
|
34
|
-
begin
|
35
|
-
require 'rcov/rcovtask'
|
36
|
-
Rcov::RcovTask.new do |test|
|
37
|
-
test.libs << 'test'
|
38
|
-
test.pattern = 'test/**/test_*.rb'
|
39
|
-
test.verbose = true
|
40
|
-
end
|
41
|
-
rescue LoadError
|
42
|
-
task :rcov do
|
43
|
-
abort "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov"
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
task :default => :test
|
48
|
-
|
49
|
-
require 'rake/rdoctask'
|
50
|
-
Rake::RDocTask.new do |rdoc|
|
51
|
-
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
52
|
-
|
53
|
-
rdoc.rdoc_dir = 'rdoc'
|
54
|
-
rdoc.title = "constantations #{version}"
|
55
|
-
rdoc.rdoc_files.include('README*')
|
56
|
-
rdoc.rdoc_files.include('lib/**/*.rb')
|
57
|
-
end
|
58
|
-
|
data/VERSION
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
2.1.4
|
@@ -1 +0,0 @@
|
|
1
|
-
<?xml version='1.0' encoding='UTF-8'?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:app='http://www.w3.org/2007/app' xmlns:media='http://search.yahoo.com/mrss/' xmlns:gd='http://schemas.google.com/g/2005' xmlns:yt='http://gdata.youtube.com/schemas/2007'><entry gd:etag='W/"C08NSH47eCp7ImA9WhZXGUU."'><id>tag:youtube.com,2008:video:z8zIecfFRjM</id><published>2011-01-28T20:32:47.000Z</published><updated>2011-05-09T22:58:19.000Z</updated><category scheme='http://schemas.google.com/g/2005#kind' term='http://gdata.youtube.com/schemas/2007#video'/><category scheme='http://gdata.youtube.com/schemas/2007/categories.cat' term='Music' label='Music'/><category scheme='http://gdata.youtube.com/schemas/2007/keywords.cat' term='School Jam USA'/><category scheme='http://gdata.youtube.com/schemas/2007/keywords.cat' term='lennon bus live'/><category scheme='http://gdata.youtube.com/schemas/2007/keywords.cat' term='lennon bus'/><category scheme='http://gdata.youtube.com/schemas/2007/keywords.cat' term='lennon'/><category scheme='http://gdata.youtube.com/schemas/2007/keywords.cat' term='john lennon'/><category scheme='http://gdata.youtube.com/schemas/2007/keywords.cat' term='ac/dc'/><category scheme='http://gdata.youtube.com/schemas/2007/keywords.cat' term='motley crue'/><category scheme='http://gdata.youtube.com/schemas/2007/keywords.cat' term='namm 2011'/><category scheme='http://gdata.youtube.com/schemas/2007/keywords.cat' term='namm'/><title>Lennon Bus Live: Peligro - "Hollywood Red"</title><content type='application/x-shockwave-flash' src='http://www.youtube.com/v/z8zIecfFRjM?f=videos&app=youtube_gdata'/><link rel='alternate' type='text/html' href='http://www.youtube.com/watch?v=z8zIecfFRjM&feature=youtube_gdata'/><link rel='http://gdata.youtube.com/schemas/2007#video.responses' type='application/atom+xml' href='http://gdata.youtube.com/feeds/api/videos/z8zIecfFRjM/responses?v=2'/><link rel='http://gdata.youtube.com/schemas/2007#video.related' type='application/atom+xml' href='http://gdata.youtube.com/feeds/api/videos/z8zIecfFRjM/related?v=2'/><link rel='http://gdata.youtube.com/schemas/2007#mobile' type='text/html' href='http://m.youtube.com/details?v=z8zIecfFRjM'/><link rel='self' type='application/atom+xml' href='http://gdata.youtube.com/feeds/api/videos/z8zIecfFRjM?v=2'/><author><name>johnlennonbus</name><uri>http://gdata.youtube.com/feeds/api/users/johnlennonbus</uri></author><yt:accessControl action='comment' permission='allowed'/><yt:accessControl action='commentVote' permission='allowed'/><yt:accessControl action='videoRespond' permission='moderated'/><yt:accessControl action='rate' permission='allowed'/><yt:accessControl action='embed' permission='allowed'/><yt:accessControl action='list' permission='allowed'/><yt:accessControl action='syndicate' permission='allowed'/><gd:comments><gd:feedLink href='http://gdata.youtube.com/feeds/api/videos/z8zIecfFRjM/comments?v=2' countHint='28'/></gd:comments><yt:location>Anaheim, Ca</yt:location><media:group><media:category label='Music' scheme='http://gdata.youtube.com/schemas/2007/categories.cat'>Music</media:category><media:content url='http://www.youtube.com/v/z8zIecfFRjM?f=videos&app=youtube_gdata' type='application/x-shockwave-flash' medium='video' isDefault='true' expression='full' duration='192' yt:format='5'/><media:content url='rtsp://v6.cache2.c.youtube.com/CiILENy73wIaGQkzRsXHecjMzxMYDSANFEgGUgZ2aWRlb3MM/0/0/0/video.3gp' type='video/3gpp' medium='video' expression='full' duration='192' yt:format='1'/><media:content url='rtsp://v3.cache5.c.youtube.com/CiILENy73wIaGQkzRsXHecjMzxMYESARFEgGUgZ2aWRlb3MM/0/0/0/video.3gp' type='video/3gpp' medium='video' expression='full' duration='192' yt:format='6'/><media:credit role='uploader' scheme='urn:youtube'>johnlennonbus</media:credit><media:description type='plain'>At NAMM 2011, School Jam USA winners Peligro had the opportunity to come aboard the John Lennon Educational Tour Bus to record a song and shoot a music video. These young rockers would not seem out of place alongside AC/DC or Mötley Crüe. Be Sure to check them out as they rock out during a Lennon Bus Live Session, performing their hit, Hollywood Red</media:description><media:keywords>School Jam USA, lennon bus live, lennon bus, lennon, john lennon, ac/dc, motley crue, namm 2011, namm</media:keywords><media:player url='http://www.youtube.com/watch?v=z8zIecfFRjM&feature=youtube_gdata_player'/><media:thumbnail url='http://i.ytimg.com/vi/z8zIecfFRjM/default.jpg' height='90' width='120' time='00:01:36' yt:name='default'/><media:thumbnail url='http://i.ytimg.com/vi/z8zIecfFRjM/hqdefault.jpg' height='360' width='480' yt:name='hqdefault'/><media:thumbnail url='http://i.ytimg.com/vi/z8zIecfFRjM/1.jpg' height='90' width='120' time='00:00:48' yt:name='start'/><media:thumbnail url='http://i.ytimg.com/vi/z8zIecfFRjM/2.jpg' height='90' width='120' time='00:01:36' yt:name='middle'/><media:thumbnail url='http://i.ytimg.com/vi/z8zIecfFRjM/3.jpg' height='90' width='120' time='00:02:24' yt:name='end'/><media:title type='plain'>Lennon Bus Live: Peligro - "Hollywood Red"</media:title><yt:aspectRatio>widescreen</yt:aspectRatio><yt:duration seconds='192'/><yt:uploaded>2011-01-28T20:32:47.000Z</yt:uploaded><yt:videoid>z8zIecfFRjM</yt:videoid></media:group><gd:rating average='4.894737' max='5' min='1' numRaters='38' rel='http://schemas.google.com/g/2005#overall'/><yt:recorded>2011-01-16</yt:recorded><yt:statistics favoriteCount='21' viewCount='3648'/><yt:rating numDislikes='1' numLikes='37'/></entry></feed>
|
@@ -1,53 +0,0 @@
|
|
1
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
-
<entry xmlns="http://www.w3.org/2005/Atom" xmlns:media="http://search.yahoo.com/mrss/" xmlns:gd="http://schemas.google.com/g/2005" xmlns:yt="http://gdata.youtube.com/schemas/2007" gd:etag="W/"A0UBR347eCp7ImA9Wx9bFEs."">
|
3
|
-
<id>tag:youtube.com,2008:video:AbC123DeFgH</id>
|
4
|
-
<published>2010-12-29T13:57:49.000Z</published>
|
5
|
-
<updated>2011-02-23T13:54:16.000Z</updated>
|
6
|
-
<category scheme="http://schemas.google.com/g/2005#kind" term="http://gdata.youtube.com/schemas/2007#video"/>
|
7
|
-
<category scheme="http://gdata.youtube.com/schemas/2007/categories.cat" term="Test" label="Test"/>
|
8
|
-
<category scheme="http://gdata.youtube.com/schemas/2007/keywords.cat" term="test"/>
|
9
|
-
<title>YouTube Test Video</title>
|
10
|
-
<content type="application/x-shockwave-flash" src="http://www.youtube.com/v/YTAbC123DeF?f=videos&app=youtube_gdata"/>
|
11
|
-
<link rel="alternate" type="text/html" href="http://www.youtube.com/watch?v=AbC123DeFgH&feature=youtube_gdata"/>
|
12
|
-
<link rel="http://gdata.youtube.com/schemas/2007#video.responses" type="application/atom+xml" href="http://gdata.youtube.com/feeds/api/videos/AbC123DeFgH/responses?v=2"/>
|
13
|
-
<link rel="http://gdata.youtube.com/schemas/2007#video.related" type="application/atom+xml" href="http://gdata.youtube.com/feeds/api/videos/AbC123DeFgH/related?v=2"/>
|
14
|
-
<link rel="http://gdata.youtube.com/schemas/2007#mobile" type="text/html" href="http://m.youtube.com/details?v=AbC123DeFgH"/>
|
15
|
-
<link rel="self" type="application/atom+xml" href="http://gdata.youtube.com/feeds/api/videos/AbC123DeFgH?v=2"/>
|
16
|
-
<author>
|
17
|
-
<name>Test user</name>
|
18
|
-
<uri>http://gdata.youtube.com/feeds/api/users/test_user</uri>
|
19
|
-
</author>
|
20
|
-
<yt:accessControl action="comment" permission="allowed"/>
|
21
|
-
<yt:accessControl action="commentVote" permission="allowed"/>
|
22
|
-
<yt:accessControl action="videoRespond" permission="moderated"/>
|
23
|
-
<yt:accessControl action="rate" permission="allowed"/>
|
24
|
-
<yt:accessControl action="embed" permission="allowed"/>
|
25
|
-
<yt:accessControl action="list" permission="allowed"/>
|
26
|
-
<yt:accessControl action="syndicate" permission="allowed"/>
|
27
|
-
<gd:comments>
|
28
|
-
<gd:feedLink href="http://gdata.youtube.com/feeds/api/videos/AbC123DeFgH/comments?v=2" countHint="1000"/>
|
29
|
-
</gd:comments>
|
30
|
-
<media:group>
|
31
|
-
<media:category label="Sports" scheme="http://gdata.youtube.com/schemas/2007/categories.cat">Test</media:category>
|
32
|
-
<media:content url="http://www.youtube.com/v/AbC123DeFgH?f=videos&app=youtube_gdata" type="application/x-shockwave-flash" medium="video" isDefault="true" expression="full" duration="356" yt:format="5"/>
|
33
|
-
<media:content url="rtsp://v7.cache6.c.youtube.com/TESTCACHE/0/0/0/video.3gp" type="video/3gpp" medium="video" expression="full" duration="356" yt:format="1"/>
|
34
|
-
<media:content url="rtsp://v8.cache7.c.youtube.com/TESTCACHE/0/0/0/video.3gp" type="video/3gpp" medium="video" expression="full" duration="356" yt:format="6"/>
|
35
|
-
<media:credit role="uploader" scheme="urn:youtube" yt:type="partner">Test user</media:credit>
|
36
|
-
<media:description type="plain">Youtube Test Video</media:description>
|
37
|
-
<media:keywords>Test, Youtube, Youtube_it, Ruby</media:keywords>
|
38
|
-
<media:player url="http://www.youtube.com/watch?v=AbC123DeFgH&feature=youtube_gdata_player"/>
|
39
|
-
<media:thumbnail url="http://i.ytimg.com/vi/AbC123DeFgH/default.jpg" height="90" width="120" time="00:02:58" yt:name="default"/>
|
40
|
-
<media:thumbnail url="http://i.ytimg.com/vi/AbC123DeFgH/hqdefault.jpg" height="360" width="480" yt:name="hqdefault"/>
|
41
|
-
<media:thumbnail url="http://i.ytimg.com/vi/AbC123DeFgH/1.jpg" height="90" width="120" time="00:01:29" yt:name="start"/>
|
42
|
-
<media:thumbnail url="http://i.ytimg.com/vi/AbC123DeFgH/2.jpg" height="90" width="120" time="00:02:58" yt:name="middle"/>
|
43
|
-
<media:thumbnail url="http://i.ytimg.com/vi/AbC123DeFgH/3.jpg" height="90" width="120" time="00:04:27" yt:name="end"/>
|
44
|
-
<media:title type="plain">Ich sterbe für YouTube</media:title>
|
45
|
-
<yt:aspectRatio>widescreen</yt:aspectRatio>
|
46
|
-
<yt:duration seconds="356"/>
|
47
|
-
<yt:uploaded>2010-12-29T13:57:49.000Z</yt:uploaded>
|
48
|
-
<yt:videoid>AbC123DeFgH</yt:videoid>
|
49
|
-
</media:group>
|
50
|
-
<gd:rating average="4.305027" max="5" min="1" numRaters="2049" rel="http://schemas.google.com/g/2005#overall"/>
|
51
|
-
<yt:statistics favoriteCount="200" viewCount="240000"/>
|
52
|
-
<yt:rating numDislikes="350" numLikes="1700"/>
|
53
|
-
</entry>
|
data/test/helper.rb
DELETED
data/test/test.mov
DELETED
Binary file
|
data/test/test_chain_io.rb
DELETED
@@ -1,63 +0,0 @@
|
|
1
|
-
require File.expand_path(File.dirname(__FILE__) + '/helper')
|
2
|
-
|
3
|
-
class TestChainIO < Test::Unit::TestCase
|
4
|
-
def setup
|
5
|
-
@klass = YouTubeIt::ChainIO # save typing
|
6
|
-
end
|
7
|
-
|
8
|
-
def test_should_support_read_from_one_io
|
9
|
-
io = @klass.new "abcd"
|
10
|
-
assert io.respond_to?(:read)
|
11
|
-
assert_equal "ab", io.read(2)
|
12
|
-
assert_equal "cd", io.read(2)
|
13
|
-
assert_equal false, io.read(2)
|
14
|
-
end
|
15
|
-
|
16
|
-
def test_should_skip_over_depleted_streams
|
17
|
-
io = @klass.new '', '', '', '', 'ab'
|
18
|
-
assert_equal 'ab', io.read(2)
|
19
|
-
end
|
20
|
-
|
21
|
-
def test_should_read_across_nultiple_streams_with_large_offset
|
22
|
-
io = @klass.new 'abc', '', 'def', '', 'ghij'
|
23
|
-
assert_equal 'abcdefgh', io.read(8)
|
24
|
-
end
|
25
|
-
|
26
|
-
def test_should_return_false_for_empty_items
|
27
|
-
io = @klass.new '', '', '', '', ''
|
28
|
-
assert_equal false, io.read(8)
|
29
|
-
end
|
30
|
-
|
31
|
-
def test_should_support_overzealous_read
|
32
|
-
io = @klass.new "ab"
|
33
|
-
assert_equal "ab", io.read(5000)
|
34
|
-
end
|
35
|
-
|
36
|
-
def test_should_predict_expected_length
|
37
|
-
io = @klass.new "ab", "cde"
|
38
|
-
assert_equal 5, io.expected_length
|
39
|
-
end
|
40
|
-
|
41
|
-
def test_should_predict_expected_length_with_prepositioned_io
|
42
|
-
first_buf = StringIO.new("ab")
|
43
|
-
first_buf.read(1)
|
44
|
-
|
45
|
-
io = @klass.new first_buf, "cde"
|
46
|
-
assert_equal 4, io.expected_length
|
47
|
-
end
|
48
|
-
|
49
|
-
def test_should_predict_expected_length_with_file_handle
|
50
|
-
test_size = File.size(__FILE__)
|
51
|
-
first_buf = StringIO.new("ab")
|
52
|
-
first_buf.read(1)
|
53
|
-
|
54
|
-
io = @klass.new File.open(__FILE__), first_buf
|
55
|
-
assert_equal test_size + 1, io.expected_length
|
56
|
-
end
|
57
|
-
|
58
|
-
def test_greedy
|
59
|
-
io = YouTubeIt::GreedyChainIO.new("a" * (1024 * 513))
|
60
|
-
chunk = io.read(123)
|
61
|
-
assert_equal 1024 * 512, chunk.length, "Should have read the first 512 KB chunk at once instead"
|
62
|
-
end
|
63
|
-
end
|
data/test/test_client.rb
DELETED
@@ -1,454 +0,0 @@
|
|
1
|
-
#encoding: utf-8
|
2
|
-
|
3
|
-
require File.expand_path(File.dirname(__FILE__) + '/helper')
|
4
|
-
|
5
|
-
class TestClient < Test::Unit::TestCase
|
6
|
-
|
7
|
-
OPTIONS = {:title => "test title",
|
8
|
-
:description => "test description",
|
9
|
-
:category => 'People',
|
10
|
-
:keywords => %w[test]}
|
11
|
-
ACCOUNT = {:user => "tubeit20101", :passwd => "youtube_it", :dev_key => "AI39si411VBmO4Im9l0rfRsORXDI6F5AX5NlTIA4uHSWqa-Cgf-jUQG-6osUBB3PTLawLHlkKXPLr3B0pNcGU9wkNd11gIgdPg" }
|
12
|
-
RAILS_ENV = "test"
|
13
|
-
|
14
|
-
def setup
|
15
|
-
#clientlogin
|
16
|
-
@client = YouTubeIt::Client.new(:username => ACCOUNT[:user], :password => ACCOUNT[:passwd] , :dev_key => ACCOUNT[:dev_key])
|
17
|
-
#authsub
|
18
|
-
#@client = YouTubeIt::AuthSubClient.new(:token => "1/vqYlJytmn4eWRjJnORHT94mENNfZzZsLutMOrvvygB4" , :dev_key => ACCOUNT[:dev_key])
|
19
|
-
end
|
20
|
-
|
21
|
-
def test_should_respond_to_a_basic_query
|
22
|
-
response = @client.videos_by(:query => "penguin")
|
23
|
-
|
24
|
-
assert_equal "tag:youtube.com,2008:videos", response.feed_id
|
25
|
-
assert_equal 25, response.max_result_count
|
26
|
-
assert_equal 25, response.videos.length
|
27
|
-
assert_equal 1, response.offset
|
28
|
-
assert(response.total_result_count > 100)
|
29
|
-
assert_instance_of Time, response.updated_at
|
30
|
-
|
31
|
-
response.videos.each { |v| assert_valid_video v }
|
32
|
-
end
|
33
|
-
|
34
|
-
def test_should_respond_to_a_basic_query_with_offset_and_max_results
|
35
|
-
response = @client.videos_by(:query => "penguin", :offset => 15, :max_results => 30)
|
36
|
-
|
37
|
-
assert_equal "tag:youtube.com,2008:videos", response.feed_id
|
38
|
-
assert_equal 30, response.max_result_count
|
39
|
-
assert_equal 30, response.videos.length
|
40
|
-
assert_equal 15, response.offset
|
41
|
-
assert(response.total_result_count > 100)
|
42
|
-
assert_instance_of Time, response.updated_at
|
43
|
-
|
44
|
-
response.videos.each { |v| assert_valid_video v }
|
45
|
-
end
|
46
|
-
|
47
|
-
def test_should_respond_to_a_basic_query_with_paging
|
48
|
-
response = @client.videos_by(:query => "penguin")
|
49
|
-
assert_equal "tag:youtube.com,2008:videos", response.feed_id
|
50
|
-
assert_equal 25, response.max_result_count
|
51
|
-
assert_equal 1, response.offset
|
52
|
-
|
53
|
-
response = @client.videos_by(:query => "penguin", :page => 2)
|
54
|
-
assert_equal "tag:youtube.com,2008:videos", response.feed_id
|
55
|
-
assert_equal 25, response.max_result_count
|
56
|
-
assert_equal 26, response.offset
|
57
|
-
|
58
|
-
response2 = @client.videos_by(:query => "penguin", :page => 3)
|
59
|
-
assert_equal "tag:youtube.com,2008:videos", response2.feed_id
|
60
|
-
assert_equal 25, response2.max_result_count
|
61
|
-
assert_equal 51, response2.offset
|
62
|
-
end
|
63
|
-
|
64
|
-
def test_should_get_videos_for_multiword_metasearch_query
|
65
|
-
response = @client.videos_by(:query => 'christina ricci')
|
66
|
-
|
67
|
-
assert_equal "tag:youtube.com,2008:videos", response.feed_id
|
68
|
-
assert_equal 25, response.max_result_count
|
69
|
-
assert_equal 25, response.videos.length
|
70
|
-
assert_equal 1, response.offset
|
71
|
-
assert(response.total_result_count > 100)
|
72
|
-
assert_instance_of Time, response.updated_at
|
73
|
-
|
74
|
-
response.videos.each { |v| assert_valid_video v }
|
75
|
-
end
|
76
|
-
|
77
|
-
def test_should_handle_video_not_yet_viewed
|
78
|
-
response = @client.videos_by(:query => "CE62FSEoY28")
|
79
|
-
|
80
|
-
assert_equal 1, response.videos.length
|
81
|
-
response.videos.each { |v| assert_valid_video v }
|
82
|
-
end
|
83
|
-
|
84
|
-
def test_should_get_videos_for_one_tag
|
85
|
-
response = @client.videos_by(:tags => ['panther'])
|
86
|
-
response.videos.each { |v| assert_valid_video v }
|
87
|
-
end
|
88
|
-
|
89
|
-
def test_should_get_videos_for_multiple_tags
|
90
|
-
response = @client.videos_by(:tags => ['tiger', 'leopard'])
|
91
|
-
response.videos.each { |v| assert_valid_video v }
|
92
|
-
end
|
93
|
-
|
94
|
-
def test_should_get_videos_for_one_category
|
95
|
-
response = @client.videos_by(:categories => [:news])
|
96
|
-
response.videos.each { |v| assert_valid_video v }
|
97
|
-
end
|
98
|
-
|
99
|
-
def test_should_get_videos_for_multiple_categories
|
100
|
-
response = @client.videos_by(:categories => [:news, :sports])
|
101
|
-
response.videos.each { |v| assert_valid_video v }
|
102
|
-
end
|
103
|
-
|
104
|
-
# TODO: Need to do more specific checking in these tests
|
105
|
-
# Currently, if a URL is valid, and videos are found, the test passes regardless of search criteria
|
106
|
-
def test_should_get_videos_for_categories_and_tags
|
107
|
-
response = @client.videos_by(:categories => [:news, :sports], :tags => ['soccer', 'football'])
|
108
|
-
response.videos.each { |v| assert_valid_video v }
|
109
|
-
end
|
110
|
-
|
111
|
-
def test_should_get_most_viewed_videos
|
112
|
-
response = @client.videos_by(:most_viewed)
|
113
|
-
response.videos.each { |v| assert_valid_video v }
|
114
|
-
end
|
115
|
-
|
116
|
-
def test_should_get_top_rated_videos_for_today
|
117
|
-
response = @client.videos_by(:top_rated, :time => :today)
|
118
|
-
response.videos.each { |v| assert_valid_video v }
|
119
|
-
end
|
120
|
-
|
121
|
-
def test_should_get_videos_for_categories_and_tags_with_category_boolean_operators
|
122
|
-
response = @client.videos_by(:categories => { :either => [:news, :sports], :exclude => [:comedy] },
|
123
|
-
:tags => { :include => ['football'], :exclude => ['soccer'] })
|
124
|
-
response.videos.each { |v| assert_valid_video v }
|
125
|
-
end
|
126
|
-
|
127
|
-
def test_should_get_videos_for_categories_and_tags_with_tag_boolean_operators
|
128
|
-
response = @client.videos_by(:categories => { :either => [:news, :sports], :exclude => [:comedy] },
|
129
|
-
:tags => { :either => ['football', 'soccer', 'polo'] })
|
130
|
-
response.videos.each { |v| assert_valid_video v }
|
131
|
-
end
|
132
|
-
|
133
|
-
def test_should_get_videos_by_user
|
134
|
-
response = @client.videos_by(:user => 'liz')
|
135
|
-
response.videos.each { |v| assert_valid_video v }
|
136
|
-
end
|
137
|
-
|
138
|
-
def test_should_get_videos_by_user_with_pagination_and_ordering
|
139
|
-
response = @client.videos_by(:user => 'liz', :page => 2, :per_page => '2', :order_by => 'published')
|
140
|
-
response.videos.each { |v| assert_valid_video v }
|
141
|
-
assert_equal 3, response.offset
|
142
|
-
assert_equal 2, response.max_result_count
|
143
|
-
end
|
144
|
-
|
145
|
-
|
146
|
-
def test_should_get_favorite_videos_by_user
|
147
|
-
response = @client.videos_by(:favorites, :user => 'drnicwilliams')
|
148
|
-
assert_equal "tag:youtube.com,2008:user:drnicwilliams:favorites", response.feed_id
|
149
|
-
assert_valid_video response.videos.first
|
150
|
-
end
|
151
|
-
|
152
|
-
def test_should_get_videos_for_query_search_with_categories_excluded
|
153
|
-
video = @client.video_by("EkF4JD2rO3Q")
|
154
|
-
assert_equal "<object width=\"425\" height=\"350\">\n <param name=\"movie\" value=\"http://www.youtube.com/v/EkF4JD2rO3Q&feature=youtube_gdata_player\"></param>\n <param name=\"wmode\" value=\"transparent\"></param>\n <embed src=\"http://www.youtube.com/v/EkF4JD2rO3Q&feature=youtube_gdata_player\" type=\"application/x-shockwave-flash\"\n wmode=\"transparent\" width=\"425\" height=\"350\"></embed>\n</object>\n", video.embed_html
|
155
|
-
assert_valid_video video
|
156
|
-
end
|
157
|
-
|
158
|
-
def test_should_get_video_from_user
|
159
|
-
video = @client.video_by_user("chebyte","FQK1URcxmb4")
|
160
|
-
assert_equal "<object width=\"425\" height=\"350\">\n <param name=\"movie\" value=\"http://www.youtube.com/v/FQK1URcxmb4&feature=youtube_gdata_player\"></param>\n <param name=\"wmode\" value=\"transparent\"></param>\n <embed src=\"http://www.youtube.com/v/FQK1URcxmb4&feature=youtube_gdata_player\" type=\"application/x-shockwave-flash\"\n wmode=\"transparent\" width=\"425\" height=\"350\"></embed>\n</object>\n", video.embed_html
|
161
|
-
assert_valid_video video
|
162
|
-
end
|
163
|
-
|
164
|
-
def test_should_always_return_a_logger
|
165
|
-
@client = YouTubeIt::Client.new
|
166
|
-
assert_not_nil @client.logger
|
167
|
-
end
|
168
|
-
|
169
|
-
def test_should_not_bail_if_debug_is_true
|
170
|
-
assert_nothing_raised { YouTubeIt::Client.new(:debug => true) }
|
171
|
-
end
|
172
|
-
|
173
|
-
def test_should_determine_if_embeddable_video_is_embeddable
|
174
|
-
response = @client.videos_by(:query => "strongbad")
|
175
|
-
|
176
|
-
video = response.videos.first
|
177
|
-
assert video.embeddable?
|
178
|
-
end
|
179
|
-
|
180
|
-
def test_should_retrieve_video_by_id
|
181
|
-
video = @client.video_by("http://gdata.youtube.com/feeds/videos/EkF4JD2rO3Q")
|
182
|
-
assert_valid_video video
|
183
|
-
|
184
|
-
video = @client.video_by("EkF4JD2rO3Q")
|
185
|
-
assert_valid_video video
|
186
|
-
end
|
187
|
-
|
188
|
-
def test_return_upload_info_for_upload_from_browser
|
189
|
-
response = @client.upload_token(OPTIONS)
|
190
|
-
assert response.kind_of?(Hash)
|
191
|
-
assert_equal response.size, 2
|
192
|
-
response.each do |k,v|
|
193
|
-
assert v
|
194
|
-
end
|
195
|
-
end
|
196
|
-
|
197
|
-
def test_should_upload_a_video
|
198
|
-
video = @client.video_upload(File.open("test/test.mov"), OPTIONS)
|
199
|
-
assert_valid_video video
|
200
|
-
@client.video_delete(video.unique_id)
|
201
|
-
end
|
202
|
-
|
203
|
-
def test_should_update_a_video
|
204
|
-
OPTIONS[:title] = "title changed"
|
205
|
-
video = @client.video_upload(File.open("test/test.mov"), OPTIONS)
|
206
|
-
updated_video = @client.video_update(video.unique_id, OPTIONS)
|
207
|
-
assert updated_video.title == "title changed"
|
208
|
-
@client.video_delete(video.unique_id)
|
209
|
-
end
|
210
|
-
|
211
|
-
def test_should_delete_video
|
212
|
-
video = @client.video_upload(File.open("test/test.mov"), OPTIONS)
|
213
|
-
assert_valid_video video
|
214
|
-
assert @client.video_delete(video.unique_id)
|
215
|
-
end
|
216
|
-
|
217
|
-
def test_should_denied_comments
|
218
|
-
video = @client.video_upload(File.open("test/test.mov"), OPTIONS.merge(:comment => "denied"))
|
219
|
-
assert_valid_video video
|
220
|
-
doc = open("http://www.youtube.com/watch?v=#{video.unique_id}").read
|
221
|
-
assert "Adding comments has been disabled for this video.", doc.match("Adding comments has been disabled for this video.")[0]
|
222
|
-
@client.video_delete(video.unique_id)
|
223
|
-
end
|
224
|
-
|
225
|
-
def test_should_denied_rate
|
226
|
-
video = @client.video_upload(File.open("test/test.mov"), OPTIONS.merge(:rate => "denied"))
|
227
|
-
assert_valid_video video
|
228
|
-
doc = open("http://www.youtube.com/watch?v=#{video.unique_id}").read
|
229
|
-
assert "Ratings have been disabled for this video.", doc.match("Ratings have been disabled for this video.")[0]
|
230
|
-
@client.video_delete(video.unique_id)
|
231
|
-
end
|
232
|
-
|
233
|
-
def test_should_denied_embed
|
234
|
-
video = @client.video_upload(File.open("test/test.mov"), OPTIONS.merge(:embed => "denied"))
|
235
|
-
assert video.noembed
|
236
|
-
@client.video_delete(video.unique_id)
|
237
|
-
end
|
238
|
-
|
239
|
-
|
240
|
-
def test_should_add_new_comment
|
241
|
-
video = @client.video_upload(File.open("test/test.mov"), OPTIONS)
|
242
|
-
@client.add_comment(video.unique_id, "test comment")
|
243
|
-
comment = @client.comments(video.unique_id).first.content
|
244
|
-
assert comment, "test comment"
|
245
|
-
@client.video_delete(video.unique_id)
|
246
|
-
end
|
247
|
-
|
248
|
-
def test_should_add_and_delete_video_from_playlist
|
249
|
-
playlist = @client.add_playlist(:title => "youtube_it test!", :description => "test playlist")
|
250
|
-
video = @client.add_video_to_playlist(playlist.playlist_id,"CE62FSEoY28")
|
251
|
-
assert_equal video[:code].to_i, 201
|
252
|
-
assert @client.delete_video_from_playlist(playlist.playlist_id, video[:playlist_entry_id])
|
253
|
-
assert @client.delete_playlist(playlist.playlist_id)
|
254
|
-
end
|
255
|
-
|
256
|
-
def test_should_return_unique_id_from_playlist
|
257
|
-
playlist = @client.add_playlist(:title => "youtube_it test!", :description => "test playlist")
|
258
|
-
video = @client.add_video_to_playlist(playlist.playlist_id,"CE62FSEoY28")
|
259
|
-
|
260
|
-
assert_equal "CE62FSEoY28", playlist.videos.last.unique_id
|
261
|
-
|
262
|
-
assert @client.delete_video_from_playlist(playlist.playlist_id, video[:playlist_entry_id])
|
263
|
-
assert @client.delete_playlist(playlist.playlist_id)
|
264
|
-
end
|
265
|
-
|
266
|
-
def test_should_add_and_delete_new_playlist
|
267
|
-
result = @client.add_playlist(:title => "youtube_it test4!", :description => "test playlist")
|
268
|
-
assert result.title, "youtube_it test!"
|
269
|
-
sleep 4
|
270
|
-
assert @client.delete_playlist(result.playlist_id)
|
271
|
-
end
|
272
|
-
|
273
|
-
def test_should_update_playlist
|
274
|
-
playlist = @client.add_playlist(:title => "youtube_it test!", :description => "test playlist")
|
275
|
-
playlist_updated = @client.update_playlist(playlist.playlist_id, :title => "title changed")
|
276
|
-
assert_equal playlist_updated.title, "title changed"
|
277
|
-
assert @client.delete_playlist(playlist.playlist_id)
|
278
|
-
end
|
279
|
-
|
280
|
-
def test_should_list_playlist_for_user
|
281
|
-
result = @client.playlists('chebyte')
|
282
|
-
assert result.last.title, "rock"
|
283
|
-
end
|
284
|
-
|
285
|
-
def test_should_determine_if_widescreen_video_is_widescreen
|
286
|
-
widescreen_id = 'QqQVll-MP3I'
|
287
|
-
|
288
|
-
video = @client.video_by(widescreen_id)
|
289
|
-
assert video.widescreen?
|
290
|
-
end
|
291
|
-
|
292
|
-
def test_get_current_user
|
293
|
-
assert_equal @client.current_user, 'tubeit20101'
|
294
|
-
end
|
295
|
-
|
296
|
-
def test_should_get_my_videos
|
297
|
-
video = @client.video_upload(File.open("test/test.mov"), OPTIONS)
|
298
|
-
assert_valid_video video
|
299
|
-
result = @client.my_videos
|
300
|
-
assert_equal result.videos.first.unique_id, video.unique_id
|
301
|
-
@client.video_delete(video.unique_id)
|
302
|
-
end
|
303
|
-
|
304
|
-
def test_should_get_my_video
|
305
|
-
video = @client.video_upload(File.open("test/test.mov"), OPTIONS)
|
306
|
-
assert_valid_video video
|
307
|
-
result = @client.my_video(video.unique_id)
|
308
|
-
assert_equal result.unique_id, video.unique_id
|
309
|
-
@client.video_delete(video.unique_id)
|
310
|
-
end
|
311
|
-
|
312
|
-
def test_should_add_like_to_video
|
313
|
-
r = @client.like_video("CE62FSEoY28")
|
314
|
-
assert_equal r[:code], 201
|
315
|
-
@client.dislike_video("CE62FSEoY28")
|
316
|
-
end
|
317
|
-
|
318
|
-
def test_should_dislike_to_video
|
319
|
-
@client.like_video("CE62FSEoY28")
|
320
|
-
r = @client.dislike_video("CE62FSEoY28")
|
321
|
-
assert_equal r[:code], 201
|
322
|
-
end
|
323
|
-
|
324
|
-
|
325
|
-
def test_should_subscribe_to_channel
|
326
|
-
r = @client.subscribe_channel("TheWoWArthas")
|
327
|
-
sleep(4)
|
328
|
-
assert_equal r[:code], 201
|
329
|
-
assert_equal @client.subscriptions.first.title, "Videos published by: TheWoWArthas"
|
330
|
-
@client.unsubscribe_channel(@client.subscriptions.first.id)
|
331
|
-
end
|
332
|
-
|
333
|
-
def test_should_unsubscribe_to_channel
|
334
|
-
@client.subscribe_channel("TheWoWArthas")
|
335
|
-
sleep(4)
|
336
|
-
r = @client.unsubscribe_channel(@client.subscriptions.first.id)
|
337
|
-
assert_equal r[:code], 200
|
338
|
-
end
|
339
|
-
|
340
|
-
def test_should_list_subscriptions
|
341
|
-
@client.subscribe_channel("TheWoWArthas")
|
342
|
-
sleep(4)
|
343
|
-
assert @client.subscriptions.count == 1
|
344
|
-
assert_equal @client.subscriptions.first.title, "Videos published by: TheWoWArthas"
|
345
|
-
@client.unsubscribe_channel(@client.subscriptions.first.id)
|
346
|
-
end
|
347
|
-
|
348
|
-
def test_should_get_profile
|
349
|
-
profile = @client.profile
|
350
|
-
assert_equal profile.username, "tubeit20101"
|
351
|
-
end
|
352
|
-
|
353
|
-
def test_should_add_and_delete_video_to_favorite
|
354
|
-
video_id ="j5raG94IGCc"
|
355
|
-
result = @client.add_favorite(video_id)
|
356
|
-
assert_equal result[:code], 201
|
357
|
-
sleep 4
|
358
|
-
assert @client.delete_favorite(video_id)
|
359
|
-
end
|
360
|
-
|
361
|
-
def test_esc
|
362
|
-
result = YouTubeIt.esc("спят усталые игрушки")
|
363
|
-
assert result, "спят+усталые+игрушки"
|
364
|
-
end
|
365
|
-
|
366
|
-
def test_unicode_query
|
367
|
-
videos = @client.videos_by(:query => 'спят усталые игрушки').videos
|
368
|
-
assert videos.map(&:unique_id).include?("w-7BT2CFYNU")
|
369
|
-
end
|
370
|
-
|
371
|
-
def test_return_video_by_url
|
372
|
-
video = @client.video_by("https://www.youtube.com/watch?v=EkF4JD2rO3Q")
|
373
|
-
assert_valid_video video
|
374
|
-
end
|
375
|
-
|
376
|
-
def test_configure_faraday_adapter
|
377
|
-
assert YouTubeIt.adapter == Faraday.default_adapter
|
378
|
-
YouTubeIt.adapter = :net_http
|
379
|
-
assert YouTubeIt.adapter == :net_http
|
380
|
-
end
|
381
|
-
|
382
|
-
private
|
383
|
-
|
384
|
-
def assert_valid_video (video)
|
385
|
-
# check general attributes
|
386
|
-
assert_instance_of YouTubeIt::Model::Video, video
|
387
|
-
assert_instance_of Fixnum, video.duration
|
388
|
-
assert_instance_of String, video.html_content if video.html_content
|
389
|
-
|
390
|
-
# validate media content records
|
391
|
-
video.media_content.each do |media_content|
|
392
|
-
assert_valid_url media_content.url
|
393
|
-
assert_instance_of YouTubeIt::Model::Video::Format, media_content.format
|
394
|
-
assert_instance_of String, media_content.mime_type
|
395
|
-
assert_match(/^[^\/]+\/[^\/]+$/, media_content.mime_type)
|
396
|
-
end
|
397
|
-
|
398
|
-
default_content = video.default_media_content
|
399
|
-
if default_content
|
400
|
-
assert_instance_of YouTubeIt::Model::Content, default_content
|
401
|
-
assert default_content.is_default?
|
402
|
-
end
|
403
|
-
|
404
|
-
# validate keywords
|
405
|
-
video.keywords.each { |kw| assert_instance_of(String, kw) }
|
406
|
-
|
407
|
-
# http://www.youtube.com/watch?v=IHVaXG1thXM
|
408
|
-
assert_valid_url video.player_url
|
409
|
-
assert_instance_of Time, video.published_at
|
410
|
-
|
411
|
-
# validate optionally-present rating
|
412
|
-
if video.rating
|
413
|
-
assert_instance_of YouTubeIt::Model::Rating, video.rating
|
414
|
-
assert_instance_of Float, video.rating.average
|
415
|
-
assert_instance_of Fixnum, video.rating.max
|
416
|
-
assert_instance_of Fixnum, video.rating.min
|
417
|
-
assert_instance_of Fixnum, video.rating.rater_count
|
418
|
-
end
|
419
|
-
|
420
|
-
# validate thumbnails
|
421
|
-
assert(video.thumbnails.size > 0)
|
422
|
-
|
423
|
-
assert_not_nil video.title
|
424
|
-
assert_instance_of String, video.title
|
425
|
-
assert(video.title.length > 0)
|
426
|
-
|
427
|
-
assert_instance_of Time, video.updated_at
|
428
|
-
# http://gdata.youtube.com/feeds/videos/IHVaXG1thXM
|
429
|
-
assert_valid_url video.unique_id
|
430
|
-
assert_instance_of Fixnum, video.view_count
|
431
|
-
assert_instance_of Fixnum, video.favorite_count
|
432
|
-
|
433
|
-
# validate author
|
434
|
-
assert_instance_of YouTubeIt::Model::Author, video.author
|
435
|
-
assert_instance_of String, video.author.name
|
436
|
-
assert(video.author.name.length > 0)
|
437
|
-
assert_valid_url video.author.uri
|
438
|
-
|
439
|
-
# validate categories
|
440
|
-
video.categories.each do |cat|
|
441
|
-
assert_instance_of YouTubeIt::Model::Category, cat
|
442
|
-
assert_instance_of String, cat.label
|
443
|
-
assert_instance_of String, cat.term
|
444
|
-
end
|
445
|
-
end
|
446
|
-
|
447
|
-
def assert_valid_url (url)
|
448
|
-
URI::parse(url)
|
449
|
-
return true
|
450
|
-
rescue
|
451
|
-
return false
|
452
|
-
end
|
453
|
-
end
|
454
|
-
|