ruby - 带有 OAuth2 : update and delete fail with "Insufficient Permission" error 的 YouTube API v3

标签 ruby api youtube youtube-api google-api-ruby-client

我正在尝试使用 YouTube API v3更新删除 视频与 OAuth2 for authentication通过 google-api-client (0.6.4) Ruby gem。但是,当我尝试执行这两个操作中的任何一个时,我看到以下错误消息:

Google::APIClient::ClientError: Insufficient Permission

奇怪的是:使用与 updatedelete 完全相同的身份验证过程,我可以insert(上传)成功,没问题!所以,我不认为这是我的身份验证设置的问题,而是我代码中的其他地方。

我的读写 scope 在所有这些操作中始终相同:

https://www.googleapis.com/auth/youtube https://www.googleapis.com/auth/youtube.upload

根据 API 文档,以空格分隔的范围集应涵盖 insertupdatedelete 操作。

我的 client_idclient_secretrefresh_token 对于所有这些操作也始终相同 - 所以,这不是问题要么,可以吗?请注意,我的程序在到期时会自动获取一个新的 access_token,因此,我再次认为,这不是问题所在。

为了比较,这是我的插入(上传)代码的样子(有效):

# Auth stuff, then...
@client.execute!(
  :api_method => @youtube.videos.insert,
  :body_object => body,
  :media => Google::APIClient::UploadIO.new(file_path, 'video/*'),
  :parameters => {
    'uploadType' => 'multipart',
    :part => body.keys.join(','),
  }
)

下面是我的delete 代码(失败):

# Auth stuff, then...
@client.execute!(
  :api_method => @youtube.videos.delete,
  :parameters => {
    'id' => youtube_id,
  }
)

我错过了什么?不幸的是,YouTube API documentation for delete没有提供任何例子,所以我没有什么可以比较的。如果我可以提供更多信息以使我的问题更清楚,请告诉我。

最佳答案

我相当确定这个问题的所有 11 个观点(截至撰写本文时)都是我,但我将发布一个答案以防它在将来对某人有所帮助:

我的代码本身没有问题。问题出在我最初为此帐户创建 refresh_token 时。

对于外行来说,YouTube 数据 API (v3) 不支持“服务帐户”,在 Google API 生态系统的其他地方,这是您通常完成设置 OAuth2 授权客户端的方式,当唯一的客户端是你自己。解决方法是您必须手动。请执行以下步骤:


首先,转到 Google“API 控制台”。在“API 访问”下,您需要为“已安装的应用程序”“创建客户端 ID”。这将为您提供一个 Client ID、一个 Client secret 和一个 Redirect URI(您需要非 localhost一个)。把这些写下来。

接下来,您需要手动获取授权码,方法是在您最喜欢的网络浏览器中访问如下 URL,同时登录您刚刚为其创建客户端 ID 的同一帐户:

https://accounts.google.com/o/oauth2/auth
  ?client_id={client_id}
  &redirect_uri={redirect_uri}
  &scope={space separated scopes}
  &response_type=code
  &access_type=offline

当然需要输入client_idredirect_uriscope查询参数。就我而言,这是我出错的地方。当我执行此手动步骤时,我应该将 scope 参数设置为:

https://www.googleapis.com/auth/youtube https://www.googleapis.com/auth/youtube.upload

但我只是做了 https://www.googleapis.com/auth/youtube.upload,这不足以更新/删除视频!

最后,您需要获取一个 refresh_token,方法是获取如下 URL:

https://accounts.google.com/o/oauth2/token
  ?code={authorization_code}
  &client_id={client_id}
  &client_secret={client_secret}
  &redirect_uri={redirect_uri}
  &grant_type=authorization_code

然后用如下命令 curl 它:

$ curl https://accounts.google.com/o/oauth2/token -d "code=..."

这将返回一个包含您的 refresh_token 的 JSON 响应,您随后可以在通过 Google API 以编程方式授权您的请求时使用它。

关于ruby - 带有 OAuth2 : update and delete fail with "Insufficient Permission" error 的 YouTube API v3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19126857/

相关文章:

ruby - 在 OS X 10.8.5 上使用 rvm 安装 ruby​​-1.9.3-p194

ruby-on-rails - rspec - 如何检查 allow_blank 是否存在

java - YouTube Java API。无需登录即可制作 YouTube 服务

windows-phone-7 - 如何在 Windows Phone 7 上启动 YouTube URL

ruby-on-rails - 拦截ActiveRecord establish_connection初始化过程

ruby 字符串格式格式化

java - 显示carrot2集群内容

json - WSO2 API Manager Auth 错误内容类型

c# - 使用 OData 补丁的 asp.net mvc web api 部分更新

javascript - 使用 JQuery 在按下按钮时自动播放全屏 YouTube 视频