0

使用Youtube API v3可以从浏览器上传视频,其中包含access_code在服务器中生成的视频。

在RoR上运行的 Web 服务器有一个客户端证书,该证书使用

Google::APIClient::JWTAsserter

我能够得到access_code适用于one hour.

我还有一个开发者密钥供应用程序与基于浏览器的上传一起使用。

我想access_code与浏览器共享,这样用户就不必使用他/她的谷歌帐户登录。

RestClient为了在我在 ruby​​ 中使用的一个脚本中模拟这一点。

这是我根据文档尝试的示例。

require 'google/api_client'
require 'nokogiri'
require 'rest_client'

client = Google::APIClient.new
youtube_service = client.discovered_api('youtube', 'v3')

key = Google::APIClient::PKCS12.load_key('keyfile.p12', 'password')
service_account = Google::APIClient::JWTAsserter.new(
        'certificate_email',
        'https://www.googleapis.com/auth/youtube.upload',
        key)
client.authorization = service_account.authorize

access_token = client.authorization.access_token

dev_key = "developer_key"

upload_metadata_xml = <<-EOF
<?xml version="1.0"?>
<entry xmlns="http://www.w3.org/2005/Atom"
  xmlns:media="http://search.yahoo.com/mrss/"
  xmlns:yt="http://gdata.youtube.com/schemas/2007">
  <media:group>
    <media:title type="plain">Test upload one</media:title>
    <media:description type="plain">
      I gave a bad toast at my friend's wedding.
    </media:description>
    <media:category
      scheme="http://gdata.youtube.com/schemas/2007/categories.cat">People
    </media:category>
    <media:keywords>upload, test, one</media:keywords>
  </media:group>
</entry>
EOF

headers = {
    "Authorization" => "Bearer #{access_token}",
    "GData-Version" => "2",
    "X-GData-Key" => "key=#{dev_key}",
    "Content-Type" => "application/atom+xml; charset=UTF-8"
}

upload_response = RestClient.post("https://gdata.youtube.com/action/GetUploadToken", upload_metadata_xml, headers)
xml_response = Nokogiri::XML.parse(upload_response)
upload_url = xml_response.xpath("//url").first.children.inner_text()
upload_token = xml_response.xpath("//token").first.children.inner_text()

我在发布数据的行中不断收到错误消息。

upload_response = RestClient.post("https://gdata.youtube.com/action/GetUploadToken", upload_metadata_xml, headers)

错误说401 Unauthorized!

我在谷歌浏览器中尝试了同样的Postman扩展。抛出相同的错误。

我确定访问凭据是正确的。我已经检查过很多次了。

以前有人实施过吗?或者是否有任何替代方法可以实现这一目标,而无需用户登录谷歌。

编辑 1

基于 SF 上的这个问题:Google Calendar API v3 hardcoded credentials

authorization我通过将 only 更改为 use 来尝试相同的脚本,Google::APIClient::InstalledAppFlow但它仍然抛出相同的401 Unauthorized!.

4

1 回答 1

0

除非您在 Web 服务器中运行它,否则它将是一个已安装的应用程序。否则,您将选择正确识别重定向地址的 Web 应用程序。

您可以通过从OAuth2 Playground获取刷新令牌并将其设置在您的 youtube 对象中来实现。

这里它解释了一点。

还有一步一步的视频。

于 2013-11-25T18:01:04.417 回答