2010-11-23 97 views
9

我想允許任何人在我的網站上註冊,在我自己的YouTube用戶頻道上上傳他們的視頻。Zend Youtube API - 在單個帳戶上上傳視頻?

我不希望他們評論任何視頻或任何需要他們自己的登錄憑據的內容。

我應該使用:ClientLogin授權嗎?

如果是這樣,我如何獲得令牌以便我可以讓我的網站與我的YouTube頻道帳戶進行互動?

在這裏的任何燈將不勝感激,因爲我有點失落在這裏。

回答

3

我已經使用ClientLogin完成了此操作。下面是一個基本的課程。這個類返回一個Zend HTTP客戶端的實例,它已準備好進行認證請求。

<?php 

class GoogleAuthenticator { 

    public static function authenticate($logger) { 
    $tokenObj = new Token(); 
    try { 
     $token = $tokenObj->get($token_name); 
     if(!empty($token)) { 
     //load a new HTTP client with our token 
     $logger->info('Using cached token: ' . $token); 
     $httpClient = new Zend_Gdata_HttpClient(); 
     $httpClient->setConfig(array(
       'maxredirects' => 0, 
       'strictredirects' => true, 
       'useragent' => 'uploader/v1' . ' Zend_Framework_Gdata/' . Zend_Version::VERSION 
      ) 
     ); 
     $httpClient->setClientLoginToken($token); 
     //attempt to use our token to make an authenticated request. If the token is invalid 
     // an exception will be raised and we can catch this below 
     $yt = new Zend_Gdata_YouTube($httpClient, 'uploader/v1', '', $youtube_api_key); 
     $query = new Zend_Gdata_YouTube_VideoQuery(); 
     $query->setFeedType('top rated'); 
     $query->setMaxResults(1); 
     $yt->getPlaylistListFeed(null, $query); //ignore the response! 
     } else {  
     $logger->info('Generating new HTTP client'); 
     // Need to create a brand new client+authentication 
     $authenticationURL= 'https://www.google.com/youtube/accounts/ClientLogin'; 
     $httpClient = 
       Zend_Gdata_ClientLogin::getHttpClient(
         $username = YOUTUBE_USERNAME_PROD, 
         $password = YOUTUBE_PASSWORD_PROD, 
         $service = 'youtube', 
         $client = null, 
         $source = 'uploader/v1', 
         $loginToken = null, 
         $loginCaptcha = null, 
         $authenticationURL); 

     // get the token so we can cache it for later 
     $token = $httpClient->getClientLoginToken(); 
     $tokenObj->destroy($token_name); 
     $tokenObj->insert($token, $token_name); 
     } 
     return $httpClient; 

    }catch(Zend_Gdata_App_AuthException $e) { 
     $tokenObj->destroy($token_name); 
     die("Google Authentication error: " . $e->getMessage()); 
    }catch(Exception $e) { 
     $tokenObj->destroy($token_name); 
     die("General error: " . $e->getMessage()); 
    } 
    } // authenticate() 
} // GoogleAuthenticator 

?> 

你需要有這些常量定義:

YOUTUBE_USERNAME_PROD 
YOUTUBE_PASSWORD_PROD 

或修改類來傳遞他們需要的try/catch語句,因爲令牌可以到期,所以你需要一種方式刷新它們。此外,您還需要提出虛擬請求,以確保令牌在創建後仍然有效。

請記住,YouTube(截至2年前)阻止您每上傳10分鐘以上的視頻,這會讓您的使用案例變得非常困難。也就是說,您不能允許代表單個帳戶上傳多個視頻,而不是每10分鐘更多一次。但YouTube從那時起可能已經取消了。祝你好運

+0

非常感謝!那麼,11月現在已經很遠了,但我會等待另一個項目,這個問題可能會再次出現 - 我無法驗證答案,但我確信它會以某種方式幫助我(和其他人)。我確實有關於它的具體問題,但是我不得不離開他們。歡呼,並再次感謝。嵌入式鏈接的 – MEM 2011-02-17 11:52:00

0

由於我沒有找到API V3的完整解決方案,所以我一直在探索Internet的解決方案。最後,我移植了Python的例子,以PHP寫了博客文章它有同樣的問題,其他人:

Uploading a video to youtube through api version 3 in PHP

我這篇文章使用YouTube V3 API和OAuth2用戶,所以你不必擔心它會被棄用。 V2中的所有其他功能(ClientLogin,AuthSub和OAuth 1.0)均爲,截至2012年4月20日已全部棄用。

+0

不再好。作爲參考,我從另一個問題的「相關」參考中找到了這個問題解答。 – 2018-01-21 00:51:37