【问题标题】:Cannot upload from Drive via YouTube Data API in Google Apps Script: empty response无法通过 Google Apps 脚本中的 YouTube 数据 API 从云端硬盘上传:空响应
【发布时间】:2018-04-08 17:52:39
【问题描述】:

我正在尝试将文件列表从 Google 云端硬盘导入 YouTube。元数据和文件的 URL 位于 Google 电子表格中,因此我使用 Google Apps 脚本编写了一些代码,执行以下操作

  1. 获取选中的行
  2. 检索标题、描述、Google Drive URL
  3. 通过DriveApp.getFileById 从 Google Drive 加载文件
  4. 通过YouTube.Videos.insert 使用标题和说明将 blob 上传到 YouTube
  5. 使用响应中的 YouTube 视频 ID 更新所选行

上传看起来像这样

var blob = DriveApp.getFileById(id).getBlob();
var resource = {
    snippet: {
        title: 'The title',
        description: 'A long description ...',
        defaultLanguage: 'de',
        categoryId: 17,
        tags: [ 'Sport', 'Fitness' ],
    },
    status: {
        privacyStatus: 'unlisted'
    }
}
try {
    var result = YouTube.Videos.insert(resource, "snippet,status", blob);
    return result.id;
} catch (err) {
    console.log({message: 'Error ' + err.message, error: err});
}

这段代码大约一年前就已经运行了。我已经稍微调整了一下,但现在我没有得到YouTube.Videos.insert 电话的回复。在 catch 中记录了以下内容:

消息:错误空响应

错误:异常:空响应

不是很有帮助。

在上传之前,我做了一个YouTube.Channels.list 在有多个可用频道的情况下获取目标频道。对于这个请求,我必须允许访问我的数据,并且我只在第一次调用时被询问。我还在applications for my Google account 的列表中看到了该脚本。我认为权限没问题。

关于如何获得有关该问题的更多信息的任何建议,或者我应该做些什么不同的事情?


关于目标频道(这可能是一个不同的问题),我不能真正使用它,因为我似乎只能上传到特定频道,如果我是 YouTube 内容合作伙伴(请参阅参数 onBehalfOfContentOwner 和 @ 987654326@):

注意:此参数仅供 YouTube 内容合作伙伴使用。

【问题讨论】:

标签: google-apps-script youtube-data-api


【解决方案1】:

我在我的项目中遇到了同样的问题,这是我的发现:如果您的视频文件大小超过 10 Mb,您将收到 Empty response 错误。

可能(不能说官方,因为没有文档提及)这是因为 Google Apps 脚本的 YouTube.Videos.insert(以及所有其他可用的内置服务)在后台使用 UrlFetchApp,其限制为 10 Mb每次通话:https://developers.google.com/apps-script/guides/services/quotas#current_limitations。您可以使用示例代码自行检查:如果文件小于 10 Mb,则将成功上传。

作为可能的解决方法,您可以使用此答案中的想法:https://stackoverflow.com/a/44853845/555121

基本上,您需要使用SpreadsheetApp.getUi().showModalDialog 打开模态窗口,然后通过模态对话框中的纯 JavaScript 执行上传到 YouTube,这对传输的数据大小没有限制。以下是 YouTube 可恢复上传实现的一个很好的示例:https://github.com/sangnvus/2015SUMJS01/blob/master/WIP/Sources/FlyAwayPlus/FlyAwayPlus/Scripts/youtube-upload.js

【讨论】:

  • 很好的答案!我没有测试您提供的解决方案,但我认为这就是原因。在 Apps Script 内部运行的原因是我想避免在客户端进行联网,所以我将把所有内容都放在一个脚本中以便在客户端外部运行。
猜你喜欢
  • 2019-08-08
  • 2023-02-10
  • 1970-01-01
  • 1970-01-01
  • 2019-02-28
  • 2017-08-14
  • 1970-01-01
  • 2014-10-22
相关资源
最近更新 更多