我使用YouTube API以编程方式将视频上传到YouTube。我的部分视频需要标注年龄限制,因此我想指定AgeGating视频属性。 当指定video.setAgeGating(gating)时,还必须提供相应的部件名称,否则我会收到以下错误
{
"code" : 400,
"errors" : [ {
"domain" : "youtube.part",
"location" : "part",
"locationType" : "parameter",
"message" : "ageGating",
"reason" : "unexpectedPart"
} ],
"message" : "ageGating"
}
documentation表示以下可用部分:
snippet,contentDetails,fileDetails,liveStreamingDetails,player, 处理详细信息,记录详细信息,统计信息,状态,建议, 和topicDetails。
在我的情况下,它们都没有返回相同的 unexpectedPart 错误消息,因此我尝试了自定义 ageGating 部件名称,但这次是响应是:
{
"code" : 403,
"errors" : [ {
"domain" : "youtube.common",
"message" : "Forbidden",
"reason" : "forbidden"
} ],
"message" : "Forbidden"
}
YouTube API errors documentation page。
中未列出此错误类型这是我的代码示例:
Video videoMetadata = new Video();
// set status
VideoStatus status = new VideoStatus();
status.setPrivacyStatus("public");
videoMetadata.setStatus(status);
// set metadata snippet
VideoSnippet snippet = new VideoSnippet();
snippet.setTitle("Test Upload");
snippet.setDescription("YouTube Data API V3");
List<String> tags = new ArrayList<String>();
tags.add("YouTube Data API V3");
tags.add("Test Upload");
snippet.setTags(tags);
videoMetadata.setSnippet(snippet);
// set video content
InputStreamContent videoContent = new InputStreamContent(
VIDEO_FILE_FORMAT, new BufferedInputStream(new FileInputStream(videoFile)));
videoContent.setLength(videoFile.length());
// set age gating
VideoAgeGating gating = new VideoAgeGating();
gating.setRestricted(true);
videoMetadata.setAgeGating(gating);
YouTube.Videos.Insert videoInsert = youtube.videos()
.insert("ageGating,snippet,statistics,status", videoMetadata, videoContent);
Video returnedVideo = videoInsert.execute();
是否禁止为新视频指定年龄限制,或者此案例中是否还有其他视频部分名称?
答案 0 :(得分:0)
contentDetails应该可以解决问题,这里是contentDetails下的资源。 https://developers.google.com/youtube/v3/docs/videos#contentDetails.contentRating.ytRating
答案 1 :(得分:0)
阅读文档似乎youtube Age Restricted属性是另一个Content Rating
如果我理解文档,则无法通过YouTube API设置此属性。我知道您在请求正文中必须POST video Resource,并且您只能设置视频资源的some of the properties
您可以为这些属性设置值:
snippet.title
snippet.description
snippet.tags[]
snippet.categoryId
status.privacyStatus
status.embeddable
status.license
status.publicStatsViewable
status.publishAt
recordingDetails.locationDescription
recordingDetails.location.latitude
recordingDetails.location.longitude
recordingDetails.recordingDate
您可以将此属性读取为:contentDetails.contentRating.ytRating = "ytAgeRestricted"但看起来您无法在POST请求正文中的视频资源中将此属性发布到Youtube API
{
...
"contentDetails": {
...
"contentRating": {
"ytRating": "ytAgeRestricted"
}
...
}
}