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

时间:2017-10-27 07:30:25

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

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

  1. 获取所选行
  2. 检索标题,说明,Google云端硬盘网址
  3. 通过DriveApp.getFileById
  4. 从Google云端硬盘加载文件
  5. 使用标题和说明通过YouTube.Videos.insert
  6. 将blob上传到YouTube
  7. 使用回复中的YouTube视频ID更新所选行
  8. 上传看起来像这样

    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内容合作伙伴(请参阅参数onBehalfOfContentOwneronBehalfOfContentOwnerChannel):

      

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

1 个答案:

答案 0 :(得分:3)

我的项目遇到了同样的问题,这就是我的想法:如果你的视频文件大小超过 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