2010-11-23 2 views
9

누구든지 내 사이트에 등록하여 자신의 YouTube 사용자 채널에 비디오를 업로드 할 수있게하고 싶습니다.Zend Youtube API - 단일 계정으로 비디오 업로드?

저는 동영상에 댓글을 달거나 자신의 로그인 자격 증명이 필요한 콘텐츠에 댓글을 달지 않습니다.

사용해야 할 대상 : ClientLogin authorization?

그렇다면 내 사이트가 내 YouTube 채널 계정과 상호 작용할 수 있도록 토큰을 얻으려면 어떻게해야합니까?

나는 여기에서 약간 분실되기 때문에, 여기 어떤 빛든지 중대하게 평가 될 것이다.

답변

3

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 

을 또는 그들을 전달하는 클래스를 수정 토큰이 만료 될 수 있기 때문에 시도/캐치가 필요합니다. 그들을 새로 고칠 수 있습니다. 또한 토큰이 작성된 후에도 유효한지 확인하기 위해 더미 요청을해야합니다.

YouTube는 2 년 전쯤에 10 분이 넘는 동영상을 업로드하지 못하도록 했으므로 유스 케이스가 상당히 어려워졌습니다. 즉, 단일 계정 대신 여러 개의 동영상을 매 10 분마다 업로드하는 것을 허용 할 수 없습니다. 그러나 YouTube는 그 이후로이를 해제했을 수도 있습니다. 행운을 빌어 요.

+0

고맙습니다. 글쎄, 11 월은 멀어졌지만,이 질문이 다시 생길 수 있기 때문에 나는 또 다른 프로젝트를 기다릴 것이다. 나는 대답을 검증 할 수는 없지만 어떻게 든 나 (그리고 다른 사람들)를 도울 것이라고 확신한다. 그것에 대해 구체적인 질문이 있지만 불행히도 다른 시간을 떠나야합니다. 건배, 그리고 다시 한번 많이 고마워. – MEM

0

문서에서 API V3에 대한 완벽한 솔루션을 찾지 못했기 때문에 솔루션을 찾기 위해 인터넷을 탐색 해 왔습니다. 결국 나는 PHP로 파이썬 예를 포팅과 같은 문제가 다른 사람들이 그것에 대해 블로그 포스트를 작성했습니다 : 당신이하지 않아도

Uploading a video to youtube through api version 3 in PHP

이 블로그 게시물은 OAuth2를 함께 유튜브 V3 API를 사용을 그 점에 대해 걱정할 필요가 있습니다. V2의 다른 모든 기능 (ClientLogin, AuthSub 및 OAuth 1.0)은 2012 년 4 월 20 일부터으로 대체되어 입니다.

+0

임베디드 링크가 더 이상 좋지 않습니다. 저는이 질문을 다른 질문의 "관련"참고 문헌에서 찾아 냈습니다 (FYI 참조). –

+0

@FunkFortyNiner 님의 의견에 감사드립니다. 나는 그 문제를 해결했다. – RJD22