在Google应用程序脚本中使用YouTube API [英] using youtube API with Google Apps Scripts
问题描述
无法测试我的脚本。 如果您能帮上忙,这里的代码-它不工作 根据文档-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);
}
我的问题-
- 将视频放在哪里?
- 我收到的错误的解决方案:
{错误={消息=‘状态’,代码=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
具有snippet
和status
属性。在这种情况下,需要使用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屋!