Я пытаюсь сохранить видео через API YouTube. В основном это уже работает отлично, только за одним исключением: Если я пытаюсь установить status.setPublishAt()
яJava - API для YouTube - setPublishAt на видео приводит к «400 Bad Request - invalidVideoMetadata»
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
.
Спасибо за ваш ответ. Пробовал, но безуспешно. В любом случае, это не объяснит, почему на самом деле работает с просто установкой privacystatus и publishAt на null. – PAWL
@PAWL, если api не показывает privacystatus и опубликованоAt, это означает, что оно равно null. и когда вы отправляете свой запрос на сервер, не меняя его. он работает правильно. – Kumar
@PAWL снова отправляет 400 badRequest – Kumar