2014-03-26 69 views
0

我正在做一個應用程序,將視頻從網絡表單上傳到我的YouTube帳戶。我想使用服務器身份驗證。Youtube上傳API的驗證錯誤

我在Google雲端控制檯中配置了我的應用程序,並且已將私鑰下載到我的服務器中。

這是代碼:

const SERVICE_ACCOUNT_EMAIL = 'MY_ACCOUNT_EMAIL'; 
    const CLIENT_ID = 'MY_CLIENT_ID'; 
    const KEY_FILE = './MY_PRIVATE_KEY.p12'; 

    if (!isset($_FILES['video'])) { 

     echo '<form method="post" enctype="multipart/form-data">'; 
     echo '<input type="file" name="video">'; 
     echo '<input type="submit" value="Submit">';   
     echo '</form>'; 

    } 
    else { 
     require_once 'Google/Client.php'; 
     require_once 'Google/Service/YouTube.php'; 


     $client = new Google_Client(); 
     $client->setApplicationName('My Application Name'); 
     $client->setClientId(CLIENT_ID); 

     $oauthClient = new Google_Auth_OAuth2($client); 

     // Set your cached access token. Remember to replace $_SESSION with a 
     // real database or memcached. 
     session_start(); 
     if (isset($_SESSION['token'])) { 
      $oauthClient->setAccessToken($_SESSION['token']); 
     } else { 
      $key = file_get_contents(KEY_FILE); 
      $oauthClient->refreshTokenWithAssertion(new Google_Auth_AssertionCredentials(SERVICE_ACCOUNT_EMAIL, array('https://www.googleapis.com/auth/youtube'), $key)); 
     } 

     if ($oauthClient->getAccessToken()) { 

      echo '<p>Uploading ...</p>'; 
      $youtube = new Google_Service_YouTube($client); 

      $videoPath = $_FILES['video']['tmp_name']; 

      // Create a snippet with title, description, tags and category ID 
      $snippet = new Google_Service_YouTube_VideoSnippet(); 
      $snippet->setTitle("Test video ".date('H:i')); 
      $snippet->setDescription("Test description ".date('H:i')); 
      $snippet->setTags(array("test", "oauth")); 

      // Set the video's status to "public". 
      $status = new Google_Service_YouTube_VideoStatus(); 
      $status->privacyStatus = "public"; 

      // Associate the snippet and status objects with a new video resource. 
      $video = new Google_Service_YouTube_Video(); 
      $video->setSnippet($snippet); 
      $video->setStatus($status); 

      // Create a request for the API's videos.insert method to create and upload the video. 
      $insertRequest = $youtube->videos->insert("status,snippet", $video, array("data"=>file_get_contents($videoPath), "uploadType" => "media", "mimeType" => "video/mp4")); 

      echo '<h3>Upload complete</h3>'; 
      echo '<p><a href="https://www.youtube.com/watch?v='.$status['id'].'" target="_blank">Link to the video</a></p>'; 

     } 
     else { 
      $authUrl = $client->createAuthUrl(); 
      print "<a href='$authUrl'>Authorize this application</a>"; 
     } 
    } 

它不工作。我有一個致命錯誤:

錯誤調用POST https://www.googleapis.com/upload/youtube/v3/videos?part=status%2Csnippet&uploadType=multipart:(401)需要登錄

我在做什麼錯?

回答

1

您不應該使用該OAuth2類,只需調用方法Google_Client傳遞Google_Auth_AssertionCredentials實例。

看看this example(它使用舊的PHP lib版本,但驗證過程是相同的)。