9

我想允许任何人在我的网站上注册,将他们的视频上传到我自己的 youtube 用户频道。

我不希望他们评论任何视频或任何需要他们自己的登录凭据的内容。

我应该使用:ClientLogin 授权吗?

如果是这样,我怎样才能获得令牌,以便我可以允许我的网站与我的 youtube 频道帐户进行交互?

这里的任何灯都将不胜感激,因为我在这里有点迷路了。

4

2 回答 2

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 是必需的,因为令牌可能会过期,因此您需要一种刷新它们的方法。此外,您需要发出一个虚拟请求以确保即使在您创建 Token 之后它也是有效的。

请记住,YouTube(嗯,截至 2 年前左右)阻止您上传视频的频率超过每 10 分钟一次,这使您的用例变得非常困难。也就是说,您不能允许代表一个帐户上传多个视频,超过每 10 分钟一次。但从那时起,YouTube 可能已经取消了这一点。祝你好运

于 2011-02-16T02:26:54.527 回答
0

由于我在文档中没有找到 API V3 的任何完整解决方案,因此我一直在 Internet 上寻找解决方案。最后,我将 Python 示例移植到 PHP,并为其他有相同问题的人写了一篇关于它的博客文章:

通过 PHP 中的 api 版本 3 将视频上传到 youtube

这篇博文使用带有 OAuth2 的 Youtube V3 api,因此您不必担心它会被弃用。自 2012 年 4 月 20 日起,V2 中的所有其他功能(ClientLogin、AuthSub 和 OAuth 1.0)均已弃用。

于 2013-05-23T13:03:39.507 回答