Я сделал это с помощью 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 мог бы снять это с тех пор. Удачи