📙

YouTuber/VTuberの配信・動画の話題、見どころをデータベース化するwebサービスを作りました!

2022/03/20に公開

こんにちは。
趣味でWebサービスの個人開発をしている、2z(Twitter: @2zn01 )です。

これまでに開発したサービスは、「 これまでに個人開発で作ったサービス 」にまとめていますので、興味がある方はぜひご覧ください。

今回作ったもの

今回はYouTubeの配信・動画の話題、見どころをデータベース化し、タイムライン上で検索できるようにする「切り抜きDB」というサービスを作りました!

何ができるの?

「切り抜きDB」の主な機能としては、以下の通りです。

  • チャンネルを探す

YouTuberやVTuberなど様々なジャンルからチャンネルを探すことができます。
チャンネル名などから検索することも可能です。

チャンネル一覧

  • 動画のタイムテーブルを見る

動画のコメント欄からタイムスタンプ付きのコメントを収集し、動画をタイムテーブルにまとめています。

動画タイムテーブル

  • 動画の話題・見どころを検索して探す

動画のタイムテーブルから話題・みどころを検索することができます。

動画の話題・見どころを検索

  • 切り抜き動画の作成

切り抜く動画をアップロードし、切り抜く箇所を指定すると、

切り抜き箇所の選択

画面録画によって切り抜き動画を作成することができます。

画面録画による切り抜き

使い方の詳細は以下のURLからご確認頂けます。
https://docs.kirinuki.ai/0a6ec2dd656b4c4088fae71ec2d5392a

  • 切り抜き動画の分析

再生数順に並び替えたりすることで、人気のある切り抜き動画を探すことができます。
様々な検索条件を指定することも可能です。

切り抜き動画の分析

  • 切り抜き市場規模の分析

クリエイターごとの切り抜き全体の総再生数、チャンネル登録者数などの統計情報を確認することができます。
これにより、クリエイターごとの切り抜き市場規模の分析をすることが可能です。

切り抜き市場規模の分析

  • 切り抜きチャンネルの上位20位の分析

クリエイターの切り抜きチャンネルの上位20位の統計情報を確認することができます。

切り抜きチャンネルの上位20位の分析

何で作ったの?

2022年1月からひろゆきさんの切り抜きが解禁(黙認)され、YouTubeの切り抜き動画自体がとても話題になりました。もともとVTuber界隈などでは切り抜き動画の文化はありましたが、ひろゆきさんを筆頭に世の中でどんどん話題になっていったように思います。
そこで、切り抜きに関するサービスを作ろうと思い立ちました。

切り抜きをするにあたって、動画内の切り抜きポイントを探すのはとても重要です。

ただ、動画内の切り抜きポイントを探すには、普通にやろうとすると、すべての動画を一通り見て、面白かったところをピックアップせねばならず、とても大変です。
そこで、動画内の話題や見どころをタイムテーブル化・検索できるようにし、切り抜きポイントを簡単に探せるサービスを作ることにしました。

切り抜きポイントの選定

とはいえ、切り抜きポイントを自動で探すのはとても大変です。
機械学習を使って、動画内の音声や映像を解析したりなどの方法はあるかもしれませんが、そのための学習データを用意してモデルを作って解析するなんていうのは、お金も時間もかけてやらなければならず、とても現実的ではありません。

そこで、僕が目をつけたのは、YouTubeのコメント欄です。
YouTubeのコメント欄にはタイムスタンプ付きのコメントをつけている方がいます。
さらには、有志の方が長時間の配信の話題をタイムテーブルとしてまとめ、コメント欄にまとめていることもあります。

コメント欄にわざわざタイムスタンプ付きのコメントを残すということは、その箇所が面白かったり、重要な話題だったり、人に伝えたい(共有したい)内容であるはずです。

そこで、YouTubeの動画のコメント欄のタイムスタンプ付きのコメントをYouTube Data APIを使って収集し、時系列順にし、動画のタイムテーブルとしてまとめればよいのでは!? と考えました。

使用技術

Linux

クラウドのホスティングはGoogle Cloud Platformで、Google Compute Engine(GCE)でサーバを立てています。

Apache

webサーバはApacheを使っています。 Nginxもありますが、Apacheは普段から使っており、設定も把握していたため、いつも通りの安定の選択としました。

MySQL

GCPのCloud SQLを使ってMySQLを立てています。

PHP

サーバ側のプログラムはPHPを使って実装しました。

YouTube Data API

YouTubeのチャンネル、動画、コメント情報を取得するために使用しています。
使い方については、後述させて頂きます。

cron

cronを使って定期的にバッチを走らせてチャンネル、動画、コメントの情報を収集し、動画をタイムテーブルにまとめています。

YouTube Data APIを使った動画のタイムテーブル化

チャンネル、動画、コメントの情報はYouTube Data APIを使って取得・収集しています。
基本的には、以下の順に取得しています。

  1. チャンネル情報の取得
     ↓
  2. チャンネルのプレイリスト情報の取得
     ↓
  3. プレイリストから動画情報の取得
     ↓
  4. 動画のコメント情報を取得
     ↓
  5. タイムスタンプ付けのコメントを正規表現で抽出し、動画をタイムテーブル化

以上の処理の流れをチャンネルごとに(現時点では)1日1回のペースでデータを収集しています。

YouTube Data API

YouTube Data APIのうち、切り抜きDBで使用しているAPIをご紹介します。
パラメータについては、使用しているもののみ掲載しておりますので、詳細は公式ドキュメントの方をご覧ください。

チャンネル情報の取得(Channels: list)

https://developers.google.com/youtube/v3/docs/channels/list?hl=ja

エンドポイント

GET
https://www.googleapis.com/youtube/v3/channels?part=snippet,statistics&key={APIキー}&id={チャンネルID}

リクエストパラメータ

パラメータ 説明
part 取得する情報を指定。"snippet,statistics"を指定した場合、チャンネル情報、統計情報を取得
key APIキーを指定
id チャンネルIDを指定

プレイリスト情報の取得(Playlists: list)

https://developers.google.com/youtube/v3/docs/playlists/list?hl=ja

エンドポイント

GET
https://www.googleapis.com/youtube/v3/playlistItems?part=snippet,contentDetails&maxResults=50&key={APIキー}&playlistId={プレイリストID}

リクエストパラメータ

パラメータ 説明
part 取得する情報を指定。"snippet,contentDetails"を指定した場合、再生リスト情報、コンテンツ情報を取得
key APIキーを指定
playlistId プレイリストIDを指定
maxResults 取得件数を指定

ちなみに、チャンネルの動画一覧を取得したい場合、チャンネルIDの「UU~~~」の部分を「UC~~~」に置き換え、プレイリストIDとして指定することでチャンネルの動画一覧を取得することが可能です。

動画情報の取得(Videos: list)

https://developers.google.com/youtube/v3/docs/videos/list?hl=ja

エンドポイント

GET
https://www.googleapis.com/youtube/v3/videos?part=snippet,contentDetails,statistics&key={APIキー}&id={動画IDのカンマ区切りリスト}

リクエストパラメータ

パラメータ 説明
part 取得する情報を指定。"snippet,contentDetails,statistics"を指定した場合、動画情報、動画コンテンツ情報、統計情報を取得
key APIキーを指定
id 動画IDをカンマ区切りで指定

コメント情報の取得(CommentThreads: list)

https://developers.google.com/youtube/v3/docs/commentThreads/list?hl=ja

エンドポイント

GET
https://www.googleapis.com/youtube/v3/commentThreads?part=snippet&order=relevance&textFormat=plainText&maxResults=100&key={APIキー}&videoId={動画ID}

リクエストパラメータ

パラメータ 説明
part 取得する情報を指定。"snippet"を指定した場合、コメント情報を取得
order 取得するコメントの並び順を指定。"relevance"を指定した場合、評価順
textFormat 取得するフォーマットを指定。"plainText"の場合、プレーンテキストで取得
key APIキーを指定
videoId 動画IDを指定
maxResults 取得件数を指定

YouTube APIのクォータ節約

YouTube APIには使用量(クォータ)の制限があり、デフォルトでは1日当たり10000クォータまでと上限が決まっています。

チャンネル、プレイリスト、動画、コメントなどの単なる情報取得であれば、1処理当たり1クォータ消費ですが、検索の場合は1処理当たり100クォータも消費されてしまいます。
そのため、いかに検索を使用せずに、動画情報を取得するかということがクォータ節約には大事となってきます。

切り抜きDBでは、チャンネルのプレイリスト情報から動画の一覧を取得するという方法をとることで、基本的には検索を使わずに、動画情報を収集するという方法をとっています。

YouTube APIのクォータ申請

YouTube APIの使用量(クォータ)の制限は申請により、増やすことができます。
以下の割り当て増加フォームより申請することが可能です。

私の場合、申請後、1~2か月ほどやり取りして、無事使用量(クォータ)を増やしてもらうことができました。

申請する前に、利用規約・プライバシーポリシーに以下の点は記載しておいた方がよいかと思います。

あとは、APIから取得したデータの取り扱い方(保存データの更新頻度など)、サービス内容に関する質問など、何度かメールでやり取りしました。
私の場合、申請が通ったことにより、10,000 → 510,000 まで使用できるクォータ数を増加させてもらえました。

最後に

今回はYouTubeの配信・動画の話題、見どころをデータベース化し、タイムライン上で検索できるようにする「切り抜きDB」について、ご紹介しました。
以下のURLよりぜひご活用頂ければ嬉しいです!

切り抜きOKを出されている方で、切り抜きDBに追加して欲しいYouTubeチャンネルがありましたら、以下のGoogleフォームからご連絡頂ければ幸いです。
https://forms.gle/rQEVYyXwbvDFT1Jr6

また、このサービスに少しでも興味をもって頂けましたら、ぜひともフォローやいいね、リツイートで応援お願いします!

他には以下のようなサービスを開発・運営していますので、興味があるものがございましたら、ぜひとも使ってみて頂けると嬉しいです!

これまでに開発したサービスは、「 これまでに個人開発で作ったサービス 」にまとめていますので、興味がある方はぜひご覧ください。

Discussion