Zend Youtube API - Загрузить видео на один аккаунт? - PullRequest
9 голосов
/ 23 ноября 2010

Я хочу разрешить кому-либо зарегистрироваться на моем сайте, загружать свои видео на мой собственный канал на YouTube.

Я не хочу, чтобы они комментировали любые видео или что-либо, для чего требуются свои собственные учетные данные для входа.

Должен ли я использовать: авторизацию ClientLogin?

Если это так, как я могу получить токен, чтобы я мог разрешить своему сайту взаимодействовать с моей учетной записью канала YouTube?

ЛюбойОгни здесь будут оценены по достоинству, так как я немного заблудился здесь.

Ответы [ 2 ]

3 голосов
/ 16 февраля 2011

Я сделал это с помощью 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 голосов
/ 23 мая 2013

Так как я не нашел полных решений для API V3 в документации, я искал решение для Интернета.В конце я портировал пример Python на PHP и написал об этом в блоге для других людей, имеющих такую ​​же проблему:

Загрузка видео на YouTube через API версии 3 в PHP

В этом посте используется API Youtube V3 с OAuth2, поэтому вам не нужно беспокоиться об его устаревании.Все остальные функции (ClientLogin, AuthSub и OAuth 1.0) в V2 устарели по состоянию на 20 апреля 2012 года .

...