我在Google中创建了一个服务帐户,并试图更改我拥有的视频的缩略图(已上传到我的验证频道中)。顺便说一下,该帐户是一个托管帐户(实际上,这是一封公司电子邮件)。下面的代码显然在使用从Google API后端下载的JSON文件中的凭据登录。IMAGE_MIME
是image/jpeg
,CHUNK_SIZE_BYTES
是1 * 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.
您的选项将是:
-
实际上如上所述执行领域广泛的代表团,并充当您的G套房用户,而不是服务帐户。
-
与服务帐户电子邮件地址共享YouTube视频的编辑访问。