はじめに
YouTubeの動画情報を取得したり、検索結果を扱ったりしたいとき、真っ先に思い浮かぶのは公式のYouTube Data APIかもしれません。しかし公式APIにはAPIキーの発行やクォータ(利用上限)の制約があり、ちょっとした個人開発や検証用途にはハードルが高いと感じたことはないでしょうか。
そんな悩みを解決してくれるのが、今回紹介するYouTube.jsです。YouTubeアプリやWebサイトが内部的に利用している「InnerTube」というAPIをJavaScriptから直接呼び出せるようにしたクライアントライブラリで、APIキーなしで動画情報や検索、字幕データなどを取得できます。
YouTube.jsとは
YouTube.jsは、YouTubeの内部API「InnerTube」をリバースエンジニアリングして作られたJavaScriptクライアントです。npmにはyoutubei.jsという名前で公開されており、LuanRT氏によって継続的にメンテナンスされています。
Node.jsだけでなく、Deno、そしてfetchやEventTargetといった標準APIが使えるモダンブラウザ上でも動作するのが特徴です。なお、本ライブラリはYouTubeやその関連会社が公式に提供・後援しているものではない点には留意しておきましょう。
主な特徴
- APIキー不要 - InnerTubeを直接叩くため、公式APIキーの発行やクォータ管理が不要
- 豊富な機能 - 動画情報の取得、検索、再生リスト、字幕、コメント、ライブチャットなど幅広いデータにアクセス可能
- マルチランタイム対応 - Node.js、Deno、ブラウザ環境のいずれでも利用できる
- ストリーミング対応 - 動画・音声のフォーマット情報を取得し、DASHマニフェストへの変換にも対応
インストール
npm、yarn、Denoのいずれからでもインストールできます。
# npm
npm install youtubei.js@latest
# yarn
yarn add youtubei.js@latest
# Deno
deno add npm:youtubei.js@latest
最新の開発版を試したい場合は、GitHubから直接インストールすることも可能です。
npm install github:LuanRT/YouTube.js
基本的な使い方
まずはInnertubeインスタンスを生成するところから始めます。これがYouTube.jsを使う上でのエントリーポイントです。
import { Innertube } from 'youtubei.js';
const youtube = await Innertube.create();
生成したインスタンスを使って、動画の詳細情報を取得してみましょう。
import { Innertube } from 'youtubei.js';
const youtube = await Innertube.create();
// 動画IDを指定して情報を取得
const videoInfo = await youtube.getInfo('dQw4w9WgXcQ');
console.log(videoInfo.basic_info.title);
console.log(videoInfo.basic_info.author);
console.log(videoInfo.basic_info.view_count);
getInfoはタイトルや投稿者、再生回数だけでなく、利用可能な動画・音声フォーマットや字幕トラックなど、動画に関するさまざまな情報をまとめて返してくれます。
実践的なユースケース
キーワード検索
searchメソッドを使えば、キーワードによる動画検索も簡単に実装できます。
import { Innertube } from 'youtubei.js';
const youtube = await Innertube.create();
const results = await youtube.search('JavaScript チュートリアル', {
type: 'video'
});
for (const video of results.videos) {
console.log(`${video.title} (${video.id})`);
}
字幕データの取得
動画情報から字幕(キャプション)トラックを取得すれば、文字起こしデータを扱うアプリケーションにも活用できます。
import { Innertube } from 'youtubei.js';
const youtube = await Innertube.create();
const videoInfo = await youtube.getInfo('dQw4w9WgXcQ');
const captionTracks = videoInfo.captions?.caption_tracks ?? [];
for (const track of captionTracks) {
console.log(`言語: ${track.name.text} (${track.language_code})`);
}
ストリーミング用マニフェストの生成
ブラウザで動画を再生したい場合は、取得した動画情報からDASHマニフェストを生成し、dash.jsのようなプレーヤーに渡すことができます。
import { Innertube } from 'youtubei.js';
const youtube = await Innertube.create();
const videoInfo = await youtube.getInfo('dQw4w9WgXcQ');
// DASH形式のマニフェストを生成
const manifest = await videoInfo.toDash();
このマニフェストをdash.jsなどのプレーヤーライブラリに渡すことで、ブラウザ上でのストリーミング再生を実現できます。
まとめ
YouTube.js(youtubei.js)は、YouTubeの内部API「InnerTube」をJavaScriptから扱えるようにすることで、公式APIキーやクォータの制約を気にせずに動画情報の取得や検索、字幕処理を実現できるライブラリです。Node.js・Deno・ブラウザのいずれでも動作するため、サーバーサイドの分析ツールからクライアントサイドの動画プレーヤーまで幅広い用途に活用できます。
まずはInnertube.create()から始めて、getInfoやsearchといった基本メソッドを試しながら、公式ドキュメントでより高度な機能を探ってみてはいかがでしょうか。
