2010-11-23 75 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