在Google应用程序脚本中使用YouTube API [英] using youtube API with Google Apps Scripts

查看:13
本文介绍了在Google应用程序脚本中使用YouTube API的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

无法测试我的脚本。 如果您能帮上忙,这里的代码-它不工作 根据文档-https://developers.google.com/youtube/v3/docs/videos/insert

  if (serviceYT.hasAccess()) {
  url = 'https://youtube.googleapis.com/youtube/v3/videos?part=snippet%2CcontentDetails%2Cstatistics&mine=true&key='+ API_KEY;
  var data;
  data = '{"snippet":{"title":"testtitle","description":"testdes","categoryId":"19","tags":["asdf","sadfds"]},"status":{"privacyStatus":"public"}}';

  var options =  {
    'headers': {
      'Authorization': 'Bearer ' + serviceYT.getAccessToken()
      ,'Accept': 'application/json'
    },
    'contentType': 'application/json',
    'method' : 'POST',
    'payload' : data,
    'muteHttpExceptions' : true
  };
  
  //execute and handle the response
  var response = UrlFetchApp.fetch(url, options);
  var responseCode = response.getResponseCode();
  var result = JSON.parse(response.getContentText());
  Logger.log(result);

}

我的问题-

  1. 将视频放在哪里?
  2. 我收到的错误的解决方案:

{错误={消息=‘状态’,代码=400.0,错误=[{原因=意外部件,域=youtube.part,消息=‘状态’,位置=部分,位置类型=参数}]}}

一个YouTube对象(基本上是一个空视频)被成功添加到YouTube中,可以通过直播间看到。这是一个空视频,但标题,描述,状态等…其他内容是正确的设置。

对如何添加媒体或视频有什么想法吗? 必须将视频Blob添加到负载中的什么位置?

我无法在文档中找到它。 https://developers.google.com/youtube/v3/docs/videos/insert

推荐答案

我相信您的目标如下。

  • 您要将带有标题、说明等的电影文件上载到YouTube频道。
  • 电影文件已放入您的Google Drive中。
  • 您希望通过使用UrlFetchApp直接请求终结点来实现此目的。

在这种情况下,以下修改后的脚本如何?

修改后的脚本:

在使用此脚本之前,请启用YouTube数据API v3并添加https://www.googleapis.com/auth/youtube的作用域。请将Google Drive中电影文件的文件ID设置为const fileId = "###";

serviceYT.getAccessToken()来自您的脚本。

function myFunction() {
  const fileId = "###"; // Please set the file ID of movie file on the Google Drive.
  const metadata = {
    "snippet": { "title": "testtitle", "description": "testdes", "categoryId": "19", "tags": ["asdf", "sadfds"] },
    "status": { "privacyStatus": "public" }
  };

  const url = 'https://www.googleapis.com/upload/youtube/v3/videos?part=snippet%2Cstatus';
  const file = DriveApp.getFileById(fileId);
  const boundary = "xxxxxxxxxx";
  let data = "--" + boundary + "
";
  data += "Content-Type: application/json; charset=UTF-8

";
  data += JSON.stringify(metadata) + "
";
  data += "--" + boundary + "
";
  data += "Content-Type: " + file.getMimeType() + "

";
  const payload = Utilities.newBlob(data).getBytes().concat(file.getBlob().getBytes()).concat(Utilities.newBlob("
--" + boundary + "--").getBytes());
  const options = {
    method: "post",
    contentType: "multipart/form-data; boundary=" + boundary,
    payload: payload,
    headers: { 'Authorization': 'Bearer ' + serviceYT.getAccessToken() },
    muteHttpExceptions: true,
  };
  const res = UrlFetchApp.fetch(url, options).getContentText();
  console.log(res);
}
  • 在您的脚本中,您使用的是终结点url = 'https://youtube.googleapis.com/youtube/v3/videos?part=snippet%2CcontentDetails%2Cstatistics&mine=true&key='+ API_KEY;。您的data具有snippetstatus属性。在这种情况下,需要使用https://www.googleapis.com/upload/youtube/v3/videos?part=snippet%2Cstatus的端点。

  • 上传电影文件需要使用multipart/form-data请求。

  • 运行此脚本时,Google Drive上的电影文件将上载到YouTube。

注意:

  • 在当前阶段,即使使用"privacyStatus": "public",上传的视频也不是公开的。关于这一点,你可以在官方文件中看到,如下所示。Ref

    所有在2020年7月28日之后创建的未经验证的API项目的视频都将被限制为私密观看模式。要取消这一限制,每个原料药项目都必须接受审计,以核实是否遵守了服务条款。有关详细信息,请参阅API修订历史记录。

  • 在高级Google服务中使用YouTube API时,可以使用以下简单脚本。Ref

      function myFunction2() {
        const fileId = "###"; // Please set the file ID of movie file on the Google Drive.
        const res = YouTube.Videos.insert({
          "snippet": { "title": "testtitle", "description": "testdes", "categoryId": "19", "tags": ["asdf", "sadfds"] },
          "status": { "privacyStatus": "public" }
        }, ["snippet", "status"], DriveApp.getFileById(fileId).getBlob());
        console.log(res);
      }
    

引用:

这篇关于在Google应用程序脚本中使用YouTube API的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆