matthooks-vimeo 0.1.1 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/README.textile ADDED
@@ -0,0 +1,79 @@
1
+ h1. 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
+ h2. 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", :source => "http://gems.github.com/"@
20
+
21
+ h2. Use
22
+
23
+ Right now there are two models:
24
+
25
+ VimeoSimple and VimeoAdvanced
26
+
27
+ h2. VimeoSimple
28
+
29
+ VimeoSimple is comprised of class methods:
30
+
31
+ * VimeoSimple.user_info(username)
32
+ * VimeoSimple.user_clips(username)
33
+ * VimeoSimple.user_likes(username)
34
+ * VimeoSimple.user_appears_in(username)
35
+ * VimeoSimple.user_all_clips(username)
36
+ * VimeoSimple.user_subscriptions(username)
37
+ * VimeoSimple.user_albums(username)
38
+ * VimeoSimple.user_channels(username)
39
+ * VimeoSimple.user_groups(username)
40
+ * VimeoSimple.user_contacts_clips(username)
41
+ * VimeoSimple.user_contacts_like(username)
42
+ * VimeoSimple.clip_info(video_id)
43
+ * VimeoSimple.activity_user_did(username)
44
+ * VimeoSimple.activity_happened_to_user(username)
45
+ * VimeoSimple.activity_contacts_did(username)
46
+ * VimeoSimple.activity_happened_to_contacts(username)
47
+ * VimeoSimple.activity_everyone_did(username)
48
+ * VimeoSimple.group_clips(groupname)
49
+ * VimeoSimple.group_users(groupname)
50
+ * VimeoSimple.group_info(groupname)
51
+ * VimeoSimple.channel_clips(channelname)
52
+ * VimeoSimple.channel_info(channelname)
53
+ * VimeoSimple.album_clips(album_id)
54
+ * VimeoSimple.album_info(album_id)
55
+
56
+ h2. VimeoAdvanced
57
+
58
+ VimeoAdvanced must be instantiated with an your application's api key and secret:
59
+
60
+ @v = VimeoAdvanced.new("api_key", "secret")@
61
+
62
+ Then you can make calls on the instance:
63
+
64
+ @v.videos_get_list(user_id, options)@
65
+
66
+ h2. Todo
67
+
68
+ * 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.
69
+ * Namespaces! Modules! Etc.
70
+ * Better initialize method for the advanced api that takes the auth_token into account.
71
+ * Define a method that returns the correct form URL for uploading videos.
72
+ * video_set_privacy needs the ability to specify users.
73
+ * Some methods are not implemented by vimeo or don't seem to work.
74
+ * Input verification? The alternative is to just let vimeo handle it.
75
+ * May need to escape input in several cases
76
+ * There's PLENTY of room to re-factor as there is a ton of duplication and I started passing inputs differently about halfway through.
77
+ * Tests
78
+
79
+ h3. Copyright (c) 2008 Matt Hooks. See LICENSE for details.
data/VERSION.yml ADDED
@@ -0,0 +1,4 @@
1
+ ---
2
+ :patch: 2
3
+ :major: 0
4
+ :minor: 1
data/lib/vimeo.rb ADDED
@@ -0,0 +1,883 @@
1
+ require 'rubygems'
2
+ require 'httparty'
3
+ require 'digest/md5'
4
+ require 'cgi'
5
+
6
+ class VimeoSimple
7
+ include HTTParty
8
+ base_uri 'vimeo.com/api'
9
+
10
+ # USER
11
+ def self.user_info(username)
12
+ get("/#{username}/info.json")
13
+ end
14
+
15
+ def self.user_clips(username)
16
+ get("/#{username}/clips.json")
17
+ end
18
+
19
+ def self.user_likes(username)
20
+ get("/#{username}/likes.json")
21
+ end
22
+
23
+ def self.user_appears_in(username)
24
+ get("/#{username}/appears_in.json")
25
+ end
26
+
27
+ def self.user_all_clips(username)
28
+ get("/#{username}/all_clips.json")
29
+ end
30
+
31
+ def self.user_subscriptions(username)
32
+ get("/#{username}/subscriptions.json")
33
+ end
34
+
35
+ def self.user_albums(username)
36
+ get("/#{username}/albums.json")
37
+ end
38
+
39
+ def self.user_channels(username)
40
+ get("/#{username}/channels.json")
41
+ end
42
+
43
+ def self.user_groups(username)
44
+ get("/#{username}/groups.json")
45
+ end
46
+
47
+ def self.user_contacts_clips(username)
48
+ get("/#{username}/contacts_clips.json")
49
+ end
50
+
51
+ def self.user_contacts_like(username)
52
+ get("/#{username}/contacts_like.json")
53
+ end
54
+
55
+ # CLIPS
56
+ def self.clip_info(video_id)
57
+ get("/clip/#{video_id}.json")
58
+ end
59
+
60
+ # ACTIVITY
61
+ def self.activity_user_did(username)
62
+ get("/activity/#{username}/user_did.json")
63
+ end
64
+
65
+ def self.activity_happened_to_user(username)
66
+ get("/activity/#{username}/happened_to_user.json")
67
+ end
68
+
69
+ def self.activity_contacts_did(username)
70
+ get("/activity/#{username}/contacts_did.json")
71
+ end
72
+
73
+ def self.activity_happened_to_contacts(username)
74
+ get("/activity/#{username}/happened_to_contacts.json")
75
+ end
76
+
77
+ def self.activity_everyone_did(username)
78
+ get("/activity/#{username}/everyone_did.json")
79
+ end
80
+
81
+ # GROUPS
82
+ def self.group_clips(groupname)
83
+ get("/group/#{groupname}/clips.json")
84
+ end
85
+
86
+ def self.group_users(groupname)
87
+ get("/group/#{groupname}/users.json")
88
+ end
89
+
90
+ def self.group_info(groupname)
91
+ get("/group/#{groupname}/info.json")
92
+ end
93
+
94
+ # CHANNELS
95
+ def self.channel_clips(channelname)
96
+ get("/channel/#{channelname}/clips.json")
97
+ end
98
+
99
+ def self.channel_info(channelname)
100
+ get("/channel/#{channelname}/info.json")
101
+ end
102
+
103
+ # ALBUMS
104
+ def self.album_clips(album_id)
105
+ get("/album/#{album_id}/clips.json")
106
+ end
107
+
108
+ def self.album_info(album_id)
109
+ get("/album/#{album_id}/info.json")
110
+ end
111
+
112
+ end
113
+
114
+ class VimeoAdvanced
115
+ include HTTParty
116
+ base_uri 'vimeo.com'
117
+
118
+ def initialize(api_key, secret, format_options={})
119
+ @auth = { :api_key => api_key }
120
+ @secret = secret
121
+ # TODO: implement format_options
122
+ end
123
+
124
+ # HELPERS
125
+ def login_link(perms)
126
+ api_sig = generate_api_sig :perms => perms
127
+ "http://vimeo.com/services/auth/?api_key=#{@auth[:api_key]}&perms=#{perms}&api_sig=#{api_sig}"
128
+ end
129
+
130
+ # TODO: Implement a function that returns the correct upload URL
131
+
132
+ def upload_sig(ticket_id, auth_token)
133
+ sig_options = {
134
+ :ticket_id => ticket_id,
135
+ :auth_token => auth_token
136
+ }
137
+
138
+ generate_api_sig sig_options
139
+ end
140
+
141
+ # TEST METHODS
142
+ def test_echo(options={})
143
+ method = "vimeo.test.echo"
144
+ options.merge!(:method => method)
145
+ api_sig = generate_api_sig options
146
+ options.merge!(:api_sig => api_sig)
147
+ self.class.post("/api/rest", :query => options)
148
+ end
149
+
150
+ def test_null(auth_token)
151
+ method = "vimeo.test.null"
152
+ api_sig = generate_api_sig :auth_token => auth_token, :method => method
153
+ self.class.post("/api/rest", :query => {
154
+ :api_key => @auth[:api_key],
155
+ :method => method,
156
+ :auth_token => auth_token,
157
+ :api_sig => api_sig
158
+ })
159
+ end
160
+
161
+ def test_login(auth_token)
162
+ method = "vimeo.test.login"
163
+ api_sig = generate_api_sig :auth_token => auth_token, :method => method
164
+ self.class.post("/api/rest", :query => {
165
+ :api_key => @auth[:api_key],
166
+ :auth_token => auth_token,
167
+ :method => method,
168
+ :api_sig => api_sig
169
+ })
170
+ end
171
+
172
+ # AUTHENTICATION
173
+ def get_token(frob)
174
+ method = "vimeo.auth.getToken"
175
+ api_sig = generate_api_sig :frob => frob, :method => method
176
+ self.class.post("/api/rest", :query => {
177
+ :api_key => @auth[:api_key],
178
+ :frob => frob,
179
+ :method => method,
180
+ :api_sig => api_sig
181
+ })
182
+ end
183
+
184
+ def get_frob
185
+ method = "vimeo.auth.getFrob"
186
+ api_sig = generate_api_sig :method => method
187
+ self.class.post("/api/rest", :query => {
188
+ :api_key => @auth[:api_key],
189
+ :method => method,
190
+ :api_sig => api_sig
191
+ })
192
+ end
193
+
194
+ def check_token(auth_token)
195
+ method = "vimeo.auth.checkToken"
196
+ api_sig = generate_api_sig :auth_token => auth_token, :method => method
197
+ self.class.post("/api/rest", :query => {
198
+ :api_key => @auth[:api_key],
199
+ :auth_token => auth_token,
200
+ :method => method,
201
+ :api_sig => api_sig
202
+ })
203
+ end
204
+
205
+ # LISTS OF VIDEOS
206
+ def videos_get_list(user_id, options={ :page => 1, :per_page => 25, :full_response => 0 })
207
+ page = options[:page]
208
+ per_page = options[:per_page]
209
+ full_response = options[:full_response]
210
+ method = "vimeo.videos.getList"
211
+ api_sig = generate_api_sig :user_id => user_id, :page => page, :per_page => per_page, :fullResponse => full_response, :method => method
212
+ self.class.post("/api/rest", :query => {
213
+ :api_key => @auth[:api_key],
214
+ :user_id => user_id,
215
+ :page => page,
216
+ :per_page => per_page,
217
+ :fullResponse => full_response,
218
+ :method => method,
219
+ :api_sig => api_sig
220
+ })
221
+ end
222
+
223
+ def videos_get_uploaded_list(user_id, options={ :page => 1, :per_page => 25, :full_response => 0, :auth_token => nil })
224
+ page = options[:page]
225
+ per_page = options[:per_page]
226
+ full_response = options[:full_response]
227
+ auth_token = options[:auth_token]
228
+ method = "vimeo.videos.getUploadedList"
229
+ api_sig = generate_api_sig :user_id => user_id, :page => page, :per_page => per_page, :fullResponse => full_response, :auth_token => auth_token, :method => method
230
+ self.class.post("/api/rest", :query => {
231
+ :api_key => @auth[:api_key],
232
+ :user_id => user_id,
233
+ :page => page,
234
+ :per_page => per_page,
235
+ :fullResponse => full_response,
236
+ :auth_token => auth_token,
237
+ :method => method,
238
+ :api_sig => api_sig
239
+ })
240
+ end
241
+
242
+ def videos_get_appears_in_list(user_id, options={ :page => 1, :per_page => 25, :full_response => 0, :auth_token => nil })
243
+ page = options[:page]
244
+ per_page = options[:per_page]
245
+ full_response = options[:full_response]
246
+ auth_token = options[:auth_token]
247
+ method = "vimeo.videos.getAppearsInList"
248
+ api_sig = generate_api_sig :user_id => user_id, :page => page, :per_page => per_page, :fullResponse => full_response, :auth_token => auth_token, :method => method
249
+ self.class.post("/api/rest", :query => {
250
+ :api_key => @auth[:api_key],
251
+ :user_id => user_id,
252
+ :page => page,
253
+ :per_page => per_page,
254
+ :fullResponse => full_response,
255
+ :auth_token => auth_token,
256
+ :method => method,
257
+ :api_sig => api_sig
258
+ })
259
+ end
260
+
261
+ def videos_get_subscriptions_list(user_id, options={ :page => 1, :per_page => 25, :full_response => 0, :auth_token => nil })
262
+ page = options[:page]
263
+ per_page = options[:per_page]
264
+ full_response = options[:full_response]
265
+ auth_token = options[:auth_token]
266
+ method = "vimeo.videos.getSubscriptionsList"
267
+ api_sig = generate_api_sig :user_id => user_id, :page => page, :per_page => per_page, :fullResponse => full_response, :auth_token => auth_token, :method => method
268
+ self.class.post("/api/rest", :query => {
269
+ :api_key => @auth[:api_key],
270
+ :user_id => user_id,
271
+ :page => page,
272
+ :per_page => per_page,
273
+ :fullResponse => full_response,
274
+ :auth_token => auth_token,
275
+ :method => method,
276
+ :api_sig => api_sig
277
+ })
278
+ end
279
+
280
+ def videos_get_list_by_tag(tag, options={ :page => 1, :per_page => 25, :full_response => 0, :auth_token => nil })
281
+ user_id = options[:user_id]
282
+ page = options[:page]
283
+ per_page = options[:per_page]
284
+ full_response = options[:full_response]
285
+ auth_token = options[:auth_token]
286
+ method = "vimeo.videos.getListByTag"
287
+
288
+ sig_options = {
289
+ :tag => tag,
290
+ :page => page,
291
+ :per_page => per_page,
292
+ :fullResponse => full_response,
293
+ :auth_token => auth_token,
294
+ :method => method
295
+ }
296
+ sig_options.merge! :user_id => user_id if !user_id.nil?
297
+
298
+ api_sig = generate_api_sig sig_options
299
+ query = sig_options.merge :api_key => @auth[:api_key], :api_sig => api_sig
300
+
301
+ self.class.post("/api/rest", :query => query)
302
+ end
303
+
304
+ def videos_get_like_list(user_id, options={ :page => 1, :per_page => 25, :full_response => 0, :auth_token => nil })
305
+ page = options[:page]
306
+ per_page = options[:per_page]
307
+ full_response = options[:full_response]
308
+ auth_token = options[:auth_token]
309
+ method = "vimeo.videos.getLikeList"
310
+
311
+ sig_options = {
312
+ :user_id => user_id,
313
+ :page => page,
314
+ :per_page => per_page,
315
+ :fullResponse => full_response,
316
+ :auth_token => auth_token,
317
+ :method => method
318
+ }
319
+
320
+ api_sig = generate_api_sig sig_options
321
+ query = sig_options.merge :api_key => @auth[:api_key], :api_sig => api_sig
322
+
323
+ self.class.post("/api/rest", :query => query)
324
+ end
325
+
326
+ def videos_get_contacts_list(user_id, options={ :page => 1, :per_page => 25, :full_response => 0, :auth_token => nil })
327
+ page = options[:page]
328
+ per_page = options[:per_page]
329
+ full_response = options[:full_response]
330
+ auth_token = options[:auth_token]
331
+ method = "vimeo.videos.getContactsList"
332
+
333
+ sig_options = {
334
+ :user_id => user_id,
335
+ :page => page,
336
+ :per_page => per_page,
337
+ :fullResponse => full_response,
338
+ :auth_token => auth_token,
339
+ :method => method
340
+ }
341
+
342
+ api_sig = generate_api_sig sig_options
343
+ query = sig_options.merge :api_key => @auth[:api_key], :api_sig => api_sig
344
+
345
+ self.class.post("/api/rest", :query => query)
346
+ end
347
+
348
+ def videos_get_contacts_like_list(user_id, options={ :page => 1, :per_page => 25, :full_response => 0, :auth_token => nil })
349
+ page = options[:page]
350
+ per_page = options[:per_page]
351
+ full_response = options[:full_response]
352
+ auth_token = options[:auth_token]
353
+ method = "vimeo.videos.getContactsLikeList"
354
+
355
+ sig_options = {
356
+ :user_id => user_id,
357
+ :page => page,
358
+ :per_page => per_page,
359
+ :fullResponse => full_response,
360
+ :auth_token => auth_token,
361
+ :method => method
362
+ }
363
+
364
+ api_sig = generate_api_sig sig_options
365
+ query = sig_options.merge :api_key => @auth[:api_key], :api_sig => api_sig
366
+
367
+ self.class.post("/api/rest", :query => query)
368
+ end
369
+
370
+ def videos_search(q, options={ :page => 1, :per_page => 25, :full_response => 0, :auth_token => nil })
371
+ user_id = options[:user_id]
372
+ contacts_only = options[:contacts_only]
373
+ page = options[:page]
374
+ per_page = options[:per_page]
375
+ full_response = options[:full_response]
376
+ auth_token = options[:auth_token]
377
+ method = "vimeo.videos.search"
378
+ escaped_query = CGI.escape(q)
379
+
380
+ sig_options = {
381
+ :query => escaped_query,
382
+ :page => page,
383
+ :per_page => per_page,
384
+ :fullResponse => full_response,
385
+ :auth_token => auth_token,
386
+ :method => method
387
+ }
388
+ sig_options.merge! :user_id => user_id if !user_id.nil?
389
+ sig_options.merge! :contacts_only => contacts_only if !contacts_only.nil?
390
+
391
+ api_sig = generate_api_sig sig_options
392
+ query = sig_options.merge :api_key => @auth[:api_key], :api_sig => api_sig
393
+
394
+ self.class.post("/api/rest", :query => query)
395
+ end
396
+
397
+ # DEALING WITH SPECIFIC VIDEOS
398
+ def video_get_info(video_id, auth_token=nil)
399
+ method = "vimeo.videos.getInfo"
400
+
401
+ sig_options = {
402
+ :video_id => video_id,
403
+ :auth_token => auth_token,
404
+ :method => method
405
+ }
406
+
407
+ api_sig = generate_api_sig sig_options
408
+ query = sig_options.merge :api_key => @auth[:api_key], :api_sig => api_sig
409
+
410
+ self.class.post("/api/rest", :query => query)
411
+ end
412
+
413
+ def video_delete(video_id, auth_token)
414
+ method = "vimeo.videos.delete"
415
+
416
+ sig_options = {
417
+ :video_id => video_id,
418
+ :auth_token => auth_token,
419
+ :method => method
420
+ }
421
+
422
+ api_sig = generate_api_sig sig_options
423
+ query = sig_options.merge :api_key => @auth[:api_key], :api_sig => api_sig
424
+
425
+ self.class.post("/api/rest", :query => query)
426
+ end
427
+
428
+ def video_get_thumbnail_url(video_id, size=100)
429
+ method = "vimeo.videos.getThumbnailUrl"
430
+
431
+ sig_options = {
432
+ :video_id => video_id,
433
+ :size => size,
434
+ :method => method
435
+ }
436
+
437
+ api_sig = generate_api_sig sig_options
438
+ query = sig_options.merge :api_key => @auth[:api_key], :api_sig => api_sig
439
+
440
+ self.class.post("/api/rest", :query => query)
441
+ end
442
+
443
+ def video_set_title(video_id, title, auth_token)
444
+ method = "vimeo.videos.setTitle"
445
+ escaped_title = CGI.escape(title)
446
+
447
+ sig_options = {
448
+ :video_id => video_id,
449
+ :title => escaped_title,
450
+ :auth_token => auth_token,
451
+ :method => method
452
+ }
453
+
454
+ api_sig = generate_api_sig sig_options
455
+ query = sig_options.merge :api_key => @auth[:api_key], :api_sig => api_sig
456
+
457
+ self.class.post("/api/rest", :query => query)
458
+ end
459
+
460
+ def video_set_caption(video_id, caption, auth_token)
461
+ method = "vimeo.videos.setCaption"
462
+ escaped_caption = CGI.escape(caption)
463
+
464
+ sig_options = {
465
+ :video_id => video_id,
466
+ :caption => escaped_caption,
467
+ :auth_token => auth_token,
468
+ :method => method
469
+ }
470
+
471
+ api_sig = generate_api_sig sig_options
472
+ query = sig_options.merge :api_key => @auth[:api_key], :api_sig => api_sig
473
+
474
+ self.class.post("/api/rest", :query => query)
475
+ end
476
+
477
+ def video_set_favorite(video_id, favorite, auth_token)
478
+ method = "vimeo.videos.setFavorite"
479
+ f = favorite ? true : false
480
+
481
+ sig_options = {
482
+ :video_id => video_id,
483
+ :favorite => f,
484
+ :auth_token => auth_token,
485
+ :method => method
486
+ }
487
+
488
+ api_sig = generate_api_sig sig_options
489
+ query = sig_options.merge :api_key => @auth[:api_key], :api_sig => api_sig
490
+
491
+ self.class.post("/api/rest", :query => query)
492
+ end
493
+
494
+ def video_add_tags(video_id, tags, auth_token)
495
+ method = "vimeo.videos.addTags"
496
+
497
+ sig_options = {
498
+ :video_id => video_id,
499
+ :tags => tags,
500
+ :auth_token => auth_token,
501
+ :method => method
502
+ }
503
+
504
+ api_sig = generate_api_sig sig_options
505
+ query = sig_options.merge :api_key => @auth[:api_key], :api_sig => api_sig
506
+
507
+ self.class.post("/api/rest", :query => query)
508
+ end
509
+
510
+ def video_remove_tag(video_id, tag_id, auth_token)
511
+ method = "vimeo.videos.removeTag"
512
+
513
+ sig_options = {
514
+ :video_id => video_id,
515
+ :tag_id => tag_id,
516
+ :auth_token => auth_token,
517
+ :method => method
518
+ }
519
+
520
+ api_sig = generate_api_sig sig_options
521
+ query = sig_options.merge :api_key => @auth[:api_key], :api_sig => api_sig
522
+
523
+ self.class.post("/api/rest", :query => query)
524
+ end
525
+
526
+ def video_clear_tags(video_id, auth_token)
527
+ method = "vimeo.videos.clearTags"
528
+
529
+ sig_options = {
530
+ :video_id => video_id,
531
+ :auth_token => auth_token,
532
+ :method => method
533
+ }
534
+
535
+ api_sig = generate_api_sig sig_options
536
+ query = sig_options.merge :api_key => @auth[:api_key], :api_sig => api_sig
537
+
538
+ self.class.post("/api/rest", :query => query)
539
+ end
540
+
541
+ def video_add_cast(video_id, user_id, auth_token, options={})
542
+ method = "vimeo.videos.addCast"
543
+
544
+ sig_options = {
545
+ :video_id => video_id,
546
+ :user_id => user_id,
547
+ :auth_token => auth_token,
548
+ :method => method
549
+ }
550
+ sig_options.merge! :role => options[:role] unless options[:role].nil?
551
+
552
+ api_sig = generate_api_sig sig_options
553
+ query = sig_options.merge :api_key => @auth[:api_key], :api_sig => api_sig
554
+
555
+ self.class.post("/api/rest", :query => query)
556
+ end
557
+
558
+ def video_get_cast(video_id, auth_token=nil)
559
+ method = "vimeo.videos.getCast"
560
+
561
+ sig_options = {
562
+ :video_id => video_id,
563
+ :auth_token => auth_token,
564
+ :method => method
565
+ }
566
+
567
+ api_sig = generate_api_sig sig_options
568
+ query = sig_options.merge :api_key => @auth[:api_key], :api_sig => api_sig
569
+
570
+ self.class.post("/api/rest", :query => query)
571
+ end
572
+
573
+ def video_remove_cast(video_id, user_id, auth_token)
574
+ method = "vimeo.videos.removeCast"
575
+
576
+ sig_options = {
577
+ :video_id => video_id,
578
+ :user_id => user_id,
579
+ :auth_token => auth_token,
580
+ :method => method
581
+ }
582
+
583
+ api_sig = generate_api_sig sig_options
584
+ query = sig_options.merge :api_key => @auth[:api_key], :api_sig => api_sig
585
+
586
+ self.class.post("/api/rest", :query => query)
587
+ end
588
+
589
+ # TODO: Add ability to specify users
590
+ def video_set_privacy(video_id, privacy, auth_token)
591
+ method = "vimeo.videos.setPrivacy"
592
+
593
+ sig_options = {
594
+ :video_id => video_id,
595
+ :privacy => privacy,
596
+ :auth_token => auth_token,
597
+ :method => method
598
+ }
599
+
600
+ api_sig = generate_api_sig sig_options
601
+ query = sig_options.merge :api_key => @auth[:api_key], :api_sig => api_sig
602
+
603
+ self.class.post("/api/rest", :query => query)
604
+ end
605
+
606
+ # VIDEO COMMENTS
607
+ def video_get_comments_list(video_id)
608
+ method = "vimeo.videos.comments.getList"
609
+
610
+ sig_options = {
611
+ :video_id => video_id,
612
+ :method => method
613
+ }
614
+
615
+ api_sig = generate_api_sig sig_options
616
+ query = sig_options.merge :api_key => @auth[:api_key], :api_sig => api_sig
617
+
618
+ self.class.post("/api/rest", :query => query)
619
+ end
620
+
621
+ def video_add_comment(video_id, comment_text, auth_token, options={})
622
+ reply_to_comment_id = options[:reply_to_comment_id]
623
+ method = "vimeo.videos.comments.addComment"
624
+
625
+ sig_options = {
626
+ :video_id => video_id,
627
+ :comment_text => comment_text,
628
+ :auth_token => auth_token,
629
+ :method => method
630
+ }
631
+ sig_options.merge! :reply_to_comment_id => reply_to_comment_id unless reply_to_comment_id.nil?
632
+
633
+ api_sig = generate_api_sig sig_options
634
+ query = sig_options.merge :api_key => @auth[:api_key], :api_sig => api_sig
635
+
636
+ self.class.post("/api/rest", :query => query)
637
+ end
638
+
639
+ def video_delete_comment(video_id, comment_id, auth_token)
640
+ method = "vimeo.videos.comments.deleteComment"
641
+
642
+ sig_options = {
643
+ :video_id => video_id,
644
+ :comment_id => comment_id,
645
+ :auth_token => auth_token,
646
+ :method => method
647
+ }
648
+
649
+ api_sig = generate_api_sig sig_options
650
+ query = sig_options.merge :api_key => @auth[:api_key], :api_sig => api_sig
651
+
652
+ self.class.post("/api/rest", :query => query)
653
+ end
654
+
655
+ def video_edit_comment(video_id, comment_id, comment_text, auth_token)
656
+ method = "vimeo.videos.comments.editComment"
657
+
658
+ sig_options = {
659
+ :video_id => video_id,
660
+ :comment_id => comment_id,
661
+ :comment_text => comment_text,
662
+ :auth_token => auth_token,
663
+ :method => method
664
+ }
665
+
666
+ api_sig = generate_api_sig sig_options
667
+ query = sig_options.merge :api_key => @auth[:api_key], :api_sig => api_sig
668
+
669
+ self.class.post("/api/rest", :query => query)
670
+ end
671
+
672
+ # PEOPLE (USERS)
673
+ def people_find_by_user_name(username)
674
+ method = "vimeo.people.findByUserName"
675
+
676
+ sig_options = {
677
+ :username => username,
678
+ :method => method
679
+ }
680
+
681
+ api_sig = generate_api_sig sig_options
682
+ query = sig_options.merge :api_key => @auth[:api_key], :api_sig => api_sig
683
+
684
+ self.class.post("/api/rest", :query => query)
685
+ end
686
+
687
+ def people_find_by_email(find_email)
688
+ method = "vimeo.people.findByEmail"
689
+
690
+ sig_options = {
691
+ :find_email => find_email,
692
+ :method => method
693
+ }
694
+
695
+ api_sig = generate_api_sig sig_options
696
+ query = sig_options.merge :api_key => @auth[:api_key], :api_sig => api_sig
697
+
698
+ self.class.post("/api/rest", :query => query)
699
+ end
700
+
701
+ def people_get_info(user_id)
702
+ method = "vimeo.people.getInfo"
703
+
704
+ sig_options = {
705
+ :user_id => user_id,
706
+ :method => method
707
+ }
708
+
709
+ api_sig = generate_api_sig sig_options
710
+ query = sig_options.merge :api_key => @auth[:api_key], :api_sig => api_sig
711
+
712
+ self.class.post("/api/rest", :query => query)
713
+ end
714
+
715
+ # TODO: This seems to be returning nil from Vimeo... not implemented?
716
+ def people_get_portrait_url(user_id, options={})
717
+ size = options[:size]
718
+ method = "vimeo.people.getPortraitUrl"
719
+
720
+ sig_options = {
721
+ :user_id => user_id,
722
+ :method => method
723
+ }
724
+ sig_options.merge! :size => size unless size.nil?
725
+
726
+ api_sig = generate_api_sig sig_options
727
+ query = sig_options.merge :api_key => @auth[:api_key], :api_sig => api_sig
728
+
729
+ self.class.post("/api/rest", :query => query)
730
+ end
731
+
732
+ # TODO: Not working on Vimeo's side
733
+ def people_add_contact(user_id, auth_token)
734
+ method = "vimeo.people.addContact"
735
+
736
+ sig_options = {
737
+ :user_id => user_id,
738
+ :auth_token => auth_token,
739
+ :method => method
740
+ }
741
+
742
+ api_sig = generate_api_sig sig_options
743
+ query = sig_options.merge :api_key => @auth[:api_key], :api_sig => api_sig
744
+
745
+ self.class.post("/api/rest", :query => query)
746
+ end
747
+
748
+ # TODO: Not working on Vimeo's side
749
+ def people_remove_contact(user_id, auth_token)
750
+ method = "vimeo.people.removeContact"
751
+
752
+ sig_options = {
753
+ :user_id => user_id,
754
+ :auth_token => auth_token,
755
+ :method => method
756
+ }
757
+
758
+ api_sig = generate_api_sig sig_options
759
+ query = sig_options.merge :api_key => @auth[:api_key], :api_sig => api_sig
760
+
761
+ self.class.post("/api/rest", :query => query)
762
+ end
763
+
764
+ def people_get_upload_status(user_id, auth_token)
765
+ method = "vimeo.people.getUploadStatus"
766
+
767
+ sig_options = {
768
+ :user_id => user_id,
769
+ :auth_token => auth_token,
770
+ :method => method
771
+ }
772
+
773
+ api_sig = generate_api_sig sig_options
774
+ query = sig_options.merge :api_key => @auth[:api_key], :api_sig => api_sig
775
+
776
+ self.class.post("/api/rest", :query => query)
777
+ end
778
+
779
+ # TODO: Verify input for type?
780
+ def people_add_subscription(user_id, type, auth_token)
781
+ method = "vimeo.people.addSubscription"
782
+
783
+ sig_options = {
784
+ :user_id => user_id,
785
+ :type => type,
786
+ :auth_token => auth_token,
787
+ :method => method
788
+ }
789
+
790
+ api_sig = generate_api_sig sig_options
791
+ query = sig_options.merge :api_key => @auth[:api_key], :api_sig => api_sig
792
+
793
+ self.class.post("/api/rest", :query => query)
794
+ end
795
+
796
+ # TODO: Verify input for type?
797
+ def people_remove_subscription(user_id, type, auth_token)
798
+ method = "vimeo.people.removeSubscription"
799
+
800
+ sig_options = {
801
+ :user_id => user_id,
802
+ :type => type,
803
+ :auth_token => auth_token,
804
+ :method => method
805
+ }
806
+
807
+ api_sig = generate_api_sig sig_options
808
+ query = sig_options.merge :api_key => @auth[:api_key], :api_sig => api_sig
809
+
810
+ self.class.post("/api/rest", :query => query)
811
+ end
812
+
813
+ # CONTACTS
814
+ def contacts_get_list(user_id)
815
+ method = "vimeo.contacts.getList"
816
+
817
+ sig_options = {
818
+ :user_id => user_id,
819
+ :method => method
820
+ }
821
+
822
+ api_sig = generate_api_sig sig_options
823
+ query = sig_options.merge :api_key => @auth[:api_key], :api_sig => api_sig
824
+
825
+ self.class.post("/api/rest", :query => query)
826
+ end
827
+
828
+ # GROUPS
829
+ # TODO: Only takes group_id as int, not group name
830
+ def groups_get_members(group_id)
831
+ method = "vimeo.groups.getMembers"
832
+
833
+ sig_options = {
834
+ :group_id => group_id,
835
+ :method => method
836
+ }
837
+
838
+ api_sig = generate_api_sig sig_options
839
+ query = sig_options.merge :api_key => @auth[:api_key], :api_sig => api_sig
840
+
841
+ self.class.post("/api/rest", :query => query)
842
+ end
843
+
844
+ # UPLOAD
845
+ def video_get_upload_ticket(auth_token)
846
+ method = "vimeo.videos.getUploadTicket"
847
+
848
+ sig_options = {
849
+ :auth_token => auth_token,
850
+ :method => method
851
+ }
852
+
853
+ api_sig = generate_api_sig sig_options
854
+ query = sig_options.merge :api_key => @auth[:api_key], :api_sig => api_sig
855
+
856
+ self.class.post("/api/rest", :query => query)
857
+ end
858
+
859
+ def video_check_upload_status(ticket_id, auth_token)
860
+ method = "vimeo.videos.checkUploadStatus"
861
+
862
+ sig_options = {
863
+ :ticket_id => ticket_id,
864
+ :auth_token => auth_token,
865
+ :method => method
866
+ }
867
+
868
+ api_sig = generate_api_sig sig_options
869
+ query = sig_options.merge :api_key => @auth[:api_key], :api_sig => api_sig
870
+
871
+ self.class.post("/api/rest", :query => query)
872
+ end
873
+
874
+ private
875
+
876
+ # Keys must be sorted alphabetically
877
+ def generate_api_sig(options={})
878
+ options.merge! @auth
879
+ api_sig = options.sort { |a, b| a.to_s <=> b.to_s }.join
880
+ Digest::MD5.hexdigest("#{@secret}#{api_sig}")
881
+ end
882
+
883
+ end
@@ -0,0 +1,7 @@
1
+ require 'rubygems'
2
+ require 'test/unit'
3
+ require 'shoulda'
4
+ require 'mocha'
5
+
6
+ class Test::Unit::TestCase
7
+ end
@@ -0,0 +1,7 @@
1
+ require File.dirname(__FILE__) + '/test_helper'
2
+
3
+ class VimeoTest < Test::Unit::TestCase
4
+ should "probably rename this file and start testing for real" do
5
+ flunk "hey buddy, you should probably rename this file and start testing for real"
6
+ end
7
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: matthooks-vimeo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matt Hooks
@@ -29,8 +29,12 @@ extensions: []
29
29
 
30
30
  extra_rdoc_files: []
31
31
 
32
- files: []
33
-
32
+ files:
33
+ - README.textile
34
+ - VERSION.yml
35
+ - lib/vimeo.rb
36
+ - test/test_helper.rb
37
+ - test/vimeo_test.rb
34
38
  has_rdoc: false
35
39
  homepage: http://github.com/matthooks/vimeo
36
40
  post_install_message: