通过 API v3 允许 Google 服务帐户 YouTube 上传访问权限

问题描述 投票:0回答:4

我想在没有用户参与的情况下自动将视频上传到 YouTube,因此我创建了一个服务帐户,跳过了这些麻烦,一切看起来都很棒,然后尝试上传,块之一,我的代码因 Google_Exception 异常而崩溃:

“无法启动断点续传(HTTP 401:youtube.header,未经授权)”

然后我在YouTube API v3上挖掘并发现了错误信息:

https://developers.google.com/youtube/v3/docs/errors

“如果您尝试使用 OAuth 2.0 服务帐户流程,通常会出现此错误。YouTube 不支持服务帐户,如果您尝试使用服务帐户进行身份验证,则会收到此错误。”

这是正确的吗?我无法使用服务帐户自动将视频上传到 YouTube?

(浪费了几天的努力!)

youtube-api service-accounts
4个回答
12
投票

是的,这是正确的。

前进的方向是进行手动授权并获取生成的“刷新令牌”,然后将其用于任何自动上传。

确保在执行任何其他操作之前将刷新令牌添加到 PHP Google_Client 对象。

我现在自动上传到 YouTube。


1
投票

对于今天尝试执行此操作的任何人,请注意,如果使用 API 上传,则任何上传都将被设置为“私人(锁定)”,除非/直到应用程序提交验证并获得批准。

https://github.com/porjo/youtubeuploader/issues/86

YouTube 需要验证用于上传的 OAuth 应用程序/凭据,否则视频将被锁定为私有。

应用程序获得批准是有可能的,但如果您正在做个人项目,则可能性较小。

更多:https://github.com/porjo/youtubeuploader/issues/86


1
投票

是的,您可以使用 Youtube 的服务帐户。一种方法是将服务帐户添加到内容所有者所属的 CMS。当您检索服务帐户的 access_token 时,您可以使用内容所有者的视频。

看起来像这样,使用 Javascript 和 npm 包:

import { google } from 'googleapis';
const youtube = google.youtube('v3');

const fetchYoutubeData = async (keyfile, scopes) => {
  const auth = new google.auth.GoogleAuth({
      credentials: keyfile,
      scopes,
  });

  const accessToken = await auth.getAccessToken();

  const { data } = await youtube.videos.list({
      part: ['snippet'],
      id: 'YOUR_VIDEO_ID',
      access_token: accessToken
  });

  return data;
}

请注意,

keyfile
是您在创建服务帐户密钥时从 Gcloud 下载的 JSON。不是指向文件的路径!如果你想使用路径,请使用这个:

const auth = new google.auth.GoogleAuth({
    keyFile: 'PATH_TO_KEYFILE_IN_FILE_SYSTEM',
    scopes: ['READ_STUFF', 'WRITE_STUFF'],
});

进一步阅读使用 Oauth2 进行服务器间身份验证


0
投票

The problem is that Youtube does not immediately approve service accounts, when we set them in Youtube Studio permissions

如果在 Youtube 上使用内容所有者,则立即接受服务帐户。

© www.soinside.com 2019 - 2024. All rights reserved.