YouTube Data API 解説 ~第4回 Excel VBAによるVideoIDの取得~

51_YouTube API

今回は正確にはYouTube Data APIを活用する話ではなく、YouTube内のチャンネルIDをすべてVBAを使って取得する話になります。

VideoID取得にYouTube Data APIを使わない理由

YouTube Data APIのSearchリソースを使ってもチャンネル内動画のVideoIDを取得することができるのですが、1回のリクエストで取得できる数に制限があるので、動画の多いチャンネルからVideoIDを取得しようとすると何度もリクエストを実行する必要があり、さらに何度もリクエストする際に動画の抜け漏れが発生する可能性があるようで、またさらにSearchリソースのリクエストはYouTube Data APIの1日の利用制限数を大幅に消費してしまうなど、あまりよいことがないので、YouTube Data APIを使用しないで、VideoIDを取得する方法を取ることにしました。

チャンネル内のすべてのVideoIDを含んだHTMLファイルの作成

OCHA NORMA公式チャンネルの全Video IDを取得することを例に以下に説明します。WebブラウザはGoogle chromeを使います。

Google chromeで新しいタブを開きOCHA NORMA公式チャンネルの動画ページを表示させます。

表示させた後、画面右上のメニューを開き「その他メニュー」「デベロッパーツール」を選択すると、画面右に以下のような情報が表示されます。

この状態で、「動画ページ」画面を下にスクロールさせていきます。最下部までスクロールすると、チャンネル内のすべての動画が表示された状態になります。

この状態で画面右上部のElementsの枠にある

▶<div id=”content” class=”style-scope ytd-app”>…</div>=$0

と書かれた箇所を選択すると画面左がグレーアウトします。この状態で右クリックしていき

「copy」「copy element」を選択するとクリップボードに大量の動画情報がコピーされるので、それをテキストエディターまたはメモ帳にペーストしテキストファイルとして保存します。そうすると、OCHA NORMA公式チャンネルの場合は7000行強のテキストファイルが作成されます。この中に、OCHA NORMA公式チャンネルのVideoID情報がすべて含まれているので、後はExcel VBAを使ってここからVideoIDを抽出していきます。

なお、この作業は色々な画面を開いた後のタグでやるとなぜか余計な動画情報が混ざってしまうので、必ず新しいタグで行ってください。

VideoIDを抜き出すExcelVBA

作成したテキストファイルにはすべての動画のサムネを表示させる情報が含まれているのですが、それは以下のような画像アドレスを使って表示しています。

src="https://i.ytimg.com/vi/5cAqc5MyuI8/hqdefault.jpg

YouTubeのサムネ画像のアドレスは上記のように規則性があり、

https://i.ytimg.com/vi/【VideoID】/hqdefault.jpg

となっています。なので、余談になりますが、VideoIDさえ知ってればサムネ画像を自在に自身のWebページに表示させることが可能です。

そのため、VideoIDを抜き出すのには正規表現を使って、サムネ画像アドレスからVideoIDを抜き出せばよいと、なります。正規表現については、説明がとても面倒なのと、詳しく説明しているWebページが山ほどあるので、ぜひググって調べてみてください。

正規表現を使うための事前準備

Excel VBAで正規表現を使うにはRegExpオブジェクトを使うのですが、そのためには事前準備があって、

VBAエクスプローラにて「ツール」「参照設定」を開いて「Microsoft VBScript Regular Expressions 5.5」を参照可能なライブラリとして登録する必要があります。

VideoIDを抽出するサンプルプログラム

VideoIDを抽出するサンプルプログラムは以下のようになります。

Sub Sample03()

    Dim i As Long
    Dim FileName As String
    Dim fileNumber As Long
    Dim fileLine As String
    Dim j As Long
    Dim idx As Long
 
 
   '正規表現オブジェクトの設定
    Dim reg As Object
    Set reg = CreateObject("VBScript.RegExp")
    With reg
        .Pattern = ".*?https://i.ytimg.com/vi/(.*?)/.*?"  '正規表現パターン
        .IgnoreCase = False   '大文字と小文字を区別する
        .Global = True        '文字列全体を検索するか(True)
    End With
     
    '検索結果を受け取るMatchesコレクションを定義
    Dim Matches As MatchCollection
    'MatchesCollectionを受け取るMatchオブジェクトを定義
    Dim match As Variant

    'テキストファイルを開いてVideoIDを取得
    fileNumber = FreeFile
    FileName = Application.GetOpenFilename("Txxtファイル,*.txt")

   Open FileName For Input As fileNumber
    i = 4  'Excelシートの4行目から
    j = 1  '通番
        
    Do While Not EOF(fileNumber)
        Line Input #fileNumber, fileLine
         
        If reg.Test(fileLine) Then 'パターン判定
           Set Matches = reg.Execute(fileLine)
            
           For Each match In Matches
               Cells(i, 1).Value = j
               Cells(i, 2).Value = match.SubMatches(idx)
           Next match
            
           i = i + 1
           j = j + 1
        
        End If

   Loop
    Close #fileNumber

End Sub

実行イメージはこんな感じです。

マクロ(Sample03())を登録した実行ボタンを押すとテキストファイルの選択画面が表示されるのでそこで先ほど作成したテキストファイルを選択すると

A4セル以降に通番、B4セル以降にVideoIDが次々と表示されます。

OCHA NORMA公式チャンネルの動画数はこの作業を実施した時点では71個なので、このように71個のVideoIDが表示されれば成功です。

ただ、この作業は大容量のテキストファイルを読み込む作業になるのでかなり時間がかかります。なるべく他のアプリを実行させず、CPU,メモリーに余裕のある状態で実行した方がよいです。

VideoIDさえわかれば、後は第3回で説明した方法でYouTube Data APIを使ってリクエストURLを発行すれば各画像の詳細情報が取得できて動画情報一覧のExcelシートを作成することができます。

動画の詳細情報さえ取得できれば、この情報を自在に加工して色々なことができるようになります。

むすび

以上、4回にわたってYouTube Data APIの活用方法について説明してきましたが、割と簡単に活用できそうなことがわかっていただけたのではないかと思います。僕の記事ではサンプルプログラムとして取り上げたExcel VBAの内容についてほとんど説明しませんでしたが、短いコードなので、疑問に思ったことがあれば、Excel VBAの解説Webページは大量にあふれているのでググればすぐ解決すると思います。

また、Excel VBAではかなり短いソースコードでもかなりのことができることがわかっていただけたと思います。まだExcel VBA、さらにはプログラミング未経験の人もこの機会にプログラミングに挑戦してみることをお勧めします。プログラミング上達のコツは作りたいものをなるべく具体的にイメージしてその実現のために必要なことを理解していくことだと思います。自分の作りたいものがはっきりしていれば、それに向けた技術習得のスピードはものすごく早くなります。

ここまで書いた記事が、みなさんのYouTube Data APIの理解のための参考になれば幸いです。YouTube Data APIを活用する人が増えて、星の数ほど大量にあるYouTube動画を探しやすくするようなWebページを作ってくれる人が増えてくれることを願っています。

コメント

タイトルとURLをコピーしました