2010-11-23 4 views
9

Ich möchte zulassen, dass sich jemand auf meiner Website registrieren kann, um seine Videos auf meinen eigenen Youtube-Benutzerkanal hochzuladen.Zend Youtube API - Hochladen von Videos auf einem einzigen Konto?

Ich möchte nicht, dass sie Videos kommentieren oder irgendetwas, das ihre eigenen Zugangsdaten benötigt.

Sollte ich verwenden: ClientLogin-Autorisierung?

Wenn ja, wie kann ich einen Token erhalten, damit ich meiner Website erlauben kann, mit meinem YouTube-Kanal-Konto zu interagieren?

Alle Lichter hier werden sehr geschätzt werden, da ich hier irgendwie verloren bin.

Antwort

3

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

+0

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

0

Da ich keine vollständigen Lösungen für API V3 in der Dokumentation gefunden habe, habe ich das Internet für eine Lösung erkundet. Am Ende portiert ich das Python Beispiel PHP und schrieb einen Blog-Post über sie für andere Menschen, die das gleiche Problem haben:

Uploading a video to youtube through api version 3 in PHP

Dieser Blogpost die Youtube V3 api mit OAuth2 verwendet, so dass Sie nicht haben sich darum sorgen zu müssen, dass es veraltet ist. Alle anderen Funktionen (ClientLogin, AuthSub und OAuth 1.0) in V2 sind , die alle ab dem 20. April 2012 veraltet sind.

+0

dieser eingebettete Link ist nicht mehr gut. Ich habe dieses Q & A aus den "Related" -Referenzen einer anderen Frage als FYI gefunden. –

+0

@FunkFortyNiner danke für die kommentierung. Ich habe den Link gelöst. – RJD22

Verwandte Themen