rbvimeo 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/History.txt ADDED
@@ -0,0 +1,3 @@
1
+ == 0.1.0 / 2008-04-04
2
+
3
+ * Initial Release
data/Manifest.txt ADDED
@@ -0,0 +1,28 @@
1
+ History.txt
2
+ Manifest.txt
3
+ README.txt
4
+ Rakefile
5
+ bin/rbVimeo
6
+ lib/rbVimeo.rb
7
+ lib/Comment.rb
8
+ lib/Thumbnail.rb
9
+ lib/User.rb
10
+ lib/Video.rb
11
+ spec/rbVimeo_spec.rb
12
+ spec/sample_test_settings.yml
13
+ spec/Video_spec.rb
14
+ spec/XML/339189.comments.xml
15
+ spec/XML/339189.xml
16
+ spec/XML/not_found.xml
17
+ spec/spec_helper.rb
18
+ tasks/ann.rake
19
+ tasks/annotations.rake
20
+ tasks/bones.rake
21
+ tasks/doc.rake
22
+ tasks/gem.rake
23
+ tasks/manifest.rake
24
+ tasks/post_load.rake
25
+ tasks/rubyforge.rake
26
+ tasks/setup.rb
27
+ tasks/spec.rake
28
+ tasks/svn.rake
data/README.txt ADDED
@@ -0,0 +1,46 @@
1
+ rbVimeo
2
+ by Matt Pruitt
3
+ www.guitsaru.com
4
+
5
+ == DESCRIPTION:
6
+
7
+ A ruby wrapper for the Vimeo API
8
+
9
+ == FEATURES/PROBLEMS:
10
+
11
+ This does not handle authentication. It only gets public videos from Vimeo.
12
+
13
+ == SYNOPSIS:
14
+
15
+ vimeo = RBVIMEO::Vimeo.new(api_key, api_signature)
16
+ vid = vimeo.video(video_id)
17
+
18
+ == INSTALL:
19
+
20
+ In order to run the specs, first make a test_settings.yml file (a sample is
21
+ provided) using your api key and api secret.
22
+
23
+ == LICENSE:
24
+
25
+ (The MIT License)
26
+
27
+ Copyright (c) 2008
28
+
29
+ Permission is hereby granted, free of charge, to any person obtaining
30
+ a copy of this software and associated documentation files (the
31
+ 'Software'), to deal in the Software without restriction, including
32
+ without limitation the rights to use, copy, modify, merge, publish,
33
+ distribute, sublicense, and/or sell copies of the Software, and to
34
+ permit persons to whom the Software is furnished to do so, subject to
35
+ the following conditions:
36
+
37
+ The above copyright notice and this permission notice shall be
38
+ included in all copies or substantial portions of the Software.
39
+
40
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
41
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
42
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
43
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
44
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
45
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
46
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/Rakefile ADDED
@@ -0,0 +1,20 @@
1
+ # Look in the tasks/setup.rb file for the various options that can be
2
+ # configured in this Rakefile. The .rake files in the tasks directory
3
+ # are where the options are used.
4
+
5
+ load 'tasks/setup.rb'
6
+
7
+ ensure_in_path 'lib'
8
+ require 'rbVimeo'
9
+
10
+ task :default => 'spec:run'
11
+
12
+ PROJ.name = 'rbvimeo'
13
+ PROJ.authors = 'Matt Pruitt'
14
+ PROJ.email = 'guitsaru@gmail.com'
15
+ PROJ.url = 'www.guitsaru.com'
16
+ PROJ.rubyforge_name = 'rbvimeo'
17
+ PROJ.version = '0.1.0'
18
+ PROJ.spec_opts << '--color'
19
+
20
+ # EOF
data/bin/rbVimeo ADDED
@@ -0,0 +1,15 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require File.expand_path(
4
+ File.join(File.dirname(__FILE__), '..', 'lib', 'rbVimeo'))
5
+ require File.expand_path(
6
+ File.join(File.dirname(__FILE__), '..', 'lib', 'Video'))
7
+ require File.expand_path(
8
+ File.join(File.dirname(__FILE__), '..', 'lib', 'Comment'))
9
+ require File.expand_path(
10
+ File.join(File.dirname(__FILE__), '..', 'lib', 'Thumbnail'))
11
+ require File.expand_path(
12
+ File.join(File.dirname(__FILE__), '..', 'lib', 'User'))
13
+ # Put your code here
14
+
15
+ # EOF
data/lib/Comment.rb ADDED
@@ -0,0 +1,14 @@
1
+ module RBVIMEO
2
+ class Comment
3
+ attr_accessor :id, :author, :authorname, :date, :url, :text, :portraits
4
+ def initialize(id, author, authorname, date, url, text, portraits)
5
+ @id = id
6
+ @author = author
7
+ @authorname = authorname
8
+ @date = date
9
+ @url = url
10
+ @text = text.chomp.strip
11
+ @portraits = portraits
12
+ end
13
+ end
14
+ end
data/lib/Thumbnail.rb ADDED
@@ -0,0 +1,10 @@
1
+ module RBVIMEO
2
+ class Thumbnail
3
+ attr_accessor :url, :width, :height
4
+ def initialize(url, width, height)
5
+ @url = url
6
+ @width = width
7
+ @height = height
8
+ end
9
+ end
10
+ end
data/lib/User.rb ADDED
@@ -0,0 +1,7 @@
1
+ require File.join(File.dirname(__FILE__), %w[rbVimeo])
2
+
3
+ module RBVIMEO
4
+ class User
5
+ attr_accessor :id, :username, :fullname
6
+ end
7
+ end
data/lib/Video.rb ADDED
@@ -0,0 +1,135 @@
1
+ require 'net/http'
2
+ require 'rexml/document'
3
+ require File.join(File.dirname(__FILE__), %w[rbVimeo])
4
+ require File.join(File.dirname(__FILE__), %w[User])
5
+ require File.join(File.dirname(__FILE__), %w[Thumbnail])
6
+ require File.join(File.dirname(__FILE__), %w[Comment])
7
+
8
+ module RBVIMEO
9
+ class Video
10
+ attr_reader :id, :title, :caption, :upload_date, :likes, :plays
11
+ attr_reader :num_comments, :width, :height, :owner, :tags, :url
12
+ attr_reader :thumbs, :comments
13
+
14
+ # Fetches data about a video from the Vimeo site
15
+ # id is the id of the the Vimeo video
16
+ # vimeo is an instance of RBVIMEO::Vimeo
17
+ #
18
+ # To load a movie with vimeo id 339189:
19
+ # @vimeo = RBVIMEO::Vimeo.new api_key, api_secret
20
+ # video = RBVIMEO::Video.new 339189, @vimeo
21
+ def initialize id, vimeo, xml=nil
22
+ @thumbs = Array.new
23
+ @comments = Array.new
24
+ @id = id
25
+ url = vimeo.generate_url({"method" => "vimeo.videos.getInfo",
26
+ "video_id" => id, "api_key" => vimeo.api_key}, "read")
27
+ unless xml
28
+ #does not get covered by specs because we get an internal xml file
29
+ xml_data = Net::HTTP.get_response(URI.parse(url)).body
30
+ else
31
+ xml_data = File.open(xml)
32
+ end
33
+ xml_doc = REXML::Document.new(xml_data)
34
+
35
+ return @id = -1 if parse_xml(xml_doc).nil?
36
+ get_comments id, vimeo, xml
37
+
38
+ end
39
+
40
+ # Parses data using the xml recieved from the Vimeo REST API
41
+ # Should not need to be called by anything other than the initialize method
42
+ def parse_xml xml_doc
43
+ if xml_doc.elements["rsp/video/title"].nil?
44
+ return nil
45
+ else
46
+ @title = xml_doc.elements["rsp/video/title"].text
47
+ @id = id
48
+ @caption = xml_doc.elements["rsp/video/caption"].text
49
+ @upload_date = xml_doc.elements["rsp/video/upload_date"].text
50
+ @likes = xml_doc.elements["rsp/video/number_of_likes"].text.to_i
51
+ @plays = xml_doc.elements["rsp/video/number_of_plays"].text.to_i
52
+ @width = xml_doc.elements["rsp/video/width"].text.to_i
53
+ @height = xml_doc.elements["rsp/video/height"].text.to_i
54
+ @num_comments =
55
+ xml_doc.elements["rsp/video/number_of_comments"].text.to_i
56
+ @owner = User.new
57
+ @owner.id = xml_doc.elements["rsp/video/owner"].attributes["id"].to_i
58
+ @owner.username =
59
+ xml_doc.elements["rsp/video/owner"].attributes["username"]
60
+ @owner.fullname =
61
+ xml_doc.elements["rsp/video/owner"].attributes["fullname"]
62
+ @url = xml_doc.elements["rsp/video/urls/url"].text
63
+
64
+ xml_doc.elements.each('rsp/video/thumbnails/thumbnail') do |thumb|
65
+ url = thumb.text
66
+ w = thumb.attributes["width"].to_i
67
+ h = thumb.attributes["height"].to_i
68
+ thumbnail = Thumbnail.new(url, w, h)
69
+ @thumbs << thumbnail
70
+ end
71
+ end
72
+ end
73
+
74
+ # Fetches the comments for the specified Video
75
+ # id is the id of the Vimeo video
76
+ # vimeo is an instance of RBVIMEO::Vimeo
77
+ # returns an Array of comments
78
+ #
79
+ # To load a movie with vimeo id 339189:
80
+ # @vimeo = RBVIMEO::Vimeo.new api_key, api_secret
81
+ # comments = video.comments 339189, @vimeo
82
+ def get_comments id, vimeo, xml=nil
83
+ comments = Array.new
84
+ url = vimeo.generate_url({"method" => "vimeo.videos.comments.getList",
85
+ "video_id" => id, "api_key" => vimeo.api_key}, "read")
86
+ unless xml
87
+ #does not get covered by specs because we get an internal xml file
88
+ xml_data = Net::HTTP.get_response(URI.parse(url)).body
89
+ else
90
+ xml_data = File.open(File.join(File.dirname(xml), File.basename(xml, '.xml')+'.comments.xml'))
91
+ end
92
+ xml_doc = REXML::Document.new(xml_data)
93
+
94
+ xml_doc.elements.each('rsp/comments/comment') do |comment|
95
+ id = comment.attributes["id"].to_i
96
+ author = comment.attributes["author"]
97
+ authorname = comment.attributes["authorname"]
98
+ date = comment.attributes["datecreate"]
99
+ url = comment.attributes["permalink"]
100
+ text = comment.text
101
+ @portraits = Array.new
102
+ xml_doc.elements.each('rsp/comments/comment/portraits/portrait') do |thumb|
103
+ portrait_url = thumb.text
104
+ w = thumb.attributes["width"].to_i
105
+ h = thumb.attributes["height"].to_i
106
+ thumbnail = Thumbnail.new(portrait_url, w, h)
107
+ @portraits << thumbnail
108
+ end
109
+ com = Comment.new(id, author, authorname, date, url, text, @portraits)
110
+ @comments << com
111
+ end
112
+ end
113
+
114
+ # Returns the code to embed the video
115
+ def embed width, height
116
+ w = width.to_s
117
+ h = height.to_s
118
+ id = @id.to_s
119
+ string = ''
120
+ string += '<object type="application/x-shockwave-flash" width='
121
+ string += w + '" height="' + h + '"'
122
+ string += 'data="http://www.vimeo.com/moogaloop.swf?clip_id=' + id
123
+ string += '&amp;server=www.vimeo.com&amp;fullscreen=0&amp;show_title=0'
124
+ string += '&amp;show_byline=0&amp;showportrait=0&amp;color=00ADEF">'
125
+ string += '<param name="quality" value="best" />'
126
+ string += '<param name="allowfullscreen" value="false" />'
127
+ string += '<param name="scale" value="showAll" />'
128
+ string += '<param name="movie" value="http://www.vimeo.com/moogaloop.swf?clip_id='
129
+ string += id + '&amp;server=www.vimeo.com&amp;fullscreen=0&amp;'
130
+ string += 'show_title=0&amp;show_byline=0&amp;showportrait=0&amp;color=00ADEF" /></object>'
131
+
132
+ return string
133
+ end
134
+ end
135
+ end
data/lib/rbVimeo.rb ADDED
@@ -0,0 +1,58 @@
1
+ # Matt Pruitt
2
+ # Ruby Library for working with Vimeo
3
+ # Based on the sample PHP Vimeo API
4
+
5
+ require 'digest/md5'
6
+ require 'net/http'
7
+ require 'rexml/document'
8
+ require File.join(File.dirname(__FILE__), %w[Video])
9
+
10
+ module RBVIMEO
11
+ class Vimeo
12
+ attr_accessor :api_key, :api_secret
13
+
14
+ @@API_REST_URL = "http://www.vimeo.com/api/rest"
15
+ @@API_AUTH_URL = "http://www.vimeo.com/services/auth/"
16
+ @@API_UPLOAD_URL = "http://www.vimeo.com/services/upload/"
17
+ # api_key and api_secret should both be generated on www.vimeo.com
18
+ def initialize api_key, api_secret
19
+ @api_key = api_key
20
+ @api_secret = api_secret
21
+ end
22
+
23
+ # @vimeo.generate_url({"method" => "vimeo.videos.getInfo", "read",
24
+ # "video_id" => "339189", "api_key" => @vimeo.api_key})
25
+ # This example returns a url to the xml for the Vimeo video with id 339189
26
+ def generate_url parameters, permissions = nil
27
+ url = @@API_REST_URL + "?api_key=" + @api_key
28
+ params = parameters.sort
29
+ params.each do |param|
30
+ url += "&" + param[0].to_s + "=" + param[1].to_s unless param[0].to_s == "api_key"
31
+ end
32
+ url += "&api_sig=" + generate_signature(parameters)
33
+ return url
34
+ end
35
+
36
+ # parameters is a hash
37
+ def generate_signature parameters
38
+ temp = ''
39
+ params = parameters.sort
40
+ params.each do |array|
41
+ temp += array[0].to_s + array[1].to_s
42
+ end
43
+ signature = @api_secret + temp
44
+ Digest::MD5.hexdigest(signature)
45
+ end
46
+
47
+ # Provides easier access to RBVIMEO::Video
48
+ # video = @vimeo.video 339189
49
+ def video id, xml=nil
50
+ vid = Video.new(id, self, xml)
51
+ return nil if vid.id == -1
52
+ return vid
53
+ end
54
+ def user
55
+ return User.new
56
+ end
57
+ end
58
+ end
@@ -0,0 +1,82 @@
1
+ require File.join(File.dirname(__FILE__), %w[spec_helper])
2
+ require File.join(File.dirname(__FILE__), "../lib/rbVimeo.rb")
3
+ require File.join(File.dirname(__FILE__), "../lib/Video.rb")
4
+ require "yaml"
5
+
6
+ include RBVIMEO
7
+
8
+ describe Video, "initialization" do
9
+ before(:all) do
10
+ test_settings_file = File.join(File.dirname(__FILE__), %w[test_settings.yml])
11
+ test_video_xml_file = File.join(File.dirname(__FILE__), %w[XML/339189.xml])
12
+ test_settings = YAML.load_file(test_settings_file)
13
+ @api_key = test_settings['api_key']
14
+ @api_secret = test_settings['api_secret']
15
+ @vimeo = RBVIMEO::Vimeo.new(@api_key, @api_secret)
16
+ @vid = @vimeo.video(339189, test_video_xml_file)
17
+ end
18
+
19
+ it "should have title" do
20
+ @vid.title.should eql("Upload Tutorial")
21
+ end
22
+
23
+ it "should have caption" do
24
+ @vid.caption.should eql("This is a tutorial about our new Uploader. Enjoy!")
25
+ end
26
+
27
+ it "should have upload date" do
28
+ @vid.upload_date.should eql("2007-10-12 16:30:32")
29
+ end
30
+
31
+ it "should have likes" do
32
+ @vid.likes.should eql(174)
33
+ end
34
+
35
+ it "should have plays" do
36
+ @vid.plays.should eql(515407)
37
+ end
38
+
39
+ it "should have dimensions" do
40
+ @vid.width.should eql(506)
41
+ @vid.height.should eql(380)
42
+ end
43
+
44
+ it "should have comments" do
45
+ @vid.num_comments.should eql(34)
46
+ @vid.comments[0].id.should eql(265313)
47
+ @vid.comments[0].author.should eql("ctd3")
48
+ @vid.comments[0].authorname.should eql("CTD3")
49
+ @vid.comments[0].date.should eql("2007-10-12 17:47:13")
50
+ @vid.comments[0].url.should eql("http://www.vimeo.com/339189#comment_265313")
51
+ @vid.comments[0].text.should eql("Sure is! Great changes!")
52
+ @vid.comments[0].portraits[0].url.should eql("http://80.media.vimeo.com/d1/5/35/44/42/portrait-35444268.jpg")
53
+ @vid.comments[0].portraits[0].width.should eql(24)
54
+ @vid.comments[0].portraits[0].height.should eql(24)
55
+ end
56
+
57
+ it "should have owner" do
58
+ @vid.owner.id.should eql(152184)
59
+ @vid.owner.username.should eql("staff")
60
+ @vid.owner.fullname.should eql("Vimeo Staff")
61
+ end
62
+
63
+ it "should have url" do
64
+ @vid.url.should eql("http://www.vimeo.com/339189/l:app-230")
65
+ end
66
+
67
+ it "should have thumbnails" do
68
+ @vid.thumbs[0].url.should eql("http://40.media.vimeo.com/d1/5/36/63/98/thumbnail-36639824.jpg")
69
+ @vid.thumbs[0].width.should eql(96)
70
+ @vid.thumbs[0].height.should eql(72)
71
+ end
72
+
73
+ it "should return nil on nonexistent video" do
74
+ not_found_xml_file = File.join(File.dirname(__FILE__), %w[XML/not_found.xml])
75
+ video = @vimeo.video(99999999999, not_found_xml_file)
76
+ video.should be_nil
77
+ end
78
+
79
+ it "should give an embed link" do
80
+ @vid.embed(240, 480).should_not be_nil
81
+ end
82
+ end
@@ -0,0 +1,155 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <rsp stat="ok" generated_in="0.0662">
3
+ <comments page="1" perpage="25" video_id="339189">
4
+ <comment id="265313" author="ctd3" authorname="CTD3" datecreate="2007-10-12 17:47:13" permalink="http://www.vimeo.com/339189#comment_265313">Sure is! Great changes!
5
+ <portraits>
6
+ <portrait width="24" height="24">http://80.media.vimeo.com/d1/5/35/44/42/portrait-35444268.jpg</portrait>
7
+ <portrait width="75" height="75">http://10.media.vimeo.com/d1/5/35/41/36/portrait-35413631.jpg</portrait>
8
+ <portrait width="300" height="300">http://30.media.vimeo.com/d1/5/35/46/06/portrait-35460603.jpg</portrait>
9
+ </portraits></comment>
10
+ <comment id="265317" author="darkmotion" authorname="darkmotion" datecreate="2007-10-12 17:50:45" permalink="http://www.vimeo.com/339189#comment_265317">tags would be so much nicer in the flickr system where you juts slap in spaces. For multi word items you can single or double quote the suckers
11
+ <portraits>
12
+ <portrait width="24" height="24">http://90.media.vimeo.com/d1/5/29/89/62/portrait-29896269.jpg</portrait>
13
+ <portrait width="75" height="75">http://20.media.vimeo.com/d1/5/29/40/38/portrait-29403842.jpg</portrait>
14
+ <portrait width="300" height="300">http://30.media.vimeo.com/d1/5/30/18/98/portrait-30189803.jpg</portrait>
15
+ </portraits></comment>
16
+ <comment id="265392" author="dunno" authorname="dunno" datecreate="2007-10-12 20:02:47" reply_to_comment_id="265317" permalink="http://www.vimeo.com/339189#comment_265392">Really? I find the commas to be way easier than the quotes. I like it as is.
17
+ <portraits>
18
+ <portrait width="24" height="24">http://80.media.vimeo.com/d1/5/29/52/72/portrait-29527278.jpg</portrait>
19
+ <portrait width="75" height="75">http://40.media.vimeo.com/d1/5/29/39/99/portrait-29399974.jpg</portrait>
20
+ <portrait width="300" height="300">http://10.media.vimeo.com/d1/5/29/60/94/portrait-29609431.jpg</portrait>
21
+ </portraits></comment>
22
+ <comment id="265415" author="darkmotion" authorname="darkmotion" datecreate="2007-10-12 20:50:28" reply_to_comment_id="265317" permalink="http://www.vimeo.com/339189#comment_265415">Well to me it feels more natural to type keywords with spaces between then ( I guess it's because I'm used to flickr and a bunch of others which use that format) Either way, the tags are still neat :)
23
+ <portraits>
24
+ <portrait width="24" height="24">http://90.media.vimeo.com/d1/5/29/89/62/portrait-29896269.jpg</portrait>
25
+ <portrait width="75" height="75">http://20.media.vimeo.com/d1/5/29/40/38/portrait-29403842.jpg</portrait>
26
+ <portrait width="300" height="300">http://30.media.vimeo.com/d1/5/30/18/98/portrait-30189803.jpg</portrait>
27
+ </portraits></comment>
28
+ <comment id="265318" author="benm" authorname="Ben Millett" datecreate="2007-10-12 17:51:10" permalink="http://www.vimeo.com/339189#comment_265318">So, are you going to change your upload email so that you don't get some random videos uploaded? Nice tutorial. The upload page was daunting at first, but I like it now.
29
+ <portraits>
30
+ <portrait width="24" height="24">http://10.media.vimeo.com/d1/5/69/34/6934500/6934500_24.jpg</portrait>
31
+ <portrait width="75" height="75">http://50.media.vimeo.com/d1/5/69/34/6934500/6934500_75.jpg</portrait>
32
+ <portrait width="300" height="300">http://90.media.vimeo.com/d1/5/69/34/6934500/6934500_300.jpg</portrait>
33
+ </portraits></comment>
34
+ <comment id="265990" author="blakewhitman" authorname="Blake Whitman" datecreate="2007-10-13 21:29:07" reply_to_comment_id="265318" permalink="http://www.vimeo.com/339189#comment_265990">i'm looking forward to them.
35
+ <portraits>
36
+ <portrait width="24" height="24">http://70.media.vimeo.com/d1/5/41/92/portrait-4192877.jpg</portrait>
37
+ <portrait width="75" height="75">http://40.media.vimeo.com/d1/5/41/92/portrait-4192854.jpg</portrait>
38
+ <portrait width="300" height="300">http://90.media.vimeo.com/d1/5/41/92/portrait-4192849.jpg</portrait>
39
+ </portraits></comment>
40
+ <comment id="265341" author="user183977" authorname="okaysamurai" datecreate="2007-10-12 18:27:47" permalink="http://www.vimeo.com/339189#comment_265341">The new uploader is really nicely done. Vimeo has always been great about never leaving the user waiting around and guessing what to do. Great work!
41
+ <portraits>
42
+ <portrait width="24" height="24">http://20.media.vimeo.com/d1/5/81/83/8183509/8183509_24.jpg</portrait>
43
+ <portrait width="75" height="75">http://10.media.vimeo.com/d1/5/81/83/8183509/8183509_75.jpg</portrait>
44
+ <portrait width="300" height="300">http://60.media.vimeo.com/d1/5/81/83/8183509/8183509_300.jpg</portrait>
45
+ </portraits></comment>
46
+ <comment id="265382" author="benjamin" authorname="Ben" datecreate="2007-10-12 19:48:34" permalink="http://www.vimeo.com/339189#comment_265382">I love the new uploader! it's very accurate! and it works in safari 3
47
+ <portraits>
48
+ <portrait width="24" height="24">http://80.media.vimeo.com/d1/5/13/50/15/13501546/13501546_24.jpg</portrait>
49
+ <portrait width="75" height="75">http://50.media.vimeo.com/d1/5/13/50/15/13501546/13501546_75.jpg</portrait>
50
+ <portrait width="300" height="300">http://90.media.vimeo.com/d1/5/13/50/15/13501546/13501546_300.jpg</portrait>
51
+ </portraits></comment>
52
+ <comment id="265383" author="erick" authorname="Erick C." datecreate="2007-10-12 19:52:09" permalink="http://www.vimeo.com/339189#comment_265383">i love hearing the typing in these tutorials. such a nice sound. :)
53
+ <portraits>
54
+ <portrait width="24" height="24">http://60.media.vimeo.com/d1/5/96/61/9661145/9661145_24.jpg</portrait>
55
+ <portrait width="75" height="75">http://50.media.vimeo.com/d1/5/96/61/9661145/9661145_75.jpg</portrait>
56
+ <portrait width="300" height="300">http://00.media.vimeo.com/d1/5/96/61/9661145/9661145_300.jpg</portrait>
57
+ </portraits></comment>
58
+ <comment id="265403" author="vfowler" authorname="Vernon Fowler" datecreate="2007-10-12 20:31:15" permalink="http://www.vimeo.com/339189#comment_265403">Yes indeed! Vimeo is cool. Great new uploader. I love all the new changes you guys and girls have made recently. Keep up the super work.
59
+ <portraits>
60
+ <portrait width="24" height="24">http://30.media.vimeo.com/d1/5/35/21/portrait-3521153.jpg</portrait>
61
+ <portrait width="75" height="75">http://70.media.vimeo.com/d1/5/35/21/portrait-3521147.jpg</portrait>
62
+ <portrait width="300" height="300">http://30.media.vimeo.com/d1/5/35/21/portrait-3521143.jpg</portrait>
63
+ </portraits></comment>
64
+ <comment id="265588" author="charliesteadman" authorname="charliesteadman" datecreate="2007-10-13 06:53:56" permalink="http://www.vimeo.com/339189#comment_265588">I love the people chooser. Passwords? Sccchhhhwwwweeeeeet!
65
+ <portraits>
66
+ <portrait width="24" height="24">http://60.media.vimeo.com/d1/5/39/03/14/portrait-39031466.jpg</portrait>
67
+ <portrait width="75" height="75">http://00.media.vimeo.com/d1/5/39/03/17/portrait-39031730.jpg</portrait>
68
+ <portrait width="300" height="300">http://50.media.vimeo.com/d1/5/39/15/40/portrait-39154065.jpg</portrait>
69
+ </portraits></comment>
70
+ <comment id="265615" author="talkingtonobody" authorname="talkingtonobody" datecreate="2007-10-13 08:28:38" permalink="http://www.vimeo.com/339189#comment_265615">mmm is good
71
+ <portraits>
72
+ <portrait width="24" height="24">http://40.media.vimeo.com/d1/5/46/65/portrait-4665324.jpg</portrait>
73
+ <portrait width="75" height="75">http://20.media.vimeo.com/d1/5/46/65/portrait-4665312.jpg</portrait>
74
+ <portrait width="300" height="300">http://00.media.vimeo.com/d1/5/46/65/portrait-4665300.jpg</portrait>
75
+ </portraits></comment>
76
+ <comment id="265653" author="benm" authorname="Ben Millett" datecreate="2007-10-13 10:20:13" permalink="http://www.vimeo.com/339189#comment_265653">How does one now indicate a fulfilled request?
77
+ <portraits>
78
+ <portrait width="24" height="24">http://10.media.vimeo.com/d1/5/69/34/6934500/6934500_24.jpg</portrait>
79
+ <portrait width="75" height="75">http://50.media.vimeo.com/d1/5/69/34/6934500/6934500_75.jpg</portrait>
80
+ <portrait width="300" height="300">http://90.media.vimeo.com/d1/5/69/34/6934500/6934500_300.jpg</portrait>
81
+ </portraits></comment>
82
+ <comment id="265709" author="clicknscroll" authorname="H." datecreate="2007-10-13 12:31:27" permalink="http://www.vimeo.com/339189#comment_265709">hadn't seen this. sweeeet.
83
+ <portraits>
84
+ <portrait width="24" height="24">http://90.media.vimeo.com/d1/5/10/18/99/10189967/10189967_24.jpg</portrait>
85
+ <portrait width="75" height="75">http://50.media.vimeo.com/d1/5/10/18/99/10189967/10189967_75.jpg</portrait>
86
+ <portrait width="300" height="300">http://90.media.vimeo.com/d1/5/10/18/99/10189967/10189967_300.jpg</portrait>
87
+ </portraits></comment>
88
+ <comment id="265902" author="mikehedge" authorname="mikehedge" datecreate="2007-10-13 19:08:03" permalink="http://www.vimeo.com/339189#comment_265902">genius!
89
+ <portraits>
90
+ <portrait width="24" height="24">http://90.media.vimeo.com/d1/5/43/53/portrait-4353149.jpg</portrait>
91
+ <portrait width="75" height="75">http://90.media.vimeo.com/d1/5/43/53/portrait-4353139.jpg</portrait>
92
+ <portrait width="300" height="300">http://20.media.vimeo.com/d1/5/43/53/portrait-4353132.jpg</portrait>
93
+ </portraits></comment>
94
+ <comment id="265986" author="soxiam" authorname="Soxiam" datecreate="2007-10-13 21:24:59" permalink="http://www.vimeo.com/339189#comment_265986">Thanks for making this tutorial. It's really wonderfully produced. Simple and easy to understand. We need to add this (or a link to it) from our upload page. Pronto!
95
+ <portraits>
96
+ <portrait width="24" height="24">http://60.media.vimeo.com/d1/5/68/80/6880523/6880523_24.jpg</portrait>
97
+ <portrait width="75" height="75">http://90.media.vimeo.com/d1/5/68/80/6880523/6880523_75.jpg</portrait>
98
+ <portrait width="300" height="300">http://30.media.vimeo.com/d1/5/68/80/6880523/6880523_300.jpg</portrait>
99
+ </portraits></comment>
100
+ <comment id="265989" author="blakewhitman" authorname="Blake Whitman" datecreate="2007-10-13 21:28:36" reply_to_comment_id="265986" permalink="http://www.vimeo.com/339189#comment_265989">Justin was supposed to do it on friday... might have slipped through the cracks.
101
+ <portraits>
102
+ <portrait width="24" height="24">http://70.media.vimeo.com/d1/5/41/92/portrait-4192877.jpg</portrait>
103
+ <portrait width="75" height="75">http://40.media.vimeo.com/d1/5/41/92/portrait-4192854.jpg</portrait>
104
+ <portrait width="300" height="300">http://90.media.vimeo.com/d1/5/41/92/portrait-4192849.jpg</portrait>
105
+ </portraits></comment>
106
+ <comment id="267196" author="islebehere" authorname="islebehere" datecreate="2007-10-15 14:03:51" permalink="http://www.vimeo.com/339189#comment_267196">isn't Andrea an inspiration to us all...?? lol
107
+ <portraits>
108
+ <portrait width="24" height="24">http://30.media.vimeo.com/d1/5/34/42/portrait-3442653.jpg</portrait>
109
+ <portrait width="75" height="75">http://70.media.vimeo.com/d1/5/34/42/portrait-3442647.jpg</portrait>
110
+ <portrait width="300" height="300">http://30.media.vimeo.com/d1/5/34/42/portrait-3442643.jpg</portrait>
111
+ </portraits></comment>
112
+ <comment id="268951" author="andreaallen" authorname="AA" datecreate="2007-10-17 16:25:23" reply_to_comment_id="267196" permalink="http://www.vimeo.com/339189#comment_268951">My butt was the inspiration.
113
+ <portraits>
114
+ <portrait width="24" height="24">http://60.media.vimeo.com/d1/5/34/96/portrait-3496566.jpg</portrait>
115
+ <portrait width="75" height="75">http://70.media.vimeo.com/d1/5/34/96/portrait-3496557.jpg</portrait>
116
+ <portrait width="300" height="300">http://30.media.vimeo.com/d1/5/34/96/portrait-3496553.jpg</portrait>
117
+ </portraits></comment>
118
+ <comment id="272747" author="jessespurlin" authorname="Jesse Spurlin" datecreate="2007-10-23 06:44:53" permalink="http://www.vimeo.com/339189#comment_272747">surely everyone who learns how to upload to vimeo will now know audrey from denton, tx. amazing.
119
+ <portraits>
120
+ <portrait width="24" height="24">http://storage14.vimeo.com/46/54/99/46549981/46549981_24.jpg</portrait>
121
+ <portrait width="75" height="75">http://storage10.vimeo.com/46/54/99/46549981/46549981_75.jpg</portrait>
122
+ <portrait width="300" height="300">http://storage10.vimeo.com/46/54/99/46549981/46549981_300.jpg</portrait>
123
+ </portraits></comment>
124
+ <comment id="276940" author="user150781" authorname="cms3717" datecreate="2007-10-29 21:20:58" permalink="http://www.vimeo.com/339189#comment_276940">doesnt work for me, progress bar flies by on a 77 meg fie and hangs on 100 percent, im bummed
125
+ <portraits>
126
+ <portrait width="24" height="24">http://30.media.vimeo.com/d1/5/45/00/65/portrait-45006593.jpg</portrait>
127
+ <portrait width="75" height="75">http://50.media.vimeo.com/d1/5/33/48/portrait-3348735.jpg</portrait>
128
+ <portrait width="300" height="300">http://50.media.vimeo.com/d1/5/32/23/portrait-3223235.jpg</portrait>
129
+ </portraits></comment>
130
+ <comment id="281334" author="pandapoo" authorname="Georgie" datecreate="2007-11-05 05:22:25" permalink="http://www.vimeo.com/339189#comment_281334">Vimeo IS cool! :)
131
+ <portraits>
132
+ <portrait width="24" height="24">http://50.media.vimeo.com/d1/5/30/41/08/portrait-30410815.jpg</portrait>
133
+ <portrait width="75" height="75">http://90.media.vimeo.com/d1/5/30/41/08/portrait-30410879.jpg</portrait>
134
+ <portrait width="300" height="300">http://30.media.vimeo.com/d1/5/30/45/57/portrait-30455703.jpg</portrait>
135
+ </portraits></comment>
136
+ <comment id="286997" author="user295526" authorname="foxy bigmama" datecreate="2007-11-13 17:34:30" permalink="http://www.vimeo.com/339189#comment_286997">i found the uploader tutorial easy to learn, this is my first page on the site so bear wit me i have yet to experience the results
137
+ <portraits>
138
+ <portrait width="24" height="24">http://70.media.vimeo.com/d1/5/14/68/49/14684974/14684974_24.jpg</portrait>
139
+ <portrait width="75" height="75">http://40.media.vimeo.com/d1/5/14/68/49/14684974/14684974_75.jpg</portrait>
140
+ <portrait width="300" height="300">http://70.media.vimeo.com/d1/5/14/68/49/14684974/14684974_300.jpg</portrait>
141
+ </portraits></comment>
142
+ <comment id="288784" author="user119378" authorname="akumal" datecreate="2007-11-16 17:57:22" permalink="http://www.vimeo.com/339189#comment_288784">amazing, you're kicking youtube's butt
143
+ <portraits>
144
+ <portrait width="24" height="24">http://30.media.vimeo.com/d1/5/32/24/portrait-3224873.jpg</portrait>
145
+ <portrait width="75" height="75">http://50.media.vimeo.com/d1/5/33/54/portrait-3354625.jpg</portrait>
146
+ <portrait width="300" height="300">http://10.media.vimeo.com/d1/5/32/65/portrait-3265591.jpg</portrait>
147
+ </portraits></comment>
148
+ <comment id="296793" author="user306709" authorname="toltub" datecreate="2007-11-30 21:07:01" permalink="http://www.vimeo.com/339189#comment_296793">Deberian crear acesos para subir video por FTP, ya que e tratado muchas veces de subir mis videos y tengo que paagar la pc, o algo pasa.
149
+ <portraits>
150
+ <portrait width="24" height="24">http://70.media.vimeo.com/d1/portraits/defaults/d.24.jpg</portrait>
151
+ <portrait width="75" height="75">http://70.media.vimeo.com/d1/portraits/defaults/d.75.jpg</portrait>
152
+ <portrait width="300" height="300">http://80.media.vimeo.com/d1/portraits/defaults/d.300.jpg</portrait>
153
+ </portraits></comment>
154
+ </comments>
155
+ </rsp>
@@ -0,0 +1,28 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <rsp stat="ok" generated_in="0.0191">
3
+ <video id="339189" privacy="anybody" is_uploading="0" is_transcoding="0" is_hd="1" is_favorite="1">
4
+ <title>Upload Tutorial</title>
5
+ <caption>This is a tutorial about our new Uploader. Enjoy!</caption>
6
+ <upload_date>2007-10-12 16:30:32</upload_date>
7
+ <number_of_likes>174</number_of_likes>
8
+ <number_of_plays>515407</number_of_plays>
9
+ <number_of_comments>34</number_of_comments>
10
+ <width>506</width>
11
+ <height>380</height>
12
+ <owner nsid="152184" id="152184" username="staff" fullname="Vimeo Staff"/>
13
+ <tags>
14
+ <tag id="918189" author="152184" raw="vimeo">vimeo</tag>
15
+ <tag id="918190" author="152184" raw="tutorial">tutorial</tag>
16
+ <tag id="918191" author="152184" raw="upload">upload</tag>
17
+ <tag id="918192" author="152184" raw="uploader">uploader</tag>
18
+ </tags>
19
+ <urls>
20
+ <url type="videopage">http://www.vimeo.com/339189/l:app-230</url>
21
+ </urls>
22
+ <thumbnails>
23
+ <thumbnail width="96" height="72">http://40.media.vimeo.com/d1/5/36/63/98/thumbnail-36639824.jpg</thumbnail>
24
+ <thumbnail width="200" height="150">http://40.media.vimeo.com/d1/5/29/49/99/thumbnail-29499974.jpg</thumbnail>
25
+ <thumbnail width="460" height="345">http://80.media.vimeo.com/d1/5/29/49/01/thumbnail-29490188.jpg</thumbnail>
26
+ </thumbnails>
27
+ </video>
28
+ </rsp>
@@ -0,0 +1,4 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <rsp stat="fail" generated_in="0.0047">
3
+ <err code="1" msg="Clip Not found. Either it doesn't exist, or the current user doesn't have permission."/>
4
+ </rsp>