服务帐号无权访问 Youtube API 中自己的频道视频



我在Google中创建了一个服务帐户,并试图更改我拥有的视频的缩略图(已上传到我的验证频道中)。顺便说一下,该帐户是一个托管帐户(实际上,这是一封公司电子邮件)。下面的代码显然在使用从Google API后端下载的JSON文件中的凭据登录。IMAGE_MIMEimage/jpegCHUNK_SIZE_BYTES1 * 1024 * 1024

putenv("GOOGLE_APPLICATION_CREDENTIALS=" . CLIENT_ACCOUNT_FILE);
$client = new Google_Client();
$client->useApplicationDefaultCredentials();
$client->setScopes(['https://www.googleapis.com/auth/youtube', 'https://www.googleapis.com/auth/youtube.upload']);
$client->setDefer(true);
$youtube = new Google_Service_YouTube($client);
try {
  $set_request = $youtube->thumbnails->set($video_id);
  $media = new Google_Http_MediaFileUpload(
    $client,
    $set_request,
    IMAGE_MIME,
    null,
    true,
    CHUNK_SIZE_BYTES
  );
  $media->setFileSize(filesize($image_path));
  $status = false;
  $handle = fopen($image_path, "rb");
  while (!$status && !feof($handle)) {
    $chunk = fread($handle, CHUNK_SIZE_BYTES);
    $status = $media->nextChunk($chunk);
  }
  fclose($handle);
} catch (Exception $e) {
  echo "ERROR -> " . $e->getMessage();
}
$client->setDefer(false);

可悲的是,它引发了例外。运行getMessage(),它弹出了此JSON:

{
 "error": {
  "errors": [
   {
    "domain": "youtube.thumbnail",
    "reason": "forbidden",
    "message": "The thumbnail cant be set for the specified video. The request might not be properly authorized.",
    "locationType": "parameter",
    "location": "videoId"
   }
  ],
  "code": 403,
  "message": "The thumbnail cant be set for the specified video. The request might not be properly authorized."
 }
}

i直接访问视频ID,该频道是我的(并且只有一个频道),它不会引发登录异常(直到我使其正常工作),并且图像文件存在。有人以前有这个问题吗?

编辑

我决定登录我的个人帐户,并遵循相同的验证,API激活,服务帐户JSON下载和脚本运行的过程。错误是绝对相同的,即使在杰伊的答案之后,那里的所有内容都应该为非域帐户工作。

我尝试过,只是因为,将公司凭据与我的个人视频一起使用并尝试。相同的错误。就像我在整个过程中缺少一些东西。我还检查了getenv的值,这是正确的,并且不设置它会弹出"无法加载默认凭据"。>他们以某种方式。

服务帐户不是托管G Suite域(公司帐户)的成员,也不自动拥有服务帐户创建者用户帐户所拥有的任何数据的权利。请参阅Google的域名范围内代表团设置的注释:

Note: Although you can use service accounts in applications that run from a G Suite domain, service accounts are not members of your G Suite account and aren’t subject to domain policies set by G Suite administrators. For example, a policy set in the G Suite admin console to restrict the ability of G Suite end users to share documents outside of the domain would not apply to service accounts.

您的选项将是:

  1. 实际上如上所述执行领域广泛的代表团,并充当您的G套房用户,而不是服务帐户。

  2. 与服务帐户电子邮件地址共享YouTube视频的编辑访问。

相关内容

  • 没有找到相关文章

最新更新