Tuesday, June 5, 2012

[YouTube-API] youtube api exception

i am trying to upload a viseo from my application, but as soon as i submit the metadata details, i get the following error:

"Traceback (most recent call last):
  File "/home/oimara/google_appengine/google/appengine/ext/webapp/_webapp25.py", line 703, in __call__      handler.post(*groups)    File "/home/oimara/projects/06_hello_browser_based_upload/upload.py", line 89, in post      self.server_response = self.client.GetFormUploadToken(video_entry)    File "/home/oimara/projects/06_hello_browser_based_upload/gdata/youtube/service.py", line 691, in GetFormUploadToken      raise YouTubeError(e.args[0]) 
YouTubeError: {'status': 401, 'body': "<?xml version='1.0' encoding='UTF-8'?><errors><error><domain>yt:authentication</domain><code>Unknown</code></error></errors>", 'reason': ''}"

Can someone pls advise on this error: Thanks


Here is the code for i am using


import wsgiref.handlers
import urllib
import cgi
from google.appengine.ext import webapp
from google.appengine.api import users
from google.appengine.ext import db
import gdata.service
import gdata.youtube
import gdata.youtube.service
import gdata.media
import gdata.geo
import gdata.urlfetch
from pprint import pprint as px

gdata.service.http_request_handler = gdata.urlfetch


class StoredToken(db.Model):
  user_email = db.StringProperty(required=True)
  session_token = db.StringProperty(required=True)
  developer_key = db.StringProperty()


class Upload(webapp.RequestHandler):

  def __init__(self):
    self.current_user = None
    self.token_scope = None
    self.client = None
    self.token = None
    self.feed_url = 'http://gdata.youtube.com/feeds/api/users/default/uploads'
    self.youtube_scope = 'http://gdata.youtube.com'
    self.server_response = None

  def post(self):
    self.my_app_domain = 'http://' + self.request._environ['HTTP_HOST']
    self.response.out.write("""<html><head><title>
        hello_browser_based_upload: Browser based upload demo</title>
        <link type="text/css" rel="stylesheet" href="/stylesheets/main.css" />
        </head>""")

    # Get the current user
    self.current_user = users.GetCurrentUser()
    self.client = gdata.youtube.service.YouTubeService()

    self.response.out.write('<body>')

    # logic
    if self.LookupToken() and self.LookupDevKey():
      video_title = cgi.escape(self.request.get('video_title'))
      video_description = cgi.escape(self.request.get('video_description'))
      video_category = cgi.escape(self.request.get('video_category'))
      video_tags = cgi.escape(self.request.get('video_tags'))
      
      my_media_group = gdata.media.Group(
        title = gdata.media.Title(text=video_title),
        description = gdata.media.Description(description_type='plain',
                                            text=video_description),
        keywords = gdata.media.Keywords(text=video_tags),
        category = gdata.media.Category(
          text=video_category,
          scheme='http://gdata.youtube.com/schemas/2007/categories.cat',
          label=video_category),
      player=None
      )
      
      video_entry = gdata.youtube.YouTubeVideoEntry(media=my_media_group)
      
      try:
        self.server_response = self.client.GetFormUploadToken(video_entry)
      except gdata.service.RequestError, request_error:
        self.response.out.write('<div id="error">')
        self.response.out.write(request_error[0]['status'])
        self.response.out.write(request_error[0]['body'])
        if request_error[0]['reason']:
          self.response.out.write(request_error[0]['reason'])
        self.response.out.write(
            '<br /><a href="/" style="color: #000">'
            'click here to return</a></div>')
        return

      post_url = self.server_response[0]
      youtube_token = self.server_response[1]
      self.response.out.write("""<div id="file_upload">Upload your video file
          <br /><br />
          <form action="%s?nexturl=%s" method="post" 
          enctype="multipart/form-data">
          <input name="file" type="file" size="50"/>
          <input name="token" type="hidden" value="%s"/>
          <br /><input value="Go" type="submit" />
          </form></div>""" % (post_url, self.my_app_domain, youtube_token))
      
    else:  
      self.redirect("/")

  def LookupDevKey(self):
    if self.current_user:
      stored_tokens = StoredToken.gql('WHERE user_email = :1',
          self.current_user.email())
      for token in stored_tokens:
        if token.developer_key:
          self.client.developer_key = token.developer_key
          return True

  def LookupToken(self):
    if self.feed_url and self.current_user:
      stored_tokens = StoredToken.gql('WHERE user_email = :1',
          self.current_user.email())
      for token in stored_tokens:
        self.client.auth_token = token.session_token
        return True


def main():
  application = webapp.WSGIApplication([('/.*', Upload),], debug=True)
  wsgiref.handlers.CGIHandler().run(application)

if __name__ == '__main__':
  main()

--
You received this message because you are subscribed to the Google Groups "YouTube APIs Developer Forum" group.
To view this discussion on the web visit https://groups.google.com/d/msg/youtube-api-gdata/-/at7h6eI7K30J.
To post to this group, send email to youtube-api-gdata@googlegroups.com.
To unsubscribe from this group, send email to youtube-api-gdata+unsubscribe@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/youtube-api-gdata?hl=en.

No comments:

Post a Comment