def upload_video_to_vimeo(video_id, **kwargs): """docstring for upload_to_vimeo""" """ General 4 steps are given here: http://vimeo.com/api/docs/oauth using the python vimeo library I originally did: from vimeo import VimeoClient import settings vio = VimeoClient(format='json',key= settings.VIMEO_KEY,secret=settings.VIMEO_SECRET), url = vio.get_authorization_url(permission='write') ## this returns a URL to be accessed ## get the verifier value after the url above has redirected to the application callback vio.set_verifier('the-access-verifier-string-from-above') access_token = vio.get_access_token() ## get the oauth token + oauth secret str(access_token) OR access_token.__str__() ## these should be stored; they are valid unless the vimeo account holder deletes them ... ## which is never for me ## for any further calls use initialize the VimeoClient as follows vio = VimeoClient(format='json',key=settings.VIMEO_KEY,secret=settings.VIMEO_SECRET, token=settings.VIMEO_OAUTH_TOKEN, token_secret= settings.VIMEO_OAUTH_TOKEN_SECRET) ## then continue with the upload """ from gelder.models import Video logger = upload_video_to_vimeo.get_logger(**kwargs) videourl = Video.objects.get(id=video_id) vio = VimeoClient(format='json', key=settings.VIMEO_KEY, secret=settings.VIMEO_SECRET, token=settings.VIMEO_OAUTH_TOKEN, token_secret=settings.VIMEO_OAUTH_TOKEN_SECRET) # get quota here or instantiate another vio client and check the quota before uploading uploader = vio.get_uploader() uploader.upload(smart_str(videourl.video.path)) ucresponse = uploader.complete() #if ucresponse is not None and ucresponse['video_id']: videourl.extern = 'vimeo' videourl.externurl = ucresponse['video_id'] videourl.on_extern = True videourl.save() logger.info('(success) Boto s3 uploaded video with id: %s to vimeo', (video_id)) #raise Exception([uresponse, str(uresponse), ucresponse]) return True
class VimeoService(): def __init__(self, project, settings): self.project = project self.filename = None self.settings = settings self.token = None self.token_secret = None self.verifier = None self.form = None # Add language support _ = Language_Init.Translator(project).lang.gettext self._ = _ # get tokens (if already authorized) if self.settings.app_state["vimeo_token"]: self.token = self.settings.app_state["vimeo_token"] if self.settings.app_state["vimeo_token_secret"]: self.token_secret = self.settings.app_state["vimeo_token_secret"] if self.settings.app_state["vimeo_verifier"]: self.verifier = self.settings.app_state["vimeo_verifier"] def initialize(self, form): """ Prepare the upload form for this service """ # test the authentication if self.token: try: self.v = VimeoClient( token=self.token, token_secret=self.token_secret, verifier=self.verifier) self.v.cache_timeout = 0 self.uploader = self.v.get_uploader() except: # failed to authenticate, erase tokens self.token = None self.token_secret = None self.verifier = None self.settings.app_state["vimeo_token"] = "" self.settings.app_state["vimeo_token_secret"] = "" self.settings.app_state["vimeo_verifier"] = "" # Show error message messagebox.show( _("Validation Error!"), _("Vimeo authentication has expired.")) self.form = form form.lblUsername.set_property("visible", False) form.txtUsername.set_property("visible", False) form.lblPassword.set_property("visible", False) form.txtPassword.set_property("visible", False) if self.token: # already authorized form.login_divider.set_property("visible", False) form.btnAuthorize.set_property("visible", False) form.lblVerification.set_property("visible", False) form.txtVerification.set_property("visible", False) else: # user needs to authorize OpenShot form.login_divider.set_property("visible", True) form.btnAuthorize.set_property("visible", True) form.lblVerification.set_property("visible", True) form.txtVerification.set_property("visible", True) form.lnkForgot.set_label("http://www.vimeo.com") form.lnkForgot.set_uri("http://www.vimeo.com") def get_logo(self): logo_path = os.path.join(self.project.BASE_DIR, "openshot", "uploads", "logos", "vimeo.png") return gtk.gdk.pixbuf_new_from_file(logo_path) def get_export_presets(self): """ Get a tuple of related export presets for this service (if any) """ # get reference to gettext _ = self._ return (_("Web"), _("Vimeo-HD")) def get_authorization_url(self): self.v = VimeoClient() self.v.cache_timeout = 0 return self.v.get_authorization_url(permission="write") def validate(self, form): """ Validate the upload form... check for missing values. """ # get reference to gettext _ = self._ # get code verification_code = form.txtVerification.get_text() title = form.txtTitle.get_text() start, end = form.txtDescription.get_buffer().get_bounds() description = form.txtDescription.get_buffer().get_text(start, end) # Validate the the form is valid if not os.path.isfile(str(self.filename)): # Show error message messagebox.show( _("Validation Error!"), _("Please choose a valid video file.")) return False if not title: # Show error message messagebox.show( _("Validation Error!"), _("Please enter a valid title.")) return False if not self.token: if not description: # Show error message messagebox.show( _("Validation Error!"), _("Please enter a valid description.")) return False if not verification_code: # Show error message messagebox.show( _("Validation Error!"), _("Please enter a valid verification code. Click the 'Authorize' button and login to the website. Confirm the authorization, and copy the verification code." )) return False # form is valid return True def set_file(self, filename): self.filename = filename def start_upload(self, form): # get reference to gettext _ = self._ if not self.token: # Not Authorized Yet. # get code verification_code = form.txtVerification.get_text() try: # pass code and authorize OpenShot (hopefully) self.v.set_verifier(verification_code) access_token = self.v.get_access_token() # save tokens in settings self.verifier = verification_code self.settings.app_state["vimeo_verifier"] = self.verifier self.token = access_token.key self.settings.app_state["vimeo_token"] = self.token self.token_secret = access_token.secret self.settings.app_state[ "vimeo_token_secret"] = self.token_secret # Get uploader object self.uploader = self.v.get_uploader() except: # Show error message messagebox.show( _("Validation Error!"), _("There was an error authorizing OpenShot. Please be sure to enter the correct verification code from vimeo.com." )) # get settings title = form.txtTitle.get_text() start, end = form.txtDescription.get_buffer().get_bounds() description = form.txtDescription.get_buffer().get_text(start, end) try: # enable upload button form.btnUpload.set_sensitive(False) # Upload the file to Vimeo output = self.uploader.upload( self.filename, chunk=True, chunk_size=64 * 1024, chunk_complete_hook=self.on_chunk_complete) upload_ticket_id = output.get("id") output = self.v.videos_upload_complete(ticket_id=upload_ticket_id) video_id = output.get("video_id") # Set the name and description of the video self.v.videos_setTitle(title=title, video_id=video_id) self.v.videos_setDescription( description=description, video_id=video_id) except: # Show error message messagebox.show( _("Validation Error!"), _("There was an error uploading to Vimeo.")) # enable upload button form.btnUpload.set_sensitive(True) return False # enable upload button form.btnUpload.set_sensitive(True) # successful return True def on_chunk_complete(self, *args): #print "on_chunk_complete" total_size = args[0]["total_size"] chunk_size = args[0]["chunk_size"] chunk_id = args[0]["chunk_id"] + 1 # zero based # calculate current bytes transferred current_bytes = chunk_id * chunk_size if current_bytes >= total_size: # don't exceed the total bytes current_bytes = total_size # calculate percentage percent = float(current_bytes) / float(total_size) gobject.idle_add(self.form.update_progressbar, percent) # allow other gtk operations to happen while gtk.events_pending(): gtk.main_iteration()
class VimeoService(): def __init__(self, project, settings): self.project = project self.filename = None self.settings = settings self.token = None self.token_secret = None self.verifier = None self.form = None # Add language support _ = Language_Init.Translator(project).lang.gettext self._ = _ # get tokens (if already authorized) if self.settings.app_state["vimeo_token"]: self.token = self.settings.app_state["vimeo_token"] if self.settings.app_state["vimeo_token_secret"]: self.token_secret = self.settings.app_state["vimeo_token_secret"] if self.settings.app_state["vimeo_verifier"]: self.verifier = self.settings.app_state["vimeo_verifier"] def initialize(self, form): """ Prepare the upload form for this service """ # test the authentication if self.token: try: self.v = VimeoClient(token=self.token, token_secret=self.token_secret, verifier=self.verifier) self.v.cache_timeout = 0 self.uploader = self.v.get_uploader() except: # failed to authenticate, erase tokens self.token = None self.token_secret = None self.verifier = None self.settings.app_state["vimeo_token"] = "" self.settings.app_state["vimeo_token_secret"] = "" self.settings.app_state["vimeo_verifier"] = "" # Show error message messagebox.show(_("Validation Error!"), _("Vimeo authentication has expired.")) self.form = form form.lblUsername.set_property("visible", False) form.txtUsername.set_property("visible", False) form.lblPassword.set_property("visible", False) form.txtPassword.set_property("visible", False) if self.token: # already authorized form.login_divider.set_property("visible", False) form.btnAuthorize.set_property("visible", False) form.lblVerification.set_property("visible", False) form.txtVerification.set_property("visible", False) else: # user needs to authorize OpenShot form.login_divider.set_property("visible", True) form.btnAuthorize.set_property("visible", True) form.lblVerification.set_property("visible", True) form.txtVerification.set_property("visible", True) form.lnkForgot.set_label("http://www.vimeo.com") form.lnkForgot.set_uri("http://www.vimeo.com") def get_logo(self): logo_path = os.path.join(self.project.BASE_DIR, "openshot", "uploads", "logos", "vimeo.png") return gtk.gdk.pixbuf_new_from_file(logo_path) def get_export_presets(self): """ Get a tuple of related export presets for this service (if any) """ # get reference to gettext _ = self._ return (_("Web"), _("Vimeo-HD")) def get_authorization_url(self): self.v = VimeoClient() self.v.cache_timeout = 0 return self.v.get_authorization_url(permission="write") def validate(self, form): """ Validate the upload form... check for missing values. """ # get reference to gettext _ = self._ # get code verification_code = form.txtVerification.get_text() title = form.txtTitle.get_text() start, end = form.txtDescription.get_buffer().get_bounds() description = form.txtDescription.get_buffer().get_text(start, end) # Validate the the form is valid if not os.path.isfile(str(self.filename)): # Show error message messagebox.show(_("Validation Error!"), _("Please choose a valid video file.")) return False if not title: # Show error message messagebox.show(_("Validation Error!"), _("Please enter a valid title.")) return False if not self.token: if not description: # Show error message messagebox.show(_("Validation Error!"), _("Please enter a valid description.")) return False if not verification_code: # Show error message messagebox.show( _("Validation Error!"), _("Please enter a valid verification code. Click the 'Authorize' button and login to the website. Confirm the authorization, and copy the verification code." )) return False # form is valid return True def set_file(self, filename): self.filename = filename def start_upload(self, form): # get reference to gettext _ = self._ if not self.token: # Not Authorized Yet. # get code verification_code = form.txtVerification.get_text() try: # pass code and authorize OpenShot (hopefully) self.v.set_verifier(verification_code) access_token = self.v.get_access_token() # save tokens in settings self.verifier = verification_code self.settings.app_state["vimeo_verifier"] = self.verifier self.token = access_token.key self.settings.app_state["vimeo_token"] = self.token self.token_secret = access_token.secret self.settings.app_state[ "vimeo_token_secret"] = self.token_secret # Get uploader object self.uploader = self.v.get_uploader() except: # Show error message messagebox.show( _("Validation Error!"), _("There was an error authorizing OpenShot. Please be sure to enter the correct verification code from vimeo.com." )) # get settings title = form.txtTitle.get_text() start, end = form.txtDescription.get_buffer().get_bounds() description = form.txtDescription.get_buffer().get_text(start, end) try: # enable upload button form.btnUpload.set_sensitive(False) # Upload the file to Vimeo output = self.uploader.upload( self.filename, chunk=True, chunk_size=64 * 1024, chunk_complete_hook=self.on_chunk_complete) upload_ticket_id = output.get("id") output = self.v.videos_upload_complete(ticket_id=upload_ticket_id) video_id = output.get("video_id") # Set the name and description of the video self.v.videos_setTitle(title=title, video_id=video_id) self.v.videos_setDescription(description=description, video_id=video_id) except: # Show error message messagebox.show(_("Validation Error!"), _("There was an error uploading to Vimeo.")) # enable upload button form.btnUpload.set_sensitive(True) return False # enable upload button form.btnUpload.set_sensitive(True) # successful return True def on_chunk_complete(self, *args): #print "on_chunk_complete" total_size = args[0]["total_size"] chunk_size = args[0]["chunk_size"] chunk_id = args[0]["chunk_id"] + 1 # zero based # calculate current bytes transferred current_bytes = chunk_id * chunk_size if current_bytes >= total_size: # don't exceed the total bytes current_bytes = total_size # calculate percentage percent = float(current_bytes) / float(total_size) gobject.idle_add(self.form.update_progressbar, percent) # allow other gtk operations to happen while gtk.events_pending(): gtk.main_iteration()