Мне нужно прочитать текст закрытого субтитра от сторонних, общедоступных видео YouTube в моем java webapp, т.е. я НЕ загружал контент.
В то время как v2 API данных YouTube ограничивал доступ к информации о титрах тому, кто загрузил видео, кажется, это очень странное ограничение на предоставить доступ ко всему, кроме этой части данных. Я ожидал, что это ограничение будет удалено в v3 API, но теперь единственной ссылкой на закрытую подпись является логический метод, подтверждающий, что CC привязан к видео. Даже владелец не может сейчас загрузить его. (Google собирается добавить его, по крайней мере?)
Boolean hasCaptions = video.getContentDetails().getCaption()
Использование API данных YouTube v3 (с помощью Google API Java API). Я смог найти, проверить подлинность и получить ресурсы YouTube (видео, плейлисты, каналы и т.д.). Я могу сделать почти все, что предоставил API. Я просто не могу прочитать текст субтитров.
Я также пробовал неопубликованное временное решение для временной ссылки, но это противоречиво, не работает для более нового контента и имеет много ошибок в кодировке в содержимом, который он охватывает.
Мне интересно, знает ли кто-нибудь о способе получения текста субтитров из видео YouTube из java (а не плагина .js)?
[В худшем случае, кто-нибудь знает библиотеку, которая позволяет мне программно взаимодействовать с YouTube, как браузер, и позволяет мне щелкнуть кнопку транскрипции на экране, и я могу вытащить транскрипт оттуда? Prowser не разрешает взаимодействие с кликом и JxBrowser $1,300 +]
Нижеприведенный код отлично работает и доставляет мне все видеоданные, поэтому мне нужен последний шаг, на который мне нужна помощь. Я включил его здесь, если это будет полезно для всех, кому нужно зайти так далеко.
// Build a YouTube resource
YouTube youtube = new YouTube.Builder(new NetHttpTransport(),
new JacksonFactory(),
new HttpRequestInitializer())
.setApplicationName("caption-retrieval")
.build();
// Create the video list request, it should only return one
// result
YouTube.Videos.List listVideosRequest = youtube.videos().list("id, snippet, contentDetails");
listVideosRequest.setKey(API_KEY));
listVideosRequest.setId(VIDEO_ID);
// Request is executed and video list response is returned
VideoListResponse listVideosResponse = listVideosRequest.execute();
List<Video> videos = listVideosResponse.getItems();
// Since a unique video id is given, it will only return
// one video. Would check if video has been removed in
// production code.
Video video = videos.get(0);
// Read the remaining meta information
title = video.getSnippet().getTitle().trim();
author = video.getSnippet().getChannelTitle();
captionText = ???????
Любая помощь с благодарностью получена.
Спасибо,
Greg.