PHP YouTube API – thumbnails.set失败

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了PHP YouTube API – thumbnails.set失败脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_502_1@
我正在尝试使用YouTube API,使用GOOGLE-api-PHP-client库更新YouTube上的视频缩略图.我们的版本是1.0.3-beta.

我已经复制/粘贴了example,并将我们的client_id和client_secret更改为知道工作的值,因为我现在仍然可以使用这些值上传视频,我只是无法设置缩略图(我刚刚上传的视频)使用相同的凭据).

这是我得到的错误

An client error occurred: Error calling PUT https://www.googleapis.COM/upload/youtube/v3/thumbnails/set?videoId=wL3Rt0sokdI&uploadTyPE=resumable&upload_id=AEnB2UqFI4w1qO1gjoFS-fOlc61OthOht0ngDFAcdG9Nnufds61IyMIUUxF1rAvmoDl77LeEQZb1-HMyqtc9OP3Jg4hrfcyuOQ: (403) Forbidden

编辑 – 更多信息:这是我在打印完整个异常时获得的一小部分信息:

{
    ["errors":PRotected]=> array(1) 
    {
        [0]=> array(5) { 
            ["domain"]=> string(17) "youtube.thumbnail" 
            ["reason"]=> string(9) "forbidden" 
            ["message"]=> string(9) "Forbidden" 
            ["locationType"]=> string(6) "header" 
            ["location"]=> string(13) "Authorization" 
    } 
}

这是我正在使用的脚本(它与示例代码相同,但我将它放在这里,以上面的示例URL出现故障):

/**
 * This sample uploads and sets a custom thumbnail for a video.
 *
 * 1. IT uploads an image using the "Google_MediaFileUpload" class.
 * 2. It sets the uploaded image as a custom thumbnail to the video by
 *    calling the API's "youtube.thumbnails.set" method
 *
 * @author Ibrahim Ulukaya
*/


// Call set_include_path() as needed to point to your client library.
set_include_path('/path/to/google-api-PHP-client/src/');
require_once('Google/Client.PHP');
require_once('Google/Service/YouTube.PHP');
session_start();

/*
 * You can acquire an OAuth 2.0 client ID and client secret From the
 * Google Developers Console <https://cloud.google.com/console>
 * For more information about using OAuth 2.0 to access Google Apis,please see:
 * <https://developers.google.com/youtube/v3/guides/authentication>
 * Please ensure that you have enabled the YouTube Data API for your project.
 */
$OAUTH2_CLIENT_ID = 'OURCLIENTIDWASHERE';
$OAUTH2_CLIENT_SECRET = 'OURCLIENTSECRETWASHERE';

$client = new Google_Client();
$client->setClientId($OAUTH2_CLIENT_ID);
$client->setClientSecret($OAUTH2_CLIENT_SECRET);
$client->setScopes('https://www.googleapis.com/auth/youtube');
$redirect = filter_VAR('http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'],FILTER_SANITIZE_URL);
$client->setRedirectUri($redirect);

// define an object that will be used to make all API requests.
$youtube = new Google_Service_YouTube($client);

if (isset($_GET['code'])) {
  if (strval($_SESSION['state']) !== strval($_GET['state'])) {
    die('The session state did not match.');
  }

  $client->authenticate($_GET['code']);
  $_SESSION['token'] = $client->getAccessToken();
  header('Location: ' . $redirect);
}

if (isset($_SESSION['token'])) {
  $client->setAccessToken($_SESSION['token']);
}

// Check to ensure that the access token was successfully acquired.
if ($client->getAccessToken()) {
  try{

    // REPLACE this value with the video ID of the video being updated.
    $videoId = "wL3Rt0sokdI";

    // REPLACE this value with the path to the image file you are uploading.
    $imagePath =     "/path/to/image.jpg";

    // Specify the size of each chunk of data,in bytes. Set a higher value for
    // reliable connection as fewer chunks lead to faster uploads. Set a lower
    // value for better recovery on less reliable connections.
    $chunkSizeBytes = 1 * 1024 * 1024;

    // Setting the defer flag to true tells the client to return a request which can be     called
    // with ->execute(); instead of making the API call immediately.
    $client->setDefer(true);

    // Create a request for the API's thumbnails.set method to upload the image and     associate
    // it with the appropriate video.
    $setRequest = $youtube->thumbnails->set($videoId);

    // Create a MediaFileUpload object for resumable uploads.
    $media = new Google_Http_MediaFileUpload(
        $client,$setRequest,'image/jpeg',null,true,$chunkSizeBytes
);
$media->setFileSize(filesize($imagePath));


// Read the media file and upload it chunk by chunk.
$status = false;
$handle = fopen($imagePath,"rb");
while (!$status && !feof($handle)) {
  $chunk = fread($handle,$chunkSizeBytes);
  $status = $media->nextChunk($chunk);
}

fclose($handle);

// If you want to make other calls after the file upload,set setDefer back to false
$client->setDefer(false);


$thumbnailUrl = $status['items'][0]['default']['url'];
$htMLBody .= "<h3>Thumbnail Uploaded</h3><ul>";
$htmlBody .= sprintf('<li>%s (%s)</li>',$videoId,$thumbnailUrl);
$htmlBody .= sprintf('<img src="%s">',$thumbnailUrl);
$htmlBody .= '</ul>';


} catch (Google_ServiceException $e) {
  $htmlBody .= sprintf('<p>A service error occurred: <code>%s</code></p>',htmlspecialchars($e->getMessage()));
} catch (Google_Exception $e) {
  $htmlBody .= sprintf('<p>An client error occurred: <code>%s</code></p>',htmlspecialchars($e->getMessage()));
}

$_SESSION['token'] = $client->getAccessToken();
} else {
  // If the user hasn't authorized the app,initiate the OAuth flow
  $state = mt_rand();
  $client->setState($state);
  $_SESSION['state'] = $state;

  $authUrl = $client->createAuthUrl();
  $htmlBody = <<<END
  <h3>Authorization required</h3>
  <p>You need to <a href="$authUrl">authorize access</a> before proceeding.<p>
END;
}
?>

<!doctype html>
<html>
<head>
<title>Claim Uploaded</title>
</head>
<body>
  <?=$htmlBody?>
</body>
</html>

解决方法

我终于找到了答案. YouTube帐户无权上传自定义缩略图(尽管可以从YouTube后端“选择”缩略图.

您可以在以下网址找到该帐户启用的功能列表:
http://www.youtube.com/features

就我而言,我需要未启用的自定义缩略图权限:

只要您的帐户信誉良好,显然验证您的YouTube帐户就会授予此权限.

脚本宝典总结

以上是脚本宝典为你收集整理的PHP YouTube API – thumbnails.set失败全部内容,希望文章能够帮你解决PHP YouTube API – thumbnails.set失败所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。