无法通过 Google Apps 脚本中的 YouTube 数据 API 从云端硬盘上传:空响应

Posted

技术标签:

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

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

    获取选中的行 检索标题、描述、Google Drive URL 通过DriveApp.getFileById 从 Google Drive 加载文件 通过YouTube.Videos.insert 使用标题和说明将 blob 上传到 YouTube 使用响应中的 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 内容合作伙伴使用。

【问题讨论】:

我在 Apps 脚本问题跟踪器上提出了一个问题:#68799876 Cannot upload Blob from Drive to YouTube 【参考方案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://***.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 内部运行的原因是我想避免在客户端进行联网,所以我将把所有内容都放在一个脚本中以便在客户端外部运行。

以上是关于无法通过 Google Apps 脚本中的 YouTube 数据 API 从云端硬盘上传:空响应的主要内容,如果未能解决你的问题,请参考以下文章

无法通过Google Apps脚本显示授权对话框

google Apps 脚本中的 createFile() 无法正常运行

如何通过 Google 表格中的二维数组通过 Apps 脚本插入 Big Query?

无法使用 Google Apps 脚本显示授权对话框

使用 Apps 脚本对 Google 表格中的边框进行条件格式设置

在使用具有剪切和粘贴功能的Apps脚本时,如何处理Google表单中的新数据?