rbvimeo 0.1.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 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>