2011-09-26 59 views
5

剛開始深入研究YouTube PHP API並獲得了基於瀏覽器的Zend上傳腳本。但是,我無法找到有關如何在上傳完成後檢索視頻狀態的任何文檔。我需要的主要原因是錯誤處理 - 我需要知道視頻是否被YouTube批准,因爲有人可能會在技術上上傳圖片或文件太大。我需要知道該視頻已獲得批准,以便我知道當他們返回該網站時顯示最終用戶的消息(即「您的視頻已投入使用」或「視頻上傳失敗」)。YouTube PHP API - 獲取之前上傳的視頻的狀態?

即使格式或大小不正確,基於YouTube PHP瀏覽器的上傳也會返回URL參數狀態200,這當然沒有幫助。有關如何從YT對象獲取此信息的任何想法?

總而言之,當用戶返回網站時,我希望能夠根據其特定的視頻ID創建YT對象,並希望能夠確認它未被拒絕。我正在使用ClientLogin來啓動YouTube對象:

$authenticationURL= 'https://www.google.com/accounts/ClientLogin'; 
$httpClient = Zend_Gdata_ClientLogin::getHttpClient(
       $username = '[email protected]', 
       $password = 'mypassword', 
       $service = 'youtube', 
       $client = null, 
       $source = 'MySource', // a short string identifying your application 
       $loginToken = null, 
       $loginCaptcha = null, 
       $authenticationURL); 

有什麼想法?

+0

爲什麼在發送給YouTube之前無法檢查該用戶是否上傳太大的文件? – Olli

+3

因爲這不是我問的問題:) – MindSculpt

+0

是的,那不是。但是,僅僅檢查文件是否太大會更容易? – Olli

回答

4

當最後幾天搜索並拼湊代碼後,終於找到了答案。創建$yt對象後,使用以下方法來檢查狀態:

$yt->setMajorProtocolVersion(2); 
$youtubeEntry = $yt->getVideoEntry('YOUR_YOUTUBE_VID_ID', null, true); 

if ($youtubeEntry->getControl()){ 
    $control = $youtubeEntry->getControl(); 
    $state = $control->getState()->getName(); 
} 

呼應了$state顯示字符串'failed'如果視頻未獲準無論出於何種原因。否則它是空的,這意味着它已被批准並且很好走(猜測其他國家名稱是:處理,拒絕,失敗,限制,正如Mient-jan Stelling上面所建議的那樣)。

瘋狂的這個答案是多麼艱難的放在一起的第一次YouTube API'ers。解決了! (拍背自拍)

1

你是否有一個CallToken如果是這樣很容易。

對於這個例子,我使用Zend_Gdata_Youtube和Zend AuthSub。

當你上傳你的視頻時,你有一個CallToken,通過這個呼叫令牌你可以訪問視頻的狀態。

$authenticationURL= 'https://www.google.com/accounts/ClientLogin'; 
$httpClient = Zend_Gdata_ClientLogin::getHttpClient(
      $username = '[email protected]', 
      $password = 'mypassword', 
      $service = 'youtube', 
      $client = null, 
      $source = 'MySource', // a short string identifying your application 
      $loginToken = null, 
      $loginCaptcha = null, 
      $authenticationURL); 

$youtube = new Zend_Gdata_YouTube($httpClient, '', NULL, YOUTUBE_DEVELOPER_KEY); 

$youtubeEntry = $youtube->getFullVideoEntry('ID_OF_YOUTUBE_MOVIE'); 
// its the 11 digit id all youtube video's have 

在$ youtubeEntry所有的數據對視頻

存在

$state = $youtubeEntry->getVideoState(); 

如果狀態爲null,則您的視頻提供其他製作狀態的字符串像這個。

(string) $state->getName(); 

約有4個重要的州名。 (處理,拒絕,失敗,受限制)

+0

不確定我是否可以在這裏使用calltoken;我允許用戶通過網絡上傳發布到一個特定的YouTube頻道帳戶。沒有使用登錄或用戶身份驗證,只是一個上傳到一個頻道的想法? – MindSculpt

+0

如果有幫助,我使用ClientLogin來初始化對象,我已經在上面的原始問題中添加了代碼 – MindSculpt

+0

好吧,那麼你幾乎在那裏。現在讓你的視頻狀態變得非常簡單,我上面做了一個編輯,所以我希望能幫上忙。 –