Java - YouTube API - setPublishAt on video 导致"400 Bad Request - invalidVideoMetadata"



我试图通过YouTube API保存视频。基本上它已经工作得很好,只是有一个例外:如果我试图设置status.setPublishAt(),我得到

400 Bad Request
{
  "code" : 400,
  "errors" : [ {
  "domain" : "youtube.video",
  "location" : "body",
  "locationType" : "other",
  "message" : "The request metadata is invalid.",
  "reason" : "invalidVideoMetadata"
} ],
"message" : "The request metadata is invalid."
}

代码如下:

YouTube.Videos.List listVideosRequest = M_YOUTUBE.videos().list("snippet,status").setId(_dbVideo.getYoutubeId());
VideoListResponse listResponse = listVideosRequest.execute();
List<Video> videoList = listResponse.getItems();
if (videoList.isEmpty()) {
    return false;
}
Video video = videoList.get(0);
VideoStatus status = video.getStatus();
status.setPrivacyStatus(_dbVideo.getPrivacyStatus()); // "private"
String sPublishedAt = _dbVideo.getPublishedAt();
// sPublishAt is in ISO 8106: "2016-10-28T10:01:00.000+02:00"
if (sPublishedAt != null && sPublishedAt != "") {
    // this line leads to the bad request.
    status.setPublishAt(new DateTime(sPublishedAt));
} else {
    status.setPublishAt(null);
}
VideoSnippet snippet = video.getSnippet();
String sTitle = _dbVideo.getTitle();
String sDescription = _dbVideo.getDescription();
String sTags = _dbVideo.getTags();
...
snippet.setTitle(sTitle);
snippet.setDescription(sDescription);
snippet.setTags(tagList);
snippet.setCategoryId(_dbVideo.getCategoryId());
YouTube.Videos.Update updateVideosRequest = M_YOUTUBE.videos().update("snippet,status", video);         
updateVideosRequest.execute();

对于上传过程,我使用的大多是相同的代码,它在那里工作。如果我决定不使用日期设置publishAt属性,而是将其设置为null,它也可以正常工作。我错过什么了吗?

更新:该行为仅在视频设置为public一次时发生。如果我决定将其设置回private并设置一个新的publishAt,我将获得BadRequest

您必须发送所有状态值,否则更新方法将认为您试图清空它们。你有send setPrivacyStatus和publish。但是您应该将所有其他参数发送到您的请求。另外,如果你发送的发布时间太接近当前时间,它会显示badRequest (400) invalidPublishAt。试着用60分钟。

相关内容

  • 没有找到相关文章

最新更新