Ich habe dies mit ClientLogin erreicht. Eine grundlegende Klasse ist unten. Diese Klasse gibt eine Instanz von Zend HTTP Client zurück, die bereit ist, authentifizierte Anfragen zu stellen.
<?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
?>
Sie werden diese Konstanten definiert haben müssen.
YOUTUBE_USERNAME_PROD
YOUTUBE_PASSWORD_PROD
Oder die Klasse modifizieren, um sie in passieren Die try/catch ist erforderlich, da Token ablaufen kann, so dass man auf eine Art und Weise brauchen um sie zu erneuern. Außerdem müssen Sie eine Dummy-Anfrage machen, um sicherzustellen, dass das Token gültig ist, auch nachdem Sie es erstellt haben.
Bedenken Sie, dass YouTube (gut, vor etwa 2 Jahren) verhindert hat, dass Sie ein Video mehr als alle 10 Minuten hochladen, was Ihren Anwendungsfall ziemlich schwierig macht. Das heißt, Sie können nicht zulassen, dass mehrere Videos in einem einzigen Konto hochgeladen werden, mehr als alle 10 Minuten. Aber YouTube könnte das seither aufgehoben haben. Viel Glück
Vielen Dank! Nun, November ist jetzt weit weg, aber ich werde auf ein anderes Projekt warten, wenn diese Frage wieder auftauchen könnte - ich kann die Antwort nicht verifizieren, aber ich bin sicher, dass es mir (und anderen) irgendwie helfen wird. Ich habe konkrete Fragen dazu, aber ich muss sie leider für eine andere Zeit verlassen. Prost und nochmals vielen Dank. – MEM