我需要在我的 java webapp 中阅读来自第 3 方、公开可用的 YouTube 视频的隐藏式字幕文本,即我尚未上传内容。
虽然YouTube 数据 API 的 v2 将字幕信息的访问权限限制为上传视频的人,但允许访问除这一数据之外的所有内容似乎是一个非常奇怪的限制。我预计会在 API 的 v3 中删除此限制,但现在对隐藏式字幕的唯一引用是一种布尔方法,用于确认 CC 是否附加到视频。即使是所有者现在似乎也无法下载它。(谷歌至少会把它加回来吗?)
Boolean hasCaptions = video.getContentDetails().getCaption()
使用 YouTube Data API v3(使用Google Java API 客户端),我已经能够找到、验证和检索 YouTube 资源(视频、播放列表、频道等)。我几乎可以完成 API 提供的所有操作,但我无法阅读实际的标题文本。
我还尝试了未发布的定时文本链接解决方法,但这不一致,不适用于较新的内容,并且在它所涵盖的内容中存在许多编码错误。
我想知道是否有人知道从 Java(不是 .js 插件)的 YouTube 视频中检索字幕文本的方法?
[ 最坏的情况,有没有人知道一个库,它允许我像浏览器一样以编程方式与 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 = ???????
任何帮助都将不胜感激。
谢谢,
格雷格。