2010-11-23 53 views
9

Je souhaite autoriser toute personne à s'inscrire sur mon site pour télécharger ses vidéos sur ma propre chaîne YouTube.Zend Youtube API - Télécharger des vidéos sur un seul compte?

Je ne veux pas qu'ils commenter des vidéos, ou tout ce qui nécessite leurs propres identifiants de connexion. Dois-je utiliser: l'autorisation ClientLogin?

Si oui, comment puis-je obtenir un jeton afin de permettre à mon site d'interagir avec mon compte de chaîne YouTube?

Toutes les lumières ici seront grandement appréciées, puisque je suis un peu perdu ici. Je l'ai accompli en utilisant ClientLogin.

Répondre

3

Une classe de base est ci-dessous. Cette classe renvoie une instance de Zend HTTP Client prête à effectuer des requêtes authentifiées.

<?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 

?> 

Vous aurez besoin d'avoir ces constantes définies.

YOUTUBE_USERNAME_PROD 
YOUTUBE_PASSWORD_PROD 

Ou modifier la classe pour les passer dans le try/catch est nécessaire parce que les jetons peuvent expirer, vous devez donc d'une manière pour les rafraîchir. En outre, vous devez effectuer une demande factice pour vous assurer que le jeton est valide même après l'avoir créé. Gardez à l'esprit que YouTube (il y a environ 2 ans) vous a empêché de télécharger une vidéo plus de toutes les 10 minutes, ce qui rend votre utilisation très difficile. En d'autres termes, vous ne pouvez pas autoriser le téléchargement de plusieurs vidéos au nom d'un seul compte, plus de toutes les 10 minutes. Mais YouTube pourrait avoir soulevé cela depuis lors. Bonne chance

+0

Merci beaucoup! Eh bien, novembre est loin maintenant, mais j'attendrai un autre projet où cette question pourrait se poser de nouveau - je ne peux pas vérifier la réponse, mais je suis sûr que cela m'aidera (et d'autres) d'une manière ou d'une autre. J'ai des questions précises à ce sujet, mais je dois les quitter pour une autre fois, malheureusement. Bravo, et encore merci beaucoup. – MEM

0

Comme je n'ai trouvé aucune solution complète pour l'API V3 dans la documentation, j'ai exploré Internet pour trouver une solution. En fin de compte, je Ported l'exemple Python pour PHP et a écrit un billet de blog à ce sujet pour d'autres personnes qui ont le même problème:

Uploading a video to youtube through api version 3 in PHP

Cette blogpost utilise l'API V3 Youtube avec OAuth2 de sorte que vous n'avez pas de s'inquiéter d'être déconseillé. Toutes les autres fonctions (ClientLogin, AuthSub et OAuth 1.0) dans V2 sont toutes déconseillées à compter du 20 avril 2012.

+0

ce lien intégré n'est plus bon. J'ai trouvé ce Q & A à partir des références «connexes» d'une autre question, en tant que FYI. –

+0

@FunkFortyNiner merci d'avoir commenté. J'ai résolu le lien. – RJD22