Java Web アプリケーションで公開されているサード パーティの YouTube ビデオのクローズド キャプション テキストを読む必要があります。つまり、コンテンツをアップロードしていません。
YouTube Data API の v2 では、キャプション情報へのアクセスをビデオをアップロードした人に制限していましたが、この 1 つのデータ以外のすべてにアクセスできるようにするのは非常に奇妙な制限のように思えます。API の v3 でこの制限が削除されることを期待していましたが、現在、クローズド キャプションへの唯一の参照は、CC がビデオに添付されているかどうかを確認するブール メソッドです。所有者でさえ、今はダウンロードできないようです。(少なくとも、Google はそれを元に戻すつもりですか?)
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 = ???????
どんな助けでもありがたく受け取られます。
ありがとう、
グレッグ。