YouTubeの動画や曲が公式のものかを判定する

目次

なぜ判定する必要があるか

そもそも、バカだった頃に非公式の曲をポコポコプレイリストに入れていた自分が悪いんだけれども理由は大体この3つ。

  • 公開しているプレイリストに非公式の動画が入っていると恥ずかしい
  • 非公式の動画はいつ消えてしまってもおかしくない
  • 公式の方が音質が良い

100%は無理

ぶっちゃけ100%自動で判定するのは不可能という事は調査前から薄々分かっていたのですが、やっぱりいろいろな要因から無理そうでした。 判定後に非公式動画の情報から公式動画にどうにかして辿り着ければ嬉しいな〜とか思っていたのですが、めちゃくちゃ厳しいと思います。

方法

アプローチとしては、可能な限り信頼性の高い方法で公式動画を判定し、残った非公式の疑いがあるものを人間が手動で確認していくようにします。

結果的に信頼性の極めて高い判定方法は2つ確認出来ました。 他の判定方法にはすり抜けの可能性がありそうなため各自調査の上導入すれば良いと思います。

チャンネル名

チャンネル名が - Topic で終了しているかによって判定します。

- Topic で終了しているチャンネルはYouTube Musicによって自動生成されたチャンネルです。 こちらの方法は最も信頼性が高く、またAPIからは動画と一緒にチャンネル名も取得できるため高速に処理出来ます。

サムネイル画像のサイズ

動画のサムネイル画像が正方形かどうかによって判定します。

これはYouTube MusicのAPIから取得出来るサムネイルのサイズを見ます(YouTubeのAPIでは余白部分を含んだサムネになる)。 正方形のサムネイルであるものはYouTube Musicにアップロードされた公式の曲です。

YouTube Musicは公式でAPIドキュメントやパッケージがサポートされていないため、サードパーティライブラリを使用してAPIを利用します。 一通り見てみた感じ、JSではこれが良いと思います。 https://github.com/zS1L3NT/ts-npm-ytmusic-api

アーティストの topAlbums と topSingles のサムネイルを確認すると良い感じでした。 正方形のものが存在していればそのアーティストは公式であり、判定対象の動画も公式であると判定できます。 判定対象のサムネイルを確認する必要はありません。判定対象のサムネイルが正方形の場合、チャンネル名によって既に判定できているはずだからです。

まとめ

上記の方法によって、殆どの動画を公式かどうか判定できるようになりました。 もっと良い方法があればGitHubで教えてください。

実際にJSで判定を行うスクリプトはこちら。 https://github.com/waonpad/youtube-playground/blob/b1db83c5e0343bf036f2ba98ad2e79c030178405/scripts/check-official.ts

セットアップを済ませて、

bun run scripts/get-all-videos-in-playlist.ts -i <プレイリストID>
bun run scripts/check-official.ts <プレイリストID>

以上、プレイリストを浄化しましょう。