jwbynum-vimeo 0.2.1
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/CHANGELOG.rdoc +14 -0
- data/LICENSE +20 -0
- data/README.rdoc +169 -0
- data/VERSION.yml +4 -0
- data/lib/vimeo/advanced/auth.rb +36 -0
- data/lib/vimeo/advanced/base.rb +59 -0
- data/lib/vimeo/advanced/contact.rb +18 -0
- data/lib/vimeo/advanced/group.rb +19 -0
- data/lib/vimeo/advanced/person.rb +105 -0
- data/lib/vimeo/advanced/test.rb +40 -0
- data/lib/vimeo/advanced/upload.rb +28 -0
- data/lib/vimeo/advanced/video.rb +327 -0
- data/lib/vimeo/advanced.rb +11 -0
- data/lib/vimeo/simple/activity.rb +27 -0
- data/lib/vimeo/simple/album.rb +17 -0
- data/lib/vimeo/simple/base.rb +12 -0
- data/lib/vimeo/simple/channel.rb +17 -0
- data/lib/vimeo/simple/clip.rb +12 -0
- data/lib/vimeo/simple/group.rb +22 -0
- data/lib/vimeo/simple/user.rb +62 -0
- data/lib/vimeo/simple.rb +14 -0
- data/lib/vimeo.rb +12 -0
- data/test/test_helper.rb +7 -0
- data/test/vimeo_test.rb +7 -0
- metadata +93 -0
data/CHANGELOG.rdoc
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
== 0.2.1, released 2009-01-06
|
2
|
+
|
3
|
+
* Last version was missing files.
|
4
|
+
|
5
|
+
== 0.2.0, released 2009-01-06
|
6
|
+
|
7
|
+
* Major re-factor of each request method.
|
8
|
+
* Separated the simple and advanced APIs into their own modules.
|
9
|
+
* Added some documentation.
|
10
|
+
* Updated the README.
|
11
|
+
|
12
|
+
== 0.1.2, released 2008-10-26
|
13
|
+
|
14
|
+
* Initial release
|
data/LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2008 Matt Hooks
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.rdoc
ADDED
@@ -0,0 +1,169 @@
|
|
1
|
+
= Vimeo API Gem
|
2
|
+
|
3
|
+
This gem implements a full-featured ruby interface for the Vimeo API.
|
4
|
+
|
5
|
+
Vimeo's API documentation is, in my opinion, pretty poor. I've done my best to implement all the functions that are described {here}[http://vimeo.com/api-docs/advanced-api-docs.html]. There are some extra functions described {here}[http://vimeo.com/api/sandbox], but I can't be 100% sure what the correct parameters are for each method, so I'm going to omit them for the time being.
|
6
|
+
|
7
|
+
== Install
|
8
|
+
|
9
|
+
If you haven't already, add github's gem server to your sources:
|
10
|
+
|
11
|
+
gem sources -a http://gems.github.com
|
12
|
+
|
13
|
+
Then, it's as easy as:
|
14
|
+
|
15
|
+
sudo gem install matthooks-vimeo
|
16
|
+
|
17
|
+
Add the gem plugin to your Rails project by adding the following to your @environment.rb@ file:
|
18
|
+
|
19
|
+
config.gem "matthooks-vimeo", :lib => "vimeo"
|
20
|
+
|
21
|
+
== Use
|
22
|
+
|
23
|
+
There are two modules:
|
24
|
+
|
25
|
+
Vimeo::Simple
|
26
|
+
Vimeo::Advanced
|
27
|
+
|
28
|
+
== Simple API
|
29
|
+
|
30
|
+
The wrapper for the Simple API consists of the following classes and methods:
|
31
|
+
|
32
|
+
=== Vimeo::Simple::User
|
33
|
+
|
34
|
+
Vimeo::Simple::User.info(username)
|
35
|
+
Vimeo::Simple::User.clips(username)
|
36
|
+
Vimeo::Simple::User.likes(username)
|
37
|
+
Vimeo::Simple::User.appears_in(username)
|
38
|
+
Vimeo::Simple::User.all_clips(username)
|
39
|
+
Vimeo::Simple::User.subscriptions(username)
|
40
|
+
Vimeo::Simple::User.albums(username)
|
41
|
+
Vimeo::Simple::User.channels(username)
|
42
|
+
Vimeo::Simple::User.groups(username)
|
43
|
+
Vimeo::Simple::User.contacts_clips(username)
|
44
|
+
Vimeo::Simple::User.contacts_like(username)
|
45
|
+
|
46
|
+
=== Vimeo::Simple::Clip
|
47
|
+
|
48
|
+
Vimeo::Simple::Clip.info(video_id)
|
49
|
+
|
50
|
+
=== Vimeo::Simple::Activity
|
51
|
+
|
52
|
+
Vimeo::Simple::Activity.user_did(username)
|
53
|
+
Vimeo::Simple::Activity.happened_to_user(username)
|
54
|
+
Vimeo::Simple::Activity.contacts_did(username)
|
55
|
+
Vimeo::Simple::Activity.happened_to_contacts(username)
|
56
|
+
Vimeo::Simple::Activity.everyone_did(username)
|
57
|
+
|
58
|
+
=== Vimeo::Simple::Group
|
59
|
+
|
60
|
+
Vimeo::Simple::Group.clips(groupname)
|
61
|
+
Vimeo::Simple::Group.users(groupname)
|
62
|
+
Vimeo::Simple::Group.info(groupname)
|
63
|
+
|
64
|
+
=== Vimeo::Simple::Channel
|
65
|
+
|
66
|
+
Vimeo::Simple::Channel.clips(channelname)
|
67
|
+
Vimeo::Simple::Channel.info(channelname)
|
68
|
+
|
69
|
+
=== Vimeo::Simple::Album
|
70
|
+
|
71
|
+
Vimeo::Simple::Album.clips(album_id)
|
72
|
+
Vimeo::Simple::Album.info(album_id)
|
73
|
+
|
74
|
+
== Advanced API
|
75
|
+
|
76
|
+
The classes in Vimeo::Advanced must be instantiated with an your application's api key and secret. For example,
|
77
|
+
|
78
|
+
vimeo_video = Vimeo::Advanced::Video.new("api_key", "secret")
|
79
|
+
|
80
|
+
Then you can make calls on the instance:
|
81
|
+
|
82
|
+
vimeo_video.get_list("matthooks", :page => 2, :per_page => 50)
|
83
|
+
|
84
|
+
The wrapper for the Advanced API consists of the following classes and methods:
|
85
|
+
|
86
|
+
=== Vimeo::Advanced::Auth
|
87
|
+
|
88
|
+
get_token(frob)
|
89
|
+
get_frob
|
90
|
+
check_token(auth_token)
|
91
|
+
|
92
|
+
=== Vimeo::Advanced::Test
|
93
|
+
|
94
|
+
echo(options={})
|
95
|
+
null(auth_token)
|
96
|
+
login(auth_token)
|
97
|
+
|
98
|
+
=== Vimeo::Advanced::Video
|
99
|
+
|
100
|
+
get_list(user_id, options={ :page => 1, :per_page => 25, :full_response => 0 })
|
101
|
+
get_uploaded_list(user_id, options={ :page => 1, :per_page => 25, :full_response => 0, :auth_token => nil })
|
102
|
+
get_appears_in_list(user_id, options={ :page => 1, :per_page => 25, :full_response => 0, :auth_token => nil })
|
103
|
+
get_subscriptions_list(user_id, options={ :page => 1, :per_page => 25, :full_response => 0, :auth_token => nil })
|
104
|
+
get_list_by_tag(tag, options={ :page => 1, :per_page => 25, :full_response => 0, :auth_token => nil })@
|
105
|
+
get_like_list(user_id, options={ :page => 1, :per_page => 25, :full_response => 0, :auth_token => nil })@
|
106
|
+
get_contacts_list(user_id, options={ :page => 1, :per_page => 25, :full_response => 0, :auth_token => nil })
|
107
|
+
get_contacts_like_list(user_id, options={ :page => 1, :per_page => 25, :full_response => 0, :auth_token => nil })
|
108
|
+
search(q, options={ :page => 1, :per_page => 25, :full_response => 0, :auth_token => nil })
|
109
|
+
get_info(video_id, auth_token=nil)
|
110
|
+
delete(video_id, auth_token)
|
111
|
+
get_thumbnail_url(video_id, size=100)
|
112
|
+
set_title(video_id, title, auth_token)
|
113
|
+
set_caption(video_id, caption, auth_token)
|
114
|
+
set_favorite(video_id, favorite, auth_token)
|
115
|
+
add_tags(video_id, tags, auth_token)
|
116
|
+
remove_tag(video_id, tag_id, auth_token)
|
117
|
+
clear_tags(video_id, auth_token)
|
118
|
+
add_cast(video_id, user_id, auth_token, options={})
|
119
|
+
get_cast(video_id, auth_token=nil)
|
120
|
+
remove_cast(video_id, user_id, auth_token)
|
121
|
+
set_privacy(video_id, privacy, auth_token)
|
122
|
+
get_comments_list(video_id)
|
123
|
+
add_comment(video_id, comment_text, auth_token, options={})
|
124
|
+
delete_comment(video_id, comment_id, auth_token)
|
125
|
+
edit_comment(video_id, comment_id, comment_text, auth_token)
|
126
|
+
|
127
|
+
=== Vimeo::Advanced::Person
|
128
|
+
|
129
|
+
find_by_user_name(username)
|
130
|
+
find_by_email(find_email)
|
131
|
+
get_info(user_id)
|
132
|
+
get_portrait_url(user_id, options={})
|
133
|
+
add_contact(user_id, auth_token)
|
134
|
+
remove_contact(user_id, auth_token)
|
135
|
+
get_upload_status(user_id, auth_token)
|
136
|
+
add_subscription(user_id, type, auth_token)
|
137
|
+
remove_subscription(user_id, type, auth_token)
|
138
|
+
|
139
|
+
=== Vimeo::Advanced::Contact
|
140
|
+
|
141
|
+
get_list(user_id)
|
142
|
+
|
143
|
+
=== Vimeo::Advanced::Group
|
144
|
+
|
145
|
+
get_members(group_id)
|
146
|
+
|
147
|
+
=== Vimeo::Advanced::Upload
|
148
|
+
|
149
|
+
get_upload_ticket(auth_token)
|
150
|
+
check_upload_status(ticket_id, auth_token)
|
151
|
+
|
152
|
+
== Todo
|
153
|
+
|
154
|
+
* Implement options that allow you to specify a format (xml, json, PHP). Right now this is slightly complicated by the fact that Vimeo returns text/html for json and not application/json, so HTTParty can't auto-detect the content-type.
|
155
|
+
* Better initialize method for the advanced api that takes the auth_token into account.
|
156
|
+
* Define a method that returns the correct form URL for uploading videos.
|
157
|
+
* video_set_privacy needs the ability to specify users.
|
158
|
+
* Some methods are not implemented by vimeo or don't seem to work.
|
159
|
+
* Input verification? The alternative is to just let vimeo handle it.
|
160
|
+
* May need to escape input in several cases
|
161
|
+
* More re-factoring.
|
162
|
+
* Tests
|
163
|
+
|
164
|
+
== Thanks to
|
165
|
+
|
166
|
+
* {HTTParty}[http://github.com/jnunemaker/httparty/tree/master]: Easily one of the best tools I have used since I started using Ruby.
|
167
|
+
* {Jeweler}[http://github.com/technicalpickles/jeweler/tree/master]: Great tool for creating gems for github.
|
168
|
+
|
169
|
+
=== Copyright (c) 2008 Matt Hooks. See LICENSE for details.
|
data/VERSION.yml
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
module Vimeo
|
2
|
+
module Advanced
|
3
|
+
|
4
|
+
class Auth < Vimeo::Advanced::Base
|
5
|
+
# Obtains an authorization token.
|
6
|
+
def get_token(frob)
|
7
|
+
sig_options = {
|
8
|
+
:frob => frob,
|
9
|
+
:method => "vimeo.auth.getToken"
|
10
|
+
}
|
11
|
+
|
12
|
+
make_request sig_options
|
13
|
+
end
|
14
|
+
|
15
|
+
# Obtains a frob.
|
16
|
+
# Used for desktop based authentication.
|
17
|
+
def get_frob
|
18
|
+
sig_options = { :method => "vimeo.auth.getFrob" }
|
19
|
+
|
20
|
+
make_request sig_options
|
21
|
+
end
|
22
|
+
|
23
|
+
# Tests the validity of an authorization token.
|
24
|
+
def check_token(auth_token)
|
25
|
+
sig_options = {
|
26
|
+
:auth_token => auth_token,
|
27
|
+
:method => "vimeo.auth.checkToken"
|
28
|
+
}
|
29
|
+
|
30
|
+
make_request sig_options
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
end # Advanced
|
36
|
+
end # Vimeo
|
@@ -0,0 +1,59 @@
|
|
1
|
+
module Vimeo
|
2
|
+
module Advanced
|
3
|
+
|
4
|
+
class Base
|
5
|
+
include HTTParty
|
6
|
+
base_uri 'vimeo.com'
|
7
|
+
|
8
|
+
# TODO: Pass an auth token, if you've already got one
|
9
|
+
# TODO: implement format_options
|
10
|
+
# Requires your API key and secret phrase.
|
11
|
+
# The API key and secret are prepended to every request.
|
12
|
+
def initialize(api_key, secret, format_options={})
|
13
|
+
@auth = { :api_key => api_key }
|
14
|
+
@secret = secret
|
15
|
+
end
|
16
|
+
|
17
|
+
# Generates a link that allows a user to authorize
|
18
|
+
# your web application to use the advanced API
|
19
|
+
def login_link(perms)
|
20
|
+
api_sig = generate_api_sig :perms => perms
|
21
|
+
"http://vimeo.com/services/auth/?api_key=#{@auth[:api_key]}&perms=#{perms}&api_sig=#{api_sig}"
|
22
|
+
end
|
23
|
+
|
24
|
+
# TODO: Implement a function that returns the correct upload URL
|
25
|
+
|
26
|
+
# Generates the proper API signature for a file upload.
|
27
|
+
def upload_sig(ticket_id, auth_token)
|
28
|
+
sig_options = {
|
29
|
+
:ticket_id => ticket_id,
|
30
|
+
:auth_token => auth_token
|
31
|
+
}
|
32
|
+
|
33
|
+
generate_api_sig sig_options
|
34
|
+
end
|
35
|
+
|
36
|
+
private
|
37
|
+
|
38
|
+
# Generates a MD5 hashed API signature for Advanced API requests
|
39
|
+
def generate_api_sig(options={})
|
40
|
+
# Every request requires the api_key parameter
|
41
|
+
options.merge! @auth
|
42
|
+
# Keys must be sorted alphabetically
|
43
|
+
api_sig = options.sort { |a, b| a.to_s <=> b.to_s }.join
|
44
|
+
Digest::MD5.hexdigest("#{@secret}#{api_sig}")
|
45
|
+
end
|
46
|
+
|
47
|
+
def query(sig_options, api_sig)
|
48
|
+
sig_options.merge :api_key => @auth[:api_key], :api_sig => api_sig
|
49
|
+
end
|
50
|
+
|
51
|
+
def make_request(sig_options)
|
52
|
+
api_sig = generate_api_sig sig_options
|
53
|
+
self.class.post "/api/rest", :query => query(sig_options, api_sig)
|
54
|
+
end
|
55
|
+
|
56
|
+
end # Base
|
57
|
+
|
58
|
+
end # Advanced
|
59
|
+
end # Vimeo
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Vimeo
|
2
|
+
module Advanced
|
3
|
+
|
4
|
+
class Contact < Vimeo::Advanced::Base
|
5
|
+
|
6
|
+
def get_list(user_id)
|
7
|
+
sig_options = {
|
8
|
+
:user_id => user_id,
|
9
|
+
:method => "vimeo.contacts.getList"
|
10
|
+
}
|
11
|
+
|
12
|
+
make_request sig_options
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
|
17
|
+
end # Advanced
|
18
|
+
end # Vimeo
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Vimeo
|
2
|
+
module Advanced
|
3
|
+
|
4
|
+
class Group < Vimeo::Advanced::Base
|
5
|
+
|
6
|
+
# Fixme: Only takes group_id as int, not group name
|
7
|
+
def get_members(group_id)
|
8
|
+
sig_options = {
|
9
|
+
:group_id => group_id,
|
10
|
+
:method => "vimeo.groups.getMembers"
|
11
|
+
}
|
12
|
+
|
13
|
+
make_request sig_options
|
14
|
+
end
|
15
|
+
|
16
|
+
end
|
17
|
+
|
18
|
+
end # Advanced
|
19
|
+
end # Vimeo
|
@@ -0,0 +1,105 @@
|
|
1
|
+
module Vimeo
|
2
|
+
module Advanced
|
3
|
+
|
4
|
+
class Person < Vimeo::Advanced::Base
|
5
|
+
|
6
|
+
def find_by_user_name(username)
|
7
|
+
sig_options = {
|
8
|
+
:username => username,
|
9
|
+
:method => "vimeo.people.findByUserName"
|
10
|
+
}
|
11
|
+
|
12
|
+
make_request sig_options
|
13
|
+
end
|
14
|
+
|
15
|
+
def find_by_email(find_email)
|
16
|
+
sig_options = {
|
17
|
+
:find_email => find_email,
|
18
|
+
:method => "vimeo.people.findByEmail"
|
19
|
+
}
|
20
|
+
|
21
|
+
make_request sig_options
|
22
|
+
end
|
23
|
+
|
24
|
+
def get_info(user_id)
|
25
|
+
sig_options = {
|
26
|
+
:user_id => user_id,
|
27
|
+
:method => "vimeo.people.getInfo"
|
28
|
+
}
|
29
|
+
|
30
|
+
make_request sig_options
|
31
|
+
end
|
32
|
+
|
33
|
+
# TODO: This seems to be returning nil from Vimeo... not implemented?
|
34
|
+
def get_portrait_url(user_id, options={})
|
35
|
+
size = options[:size]
|
36
|
+
|
37
|
+
sig_options = {
|
38
|
+
:user_id => user_id,
|
39
|
+
:method => "vimeo.people.getPortraitUrl"
|
40
|
+
}
|
41
|
+
sig_options.merge! :size => size unless size.nil?
|
42
|
+
|
43
|
+
make_request sig_options
|
44
|
+
end
|
45
|
+
|
46
|
+
# TODO: Not working on Vimeo's side
|
47
|
+
def add_contact(user_id, auth_token)
|
48
|
+
sig_options = {
|
49
|
+
:user_id => user_id,
|
50
|
+
:auth_token => auth_token,
|
51
|
+
:method => "vimeo.people.addContact"
|
52
|
+
}
|
53
|
+
|
54
|
+
make_request sig_options
|
55
|
+
end
|
56
|
+
|
57
|
+
# TODO: Not working on Vimeo's side
|
58
|
+
def remove_contact(user_id, auth_token)
|
59
|
+
sig_options = {
|
60
|
+
:user_id => user_id,
|
61
|
+
:auth_token => auth_token,
|
62
|
+
:method => "vimeo.people.removeContact"
|
63
|
+
}
|
64
|
+
|
65
|
+
make_request sig_options
|
66
|
+
end
|
67
|
+
|
68
|
+
def get_upload_status(user_id, auth_token)
|
69
|
+
sig_options = {
|
70
|
+
:user_id => user_id,
|
71
|
+
:auth_token => auth_token,
|
72
|
+
:method => "vimeo.people.getUploadStatus"
|
73
|
+
}
|
74
|
+
|
75
|
+
make_request sig_options
|
76
|
+
end
|
77
|
+
|
78
|
+
# TODO: Verify input for type?
|
79
|
+
def add_subscription(user_id, type, auth_token)
|
80
|
+
sig_options = {
|
81
|
+
:user_id => user_id,
|
82
|
+
:type => type,
|
83
|
+
:auth_token => auth_token,
|
84
|
+
:method => "vimeo.people.addSubscription"
|
85
|
+
}
|
86
|
+
|
87
|
+
make_request sig_options
|
88
|
+
end
|
89
|
+
|
90
|
+
# TODO: Verify input for type?
|
91
|
+
def remove_subscription(user_id, type, auth_token)
|
92
|
+
sig_options = {
|
93
|
+
:user_id => user_id,
|
94
|
+
:type => type,
|
95
|
+
:auth_token => auth_token,
|
96
|
+
:method => "vimeo.people.removeSubscription"
|
97
|
+
}
|
98
|
+
|
99
|
+
make_request sig_options
|
100
|
+
end
|
101
|
+
|
102
|
+
end
|
103
|
+
|
104
|
+
end # Advanced
|
105
|
+
end # Vimeo
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module Vimeo
|
2
|
+
module Advanced
|
3
|
+
|
4
|
+
class Test < Vimeo::Advanced::Base
|
5
|
+
# An echo test. Echoes all parameters.
|
6
|
+
# Options can be anything except method, api_key,
|
7
|
+
# and api_sig -- if any of these options are
|
8
|
+
# present they will be overwritten by the proper
|
9
|
+
# values.
|
10
|
+
def echo(options={})
|
11
|
+
options.merge!(:method => "vimeo.test.echo")
|
12
|
+
api_sig = generate_api_sig options
|
13
|
+
options.merge!(:api_sig => api_sig)
|
14
|
+
self.class.post("/api/rest", :query => options)
|
15
|
+
end
|
16
|
+
|
17
|
+
# A null test.
|
18
|
+
def null(auth_token)
|
19
|
+
sig_options = {
|
20
|
+
:auth_token => auth_token,
|
21
|
+
:method => "vimeo.test.null"
|
22
|
+
}
|
23
|
+
|
24
|
+
make_request sig_options
|
25
|
+
end
|
26
|
+
|
27
|
+
# Tests if the user associated to this token
|
28
|
+
# is able to make authenticated calls.
|
29
|
+
def login(auth_token)
|
30
|
+
sig_options = {
|
31
|
+
:auth_token => auth_token,
|
32
|
+
:method => "vimeo.test.login"
|
33
|
+
}
|
34
|
+
|
35
|
+
make_request sig_options
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
end # Advanced
|
40
|
+
end # Vimeo
|
@@ -0,0 +1,28 @@
|
|
1
|
+
module Vimeo
|
2
|
+
module Advanced
|
3
|
+
|
4
|
+
class Upload < Vimeo::Advanced::Base
|
5
|
+
|
6
|
+
def get_upload_ticket(auth_token)
|
7
|
+
sig_options = {
|
8
|
+
:auth_token => auth_token,
|
9
|
+
:method => "vimeo.videos.getUploadTicket"
|
10
|
+
}
|
11
|
+
|
12
|
+
make_request sig_options
|
13
|
+
end
|
14
|
+
|
15
|
+
def check_upload_status(ticket_id, auth_token)
|
16
|
+
sig_options = {
|
17
|
+
:ticket_id => ticket_id,
|
18
|
+
:auth_token => auth_token,
|
19
|
+
:method => "vimeo.videos.checkUploadStatus"
|
20
|
+
}
|
21
|
+
|
22
|
+
make_request sig_options
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
end # Advanced
|
28
|
+
end # Vimeo
|
@@ -0,0 +1,327 @@
|
|
1
|
+
module Vimeo
|
2
|
+
module Advanced
|
3
|
+
|
4
|
+
class Video < Vimeo::Advanced::Base
|
5
|
+
|
6
|
+
def get_list(user_id, options={ :page => 1, :per_page => 25, :full_response => 0 })
|
7
|
+
sig_options = {
|
8
|
+
:user_id => user_id,
|
9
|
+
:page => options[:page],
|
10
|
+
:per_page => options[:per_page],
|
11
|
+
:fullResponse => options[:full_response],
|
12
|
+
:method => "vimeo.videos.getList"
|
13
|
+
}
|
14
|
+
|
15
|
+
make_request sig_options
|
16
|
+
end
|
17
|
+
|
18
|
+
def get_uploaded_list(user_id, options={ :page => 1, :per_page => 25, :full_response => 0, :auth_token => nil })
|
19
|
+
sig_options = {
|
20
|
+
:user_id => user_id,
|
21
|
+
:page => options[:page],
|
22
|
+
:per_page => options[:per_page],
|
23
|
+
:fullResponse => options[:full_response],
|
24
|
+
:auth_token => options[:auth_token],
|
25
|
+
:method => "vimeo.videos.getUploadedList"
|
26
|
+
}
|
27
|
+
|
28
|
+
make_request sig_options
|
29
|
+
end
|
30
|
+
|
31
|
+
def get_appears_in_list(user_id, options={ :page => 1, :per_page => 25, :full_response => 0, :auth_token => nil })
|
32
|
+
sig_options = {
|
33
|
+
:user_id => user_id,
|
34
|
+
:page => options[:page],
|
35
|
+
:per_page => options[:per_page],
|
36
|
+
:fullResponse => options[:full_response],
|
37
|
+
:method => "vimeo.videos.getAppearsInList"
|
38
|
+
}
|
39
|
+
|
40
|
+
make_request sig_options
|
41
|
+
end
|
42
|
+
|
43
|
+
def get_subscriptions_list(user_id, options={ :page => 1, :per_page => 25, :full_response => 0, :auth_token => nil })
|
44
|
+
sig_options = {
|
45
|
+
:user_id => user_id,
|
46
|
+
:page => options[:page],
|
47
|
+
:per_page => options[:per_page],
|
48
|
+
:fullResponse => options[:full_response],
|
49
|
+
:auth_token => options[:auth_token],
|
50
|
+
:method => "vimeo.videos.getSubscriptionsList"
|
51
|
+
}
|
52
|
+
|
53
|
+
make_request sig_options
|
54
|
+
end
|
55
|
+
|
56
|
+
def get_list_by_tag(tag, options={ :page => 1, :per_page => 25, :full_response => 0, :auth_token => nil })
|
57
|
+
user_id = options[:user_id]
|
58
|
+
|
59
|
+
sig_options = {
|
60
|
+
:tag => tag,
|
61
|
+
:page => options[:page],
|
62
|
+
:per_page => options[:per_page],
|
63
|
+
:fullResponse => options[:full_response],
|
64
|
+
:auth_token => options[:auth_token],
|
65
|
+
:method => "vimeo.videos.getListByTag"
|
66
|
+
}
|
67
|
+
sig_options.merge! :user_id => user_id if !user_id.nil?
|
68
|
+
|
69
|
+
make_request sig_options
|
70
|
+
end
|
71
|
+
|
72
|
+
def get_like_list(user_id, options={ :page => 1, :per_page => 25, :full_response => 0, :auth_token => nil })
|
73
|
+
sig_options = {
|
74
|
+
:user_id => user_id,
|
75
|
+
:page => options[:page],
|
76
|
+
:per_page => options[:per_page],
|
77
|
+
:fullResponse => options[:full_response],
|
78
|
+
:auth_token => options[:auth_token],
|
79
|
+
:method => "vimeo.videos.getLikeList"
|
80
|
+
}
|
81
|
+
|
82
|
+
make_request sig_options
|
83
|
+
end
|
84
|
+
|
85
|
+
def get_contacts_list(user_id, options={ :page => 1, :per_page => 25, :full_response => 0, :auth_token => nil })
|
86
|
+
sig_options = {
|
87
|
+
:user_id => user_id,
|
88
|
+
:page => options[:page],
|
89
|
+
:per_page => options[:per_page],
|
90
|
+
:fullResponse => options[:full_response],
|
91
|
+
:auth_token => options[:auth_token],
|
92
|
+
:method => "vimeo.videos.getContactsList"
|
93
|
+
}
|
94
|
+
|
95
|
+
make_request sig_options
|
96
|
+
end
|
97
|
+
|
98
|
+
def get_contacts_like_list(user_id, options={ :page => 1, :per_page => 25, :full_response => 0, :auth_token => nil })
|
99
|
+
sig_options = {
|
100
|
+
:user_id => user_id,
|
101
|
+
:page => options[:page],
|
102
|
+
:per_page => options[:per_page],
|
103
|
+
:fullResponse => options[:full_response],
|
104
|
+
:auth_token => options[:auth_token],
|
105
|
+
:method => "vimeo.videos.getContactsLikeList"
|
106
|
+
}
|
107
|
+
|
108
|
+
make_request sig_options
|
109
|
+
end
|
110
|
+
|
111
|
+
def search(q, options={ :page => 1, :per_page => 25, :full_response => 0, :auth_token => nil })
|
112
|
+
user_id = options[:user_id]
|
113
|
+
contacts_only = options[:contacts_only]
|
114
|
+
escaped_query = CGI.escape(q)
|
115
|
+
|
116
|
+
sig_options = {
|
117
|
+
:query => escaped_query,
|
118
|
+
:page => options[:page],
|
119
|
+
:per_page => options[:per_page],
|
120
|
+
:fullResponse => options[:full_response],
|
121
|
+
:auth_token => options[:auth_token],
|
122
|
+
:method => "vimeo.videos.search"
|
123
|
+
}
|
124
|
+
sig_options.merge! :user_id => user_id if !user_id.nil?
|
125
|
+
sig_options.merge! :contacts_only => contacts_only if !contacts_only.nil?
|
126
|
+
|
127
|
+
make_request sig_options
|
128
|
+
end
|
129
|
+
|
130
|
+
def get_info(video_id, auth_token=nil)
|
131
|
+
sig_options = {
|
132
|
+
:video_id => video_id,
|
133
|
+
:auth_token => auth_token,
|
134
|
+
:method => "vimeo.videos.getInfo"
|
135
|
+
}
|
136
|
+
|
137
|
+
make_request sig_options
|
138
|
+
end
|
139
|
+
|
140
|
+
def delete(video_id, auth_token)
|
141
|
+
sig_options = {
|
142
|
+
:video_id => video_id,
|
143
|
+
:auth_token => auth_token,
|
144
|
+
:method => "vimeo.videos.delete"
|
145
|
+
}
|
146
|
+
|
147
|
+
make_request sig_options
|
148
|
+
end
|
149
|
+
|
150
|
+
def get_thumbnail_url(video_id, size=100)
|
151
|
+
sig_options = {
|
152
|
+
:video_id => video_id,
|
153
|
+
:size => size,
|
154
|
+
:method => "vimeo.videos.getThumbnailUrl"
|
155
|
+
}
|
156
|
+
|
157
|
+
make_request sig_options
|
158
|
+
end
|
159
|
+
|
160
|
+
def set_title(video_id, title, auth_token)
|
161
|
+
#escaped_title = CGI.escape(title)
|
162
|
+
|
163
|
+
sig_options = {
|
164
|
+
:video_id => video_id,
|
165
|
+
:title => title,
|
166
|
+
:auth_token => auth_token,
|
167
|
+
:method => "vimeo.videos.setTitle"
|
168
|
+
}
|
169
|
+
|
170
|
+
make_request sig_options
|
171
|
+
end
|
172
|
+
|
173
|
+
def set_caption(video_id, caption, auth_token)
|
174
|
+
escaped_caption = CGI.escape(caption)
|
175
|
+
|
176
|
+
sig_options = {
|
177
|
+
:video_id => video_id,
|
178
|
+
:caption => escaped_caption,
|
179
|
+
:auth_token => auth_token,
|
180
|
+
:method => "vimeo.videos.setCaption"
|
181
|
+
}
|
182
|
+
|
183
|
+
make_request sig_options
|
184
|
+
end
|
185
|
+
|
186
|
+
def set_favorite(video_id, favorite, auth_token)
|
187
|
+
f = favorite ? true : false
|
188
|
+
|
189
|
+
sig_options = {
|
190
|
+
:video_id => video_id,
|
191
|
+
:favorite => f,
|
192
|
+
:auth_token => auth_token,
|
193
|
+
:method => "vimeo.videos.setFavorite"
|
194
|
+
}
|
195
|
+
|
196
|
+
make_request sig_options
|
197
|
+
end
|
198
|
+
|
199
|
+
def add_tags(video_id, tags, auth_token)
|
200
|
+
sig_options = {
|
201
|
+
:video_id => video_id,
|
202
|
+
:tags => tags,
|
203
|
+
:auth_token => auth_token,
|
204
|
+
:method => "vimeo.videos.addTags"
|
205
|
+
}
|
206
|
+
|
207
|
+
make_request sig_options
|
208
|
+
end
|
209
|
+
|
210
|
+
def remove_tag(video_id, tag_id, auth_token)
|
211
|
+
sig_options = {
|
212
|
+
:video_id => video_id,
|
213
|
+
:tag_id => tag_id,
|
214
|
+
:auth_token => auth_token,
|
215
|
+
:method => "vimeo.videos.removeTag"
|
216
|
+
}
|
217
|
+
|
218
|
+
make_request sig_options
|
219
|
+
end
|
220
|
+
|
221
|
+
def clear_tags(video_id, auth_token)
|
222
|
+
sig_options = {
|
223
|
+
:video_id => video_id,
|
224
|
+
:auth_token => auth_token,
|
225
|
+
:method => "vimeo.videos.clearTags"
|
226
|
+
}
|
227
|
+
|
228
|
+
make_request sig_options
|
229
|
+
end
|
230
|
+
|
231
|
+
def add_cast(video_id, user_id, auth_token, options={})
|
232
|
+
role = options[:role]
|
233
|
+
|
234
|
+
sig_options = {
|
235
|
+
:video_id => video_id,
|
236
|
+
:user_id => user_id,
|
237
|
+
:auth_token => auth_token,
|
238
|
+
:method => "vimeo.videos.addCast"
|
239
|
+
}
|
240
|
+
sig_options.merge! :role => role unless role.nil?
|
241
|
+
|
242
|
+
make_request sig_options
|
243
|
+
end
|
244
|
+
|
245
|
+
def get_cast(video_id, auth_token=nil)
|
246
|
+
sig_options = {
|
247
|
+
:video_id => video_id,
|
248
|
+
:auth_token => auth_token,
|
249
|
+
:method => "vimeo.videos.getCast"
|
250
|
+
}
|
251
|
+
|
252
|
+
make_request sig_options
|
253
|
+
end
|
254
|
+
|
255
|
+
def remove_cast(video_id, user_id, auth_token)
|
256
|
+
sig_options = {
|
257
|
+
:video_id => video_id,
|
258
|
+
:user_id => user_id,
|
259
|
+
:auth_token => auth_token,
|
260
|
+
:method => "vimeo.videos.removeCast"
|
261
|
+
}
|
262
|
+
|
263
|
+
make_request sig_options
|
264
|
+
end
|
265
|
+
|
266
|
+
# TODO: Add ability to specify users
|
267
|
+
def set_privacy(video_id, privacy, auth_token)
|
268
|
+
sig_options = {
|
269
|
+
:video_id => video_id,
|
270
|
+
:privacy => privacy,
|
271
|
+
:auth_token => auth_token,
|
272
|
+
:method => "vimeo.videos.setPrivacy"
|
273
|
+
}
|
274
|
+
|
275
|
+
make_request sig_options
|
276
|
+
end
|
277
|
+
|
278
|
+
def get_comments_list(video_id)
|
279
|
+
sig_options = {
|
280
|
+
:video_id => video_id,
|
281
|
+
:method => "vimeo.videos.comments.getList"
|
282
|
+
}
|
283
|
+
|
284
|
+
make_request sig_options
|
285
|
+
end
|
286
|
+
|
287
|
+
def add_comment(video_id, comment_text, auth_token, options={})
|
288
|
+
reply_to_comment_id = options[:reply_to_comment_id]
|
289
|
+
|
290
|
+
sig_options = {
|
291
|
+
:video_id => video_id,
|
292
|
+
:comment_text => comment_text,
|
293
|
+
:auth_token => auth_token,
|
294
|
+
:method => "vimeo.videos.comments.addComment"
|
295
|
+
}
|
296
|
+
sig_options.merge! :reply_to_comment_id => reply_to_comment_id unless reply_to_comment_id.nil?
|
297
|
+
|
298
|
+
make_request sig_options
|
299
|
+
end
|
300
|
+
|
301
|
+
def delete_comment(video_id, comment_id, auth_token)
|
302
|
+
sig_options = {
|
303
|
+
:video_id => video_id,
|
304
|
+
:comment_id => comment_id,
|
305
|
+
:auth_token => auth_token,
|
306
|
+
:method => "vimeo.videos.comments.deleteComment"
|
307
|
+
}
|
308
|
+
|
309
|
+
make_request sig_options
|
310
|
+
end
|
311
|
+
|
312
|
+
def edit_comment(video_id, comment_id, comment_text, auth_token)
|
313
|
+
sig_options = {
|
314
|
+
:video_id => video_id,
|
315
|
+
:comment_id => comment_id,
|
316
|
+
:comment_text => comment_text,
|
317
|
+
:auth_token => auth_token,
|
318
|
+
:method => "vimeo.videos.comments.editComment"
|
319
|
+
}
|
320
|
+
|
321
|
+
make_request sig_options
|
322
|
+
end
|
323
|
+
|
324
|
+
end
|
325
|
+
|
326
|
+
end # Advanced
|
327
|
+
end # Vimeo
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Vimeo
|
2
|
+
module Simple
|
3
|
+
|
4
|
+
class Activity < Vimeo::Simple::Base
|
5
|
+
def self.user_did(username)
|
6
|
+
get("/activity/#{username}/user_did.json")
|
7
|
+
end
|
8
|
+
|
9
|
+
def self.happened_to_user(username)
|
10
|
+
get("/activity/#{username}/happened_to_user.json")
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.contacts_did(username)
|
14
|
+
get("/activity/#{username}/contacts_did.json")
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.happened_to_contacts(username)
|
18
|
+
get("/activity/#{username}/happened_to_contacts.json")
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.everyone_did(username)
|
22
|
+
get("/activity/#{username}/everyone_did.json")
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
end # Simple
|
27
|
+
end # Vimeo
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Vimeo
|
2
|
+
module Simple
|
3
|
+
|
4
|
+
class Album < Vimeo::Simple::Base
|
5
|
+
# Returns this album's clips.
|
6
|
+
def self.clips(album_id)
|
7
|
+
get("/album/#{album_id}/clips.json")
|
8
|
+
end
|
9
|
+
|
10
|
+
# Returns this album's information.
|
11
|
+
def self.info(album_id)
|
12
|
+
get("/album/#{album_id}/info.json")
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
end # Simple
|
17
|
+
end # Vimeo
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Vimeo
|
2
|
+
module Simple
|
3
|
+
|
4
|
+
class Channel < Vimeo::Simple::Base
|
5
|
+
# Returns this channel's clips.
|
6
|
+
def self.clips(channelname)
|
7
|
+
get("/channel/#{channelname}/clips.json")
|
8
|
+
end
|
9
|
+
|
10
|
+
# Returns this channel's information.
|
11
|
+
def self.info(channelname)
|
12
|
+
get("/channel/#{channelname}/info.json")
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
end # Simple
|
17
|
+
end # Vimeo
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Vimeo
|
2
|
+
module Simple
|
3
|
+
|
4
|
+
class Group < Vimeo::Simple::Base
|
5
|
+
# Returns this group's clips.
|
6
|
+
def self.clips(groupname)
|
7
|
+
get("/group/#{groupname}/clips.json")
|
8
|
+
end
|
9
|
+
|
10
|
+
# Returns this group's users.
|
11
|
+
def self.users(groupname)
|
12
|
+
get("/group/#{groupname}/users.json")
|
13
|
+
end
|
14
|
+
|
15
|
+
# Returns this group's information.
|
16
|
+
def self.info(groupname)
|
17
|
+
get("/group/#{groupname}/info.json")
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
end # Simple
|
22
|
+
end # Vimeo
|
@@ -0,0 +1,62 @@
|
|
1
|
+
module Vimeo
|
2
|
+
module Simple
|
3
|
+
|
4
|
+
class User < Vimeo::Simple::Base
|
5
|
+
# Returns this user's information.
|
6
|
+
def self.info(username)
|
7
|
+
get("/#{username}/info.json")
|
8
|
+
end
|
9
|
+
|
10
|
+
# Returns this user's clips.
|
11
|
+
def self.clips(username)
|
12
|
+
get("/#{username}/clips.json")
|
13
|
+
end
|
14
|
+
|
15
|
+
# Returns this user's liked clips.
|
16
|
+
def self.likes(username)
|
17
|
+
get("/#{username}/likes.json")
|
18
|
+
end
|
19
|
+
|
20
|
+
# Returns the clips this user appears in.
|
21
|
+
def self.appears_in(username)
|
22
|
+
get("/#{username}/appears_in.json")
|
23
|
+
end
|
24
|
+
|
25
|
+
# Returns all clips related to this user.
|
26
|
+
def self.all_clips(username)
|
27
|
+
get("/#{username}/all_clips.json")
|
28
|
+
end
|
29
|
+
|
30
|
+
# Returns this user's subscriptions.
|
31
|
+
def self.subscriptions(username)
|
32
|
+
get("/#{username}/subscriptions.json")
|
33
|
+
end
|
34
|
+
|
35
|
+
# Returns this user's albums.
|
36
|
+
def self.albums(username)
|
37
|
+
get("/#{username}/albums.json")
|
38
|
+
end
|
39
|
+
|
40
|
+
# Returns this user's channels.
|
41
|
+
def self.channels(username)
|
42
|
+
get("/#{username}/channels.json")
|
43
|
+
end
|
44
|
+
|
45
|
+
# Returns this user's groups.
|
46
|
+
def self.groups(username)
|
47
|
+
get("/#{username}/groups.json")
|
48
|
+
end
|
49
|
+
|
50
|
+
# Returns this user's contact's clips.
|
51
|
+
def self.contacts_clips(username)
|
52
|
+
get("/#{username}/contacts_clips.json")
|
53
|
+
end
|
54
|
+
|
55
|
+
# Returns the clips that this user's contact's liked.
|
56
|
+
def self.contacts_like(username)
|
57
|
+
get("/#{username}/contacts_like.json")
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
end # End Simple
|
62
|
+
end # End Vimeo
|
data/lib/vimeo/simple.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
$:.unshift(File.dirname(__FILE__))
|
2
|
+
require 'simple/base'
|
3
|
+
require 'simple/activity'
|
4
|
+
require 'simple/album'
|
5
|
+
require 'simple/channel'
|
6
|
+
require 'simple/clip'
|
7
|
+
require 'simple/group'
|
8
|
+
require 'simple/user'
|
9
|
+
|
10
|
+
module Vimeo
|
11
|
+
module Simple
|
12
|
+
|
13
|
+
end # Simple
|
14
|
+
end # Vimeo
|
data/lib/vimeo.rb
ADDED
data/test/test_helper.rb
ADDED
data/test/vimeo_test.rb
ADDED
metadata
ADDED
@@ -0,0 +1,93 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: jwbynum-vimeo
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Matt Hooks
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2009-01-07 00:00:00 -08:00
|
13
|
+
default_executable:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: jnunemaker-httparty
|
17
|
+
type: :runtime
|
18
|
+
version_requirement:
|
19
|
+
version_requirements: !ruby/object:Gem::Requirement
|
20
|
+
requirements:
|
21
|
+
- - ">="
|
22
|
+
- !ruby/object:Gem::Version
|
23
|
+
version: 0.2.6
|
24
|
+
version:
|
25
|
+
description: A full featured Ruby implementation of the Vimeo API.
|
26
|
+
email: matthooks@gmail.com
|
27
|
+
executables: []
|
28
|
+
|
29
|
+
extensions: []
|
30
|
+
|
31
|
+
extra_rdoc_files:
|
32
|
+
- README.rdoc
|
33
|
+
- LICENSE
|
34
|
+
- CHANGELOG.rdoc
|
35
|
+
files:
|
36
|
+
- CHANGELOG.rdoc
|
37
|
+
- README.rdoc
|
38
|
+
- VERSION.yml
|
39
|
+
- lib/vimeo
|
40
|
+
- lib/vimeo/advanced
|
41
|
+
- lib/vimeo/advanced/auth.rb
|
42
|
+
- lib/vimeo/advanced/base.rb
|
43
|
+
- lib/vimeo/advanced/contact.rb
|
44
|
+
- lib/vimeo/advanced/group.rb
|
45
|
+
- lib/vimeo/advanced/person.rb
|
46
|
+
- lib/vimeo/advanced/test.rb
|
47
|
+
- lib/vimeo/advanced/upload.rb
|
48
|
+
- lib/vimeo/advanced/video.rb
|
49
|
+
- lib/vimeo/advanced.rb
|
50
|
+
- lib/vimeo/simple
|
51
|
+
- lib/vimeo/simple/activity.rb
|
52
|
+
- lib/vimeo/simple/album.rb
|
53
|
+
- lib/vimeo/simple/base.rb
|
54
|
+
- lib/vimeo/simple/channel.rb
|
55
|
+
- lib/vimeo/simple/clip.rb
|
56
|
+
- lib/vimeo/simple/group.rb
|
57
|
+
- lib/vimeo/simple/user.rb
|
58
|
+
- lib/vimeo/simple.rb
|
59
|
+
- lib/vimeo.rb
|
60
|
+
- test/test_helper.rb
|
61
|
+
- test/vimeo_test.rb
|
62
|
+
- LICENSE
|
63
|
+
has_rdoc: true
|
64
|
+
homepage: http://github.com/matthooks/vimeo
|
65
|
+
post_install_message:
|
66
|
+
rdoc_options:
|
67
|
+
- --main
|
68
|
+
- README.rdoc
|
69
|
+
- --inline-source
|
70
|
+
- --charset=UTF-8
|
71
|
+
require_paths:
|
72
|
+
- lib
|
73
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
74
|
+
requirements:
|
75
|
+
- - ">="
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: "0"
|
78
|
+
version:
|
79
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
80
|
+
requirements:
|
81
|
+
- - ">="
|
82
|
+
- !ruby/object:Gem::Version
|
83
|
+
version: "0"
|
84
|
+
version:
|
85
|
+
requirements: []
|
86
|
+
|
87
|
+
rubyforge_project:
|
88
|
+
rubygems_version: 1.2.0
|
89
|
+
signing_key:
|
90
|
+
specification_version: 2
|
91
|
+
summary: A full featured Ruby implementation of the Vimeo API.
|
92
|
+
test_files: []
|
93
|
+
|