2013-03-27 80 views
0

我抓一個的OAuth2令牌的一些功能中的任何版本我剝出來: https://code.google.com/p/google-api-python-client/source/browse/#hg%2Foauth2client如何使用的OAuth2令牌使用YouTube API的Python

我想:

yt_service    = gdata.youtube.service.YouTubeService() 
yt_service.developer_key = YOUTUBE_DEV_KEY 
yt_service.access_token  = FRESH_OAUTH2_ACCESS_TOKEN 
yt_service.client_id = YOUTUBE_OAUTH2_CLIENT_ID 
yt_service.email   = YOUTUBE_USER_EMAIL 
yt_service.password   = YOUTUBE_USER_PASSWORD 
yt_service.source   = YOUTUBE_DEV_SRC 
yt_service.ProgrammaticLogin() 

但我不知道如何正確撥打電話GetFormUploadTokenUpdateVideoEntry。以前我只是使用developer_key,它正在工作(使用gdata.youtube.service.YouTubeService())。

我也嘗試使用這個例子,但它沒有被註釋掉非常好,該文檔是沒有任何好轉: https://code.google.com/p/youtube-api-samples/source/browse/samples/python/update_video.py

我試着簡單地改變 build(YOUTUBE_API_SERVICE_NAME, YOUTUBE_API_VERSION, http=credentials.authorize(httplib2.Http()))

build(YOUTUBE_API_SERVICE_NAME, YOUTUBE_API_VERSION, ACCESS_TOKEN=current_access_token)

但它只是抱怨說它不知道ACCESS_TOKEN是什麼。

回答

0

這就是我如何做到的。

def _yt_oauth_flow_hack(self, secret_json_str, scope, redirect_uri=None): 
    """ 
    A hacked version of: oauth2client.clientflow_from_clientsecrets 
    """ 
    client_type, client_info = clientsecrets.loads(secret_json_str) 
    if client_type in [clientsecrets.TYPE_WEB, clientsecrets.TYPE_INSTALLED]: 
     return OAuth2WebServerFlow(
      client_info['client_id'], 
      client_info['client_secret'], 
      scope, 
      redirect_uri=redirect_uri, 
      user_agent=None, 
      auth_uri=client_info['auth_uri'], 
      token_uri=client_info['token_uri'] 
     )   
def begin_authentication(self): 
    '''Starts the authentication process and returns the URL that we have to use to authorize the content 
    if we need to authorize it, otherwise will generate the service and return None''' 

    credentials = self._storage.get() 
    if credentials is None: 
     print 'Credentials Not Stored - We Require Fresh Authentication' 
     flow = self._yt_oauth_flow_hack(AUTH_JSON, self.scope) 
     flow.redirect_uri = OOB_CALLBACK_URN 
     return flow.step1_get_authorize_url() 
    elif (credentials.invalid or credentials.token_expiry <= (datetime.now() + timedelta(seconds=time.timezone))): 
     print 'Credentials are Expired - Going to attempt to refresh them' 
     try: 
      http = httplib2.Http() 
      credentials.refresh(http) 
      print 'Success!' 
     except AccessTokenRefreshError: 
      print 'Unable to refresh credentials - requesting new ones.' 
      flow = self._yt_oauth_flow_hack(AUTH_JSON, self.scope) 
      flow.redirect_uri = OOB_CALLBACK_URN 
      return flow.step1_get_authorize_url() 

    print 'Credentials ->', credentials 

    http = httplib2.Http() 
    http = credentials.authorize(http) 
    self.service = build('youtube', 'v3', http=http) 
    return None 

AUTH_JSON是我在設置我的API帳戶時下載的內容。存儲是一個自定義的存儲版本,可以與postgres數據庫一起工作,但其原理仍然相同。

+0

雖然只是設置了oauth2憑證,但我已經有了一個有效的oauth2標記。我需要使用該令牌來獲取新的上傳網址並修改現有的視頻元數據。 – nmz787 2013-03-27 06:42:23

+0

你通過服務完成所有這些。看看回報前的最後一行 - 你得到你的信任,授權然後建立。獲得授權的信用是糟糕的一部分。 – primalpython 2013-03-27 07:26:28

+0

服務帳戶也有概念,您只需使用他們提供給您的數據來完成任務。我無法使用v3和oAuth2工作 - 綁定和東西在那裏,但我花了一段時間,並無法讓它做我想要的。 – primalpython 2013-03-27 07:32:00