YouTubeの動画一覧を取得するツールYouTubeList

YouTubeに登録した動画の一覧を取得する簡易ツールYouTubeListの説明とダウンロードリンクです。

見た目

自分では一切動画持っていないものの、5000件ほど登録のあるYouTubeの動画一覧を作成したい気持ちが盛り上がった。通常は50件ずつちまちま調べないと一覧化出来ないので当機能を作成。正常ケースは実用レベルになったから公開。

仕様

項目
プログラム名YouTubeList
最終更新日2022年02月20日
最新ヴァージョン100
動作環境.Net Core 3.1 が動作する環境 ※開発環境のみ動作確認
依存ライブラリhttps://dotnet.microsoft.com/en-us/download/dotnet/3.1
JSON .NET (NewtonSoft.Json)
開発環境Windows 11
Visual Basic .NET 2019
JSON .NET Version 13.0.1.25517

使用法

1.依存ライブラリに記載の .NET Core 3.1 をダウンロード→インストール

2.https://support.google.com/youtube/answer/3250431?hl=jaを確認し、動画情報を取得したいYouTubeアカウントID or チャンネルIDを取得

3.Google Cloud Platform でYouTube Data API v3を有効化しAPI KEYを取得する。

※図中で使用するAPIを選ぶことになる。「一般公開データ」でOK

4.プログラムを起動し、API Key, ユーザーID/チャンネルIDに「2」「3」ステップの結果を入力→「チャンネル情報を取得」

5.「チャンネル」にチャンネルIDを選択

すると、3分に一回ずつデータを取ってきてリスト表示にたまるから必要分溜まったらクリップボードにコピーすればOK。

注意事項

  • このソフトウェアを使用したことによって如何なる不利益を被っても、作者には一切の責任がありません。自己責任でご利用下さい。
  • 作者はこのソフトウェアに不具合が生じた際に修正する義務を負いません。
  • 『動けばOK』レベルなのでクリップボードにヘッダは付けてくれない、失敗時のエラーハンドリングもないレベルの不親切さです。初心者向けではありませんしサポートはありませんので気を付けて使ってください。

ダウンロード

日付ダウンロードリンクヴァージョンコメント
2022/02/20YouTubeList 100100Release

VB .NET で複雑にネストされたJSONデータを取り扱う

Visual Basic .NETでJSONデータを取り扱うのにJson .NETが便利。JSON文字列データをDeserialize時の格納クラスを円滑に定義するための備忘録である。

※Json .NET:NuGet上パッケージ名は NewtonSoft.Json

課題

Json .NET を用いると、以下コードのようにSourceのJSON文字列をMyClassの形式に格納出来る。

Dim StructuredData = JsonConvert.DeserializeObject(Of MyClass)(source)

しかしこのMyClassをどう定義するかが初心者には難しい。

もっと具体的に言えば、YouTube Data API V3のデータを取り扱おうと思っても、入れ子にされたデータに対してどうクラスを定義すればStructuredDataに格納できるかに悩む。複雑なデータをお手軽快適に取り扱うのが課題だった。

結論

直下のデータ

基本的なデータの取り扱い

配列ではない個別項目にアクセスしたい場合はそれぞれプロパティを定義する。つまり、以下例であればPublic Property kind As String と定義し Debug.Print (StructuredData.kind) という形で使える。

{
__”kind”: “youtube#playlistItemListResponse”,
__”etag”: “XXX_XXXXXXXXXXXXX_X-XXXXXXX”,
__”nextPageToken”: “XXXXXXXXXXXXXX”,

Public Class MyClass
__Public Property kind As String
__Public Property etag As String
__Public Property nextPageToken As String
End Class

同じ階層の全データが同じデータ型のKey-Valueの形になっている場合

以下 pageInfo 項目内、totalResults, resultsPerPage は両方とも String – Long 構成とみなせる。

{
__”kind”: “youtube#playlistItemListResponse”,
__”etag”: “XXX_XXXXXXXXXXXXX_X-XXXXXXX”,
__”pageInfo”: {
____”totalResults”: 11,
____”resultsPerPage”: 10
__}
}

この場合はPublic Property kv As Dictionary(Of DataTypeKey, DataTypeValue) の形で定義すればDebug.Print (kv(“kind”))のように必要項目のみKEY指定して扱える。

Public Class MyClass
__Public Property pageInfo As Dictionary(Of String, Long)
End Class

更に下の階層のデータを持つ項目がある場合・データ型が異なる場合

Public Class MyClass
__Public Property kind As String
__Public Property etag As String
__Public Property pageInfo As Dictionary(Of String, Long)
End Class

個別にプロパティを設けて厳密にアクセスしたい場合は個別に項目を定義する。つまり、Public Property kind As String と定義し Debug.Print (StructuredData.kind) という形で使える。

配列データ

変数名の右に [ 記号でくくってある場合は配列データである。

.NET で規定されている型のデータが配列になっている場合

以下構成であれば Public Property name As List(Of String) で定義すれば良い。 ※YouTubeAPI出力になかったので動作未確認。

__”name”: [
____”AAA”,
____”BBB”
__],

Public Class MyClass
__Public Property name As List(Of String)
End Class

.NET で規定されていない型のデータが配列になっている場合

対象の配列(下の例であればitems, snippet)それぞれをまるまるクラスとして定義し、上述の応用で配列のやり方(Public Property items As List(Of NestedClass), Public Property snippet As NestedNestedClass)で配列項目または個別項目と決めればよい。

{
__”kind”: “youtube#playlistItemListResponse”,
__”etag”: “XXX_XXXXXXXXXXXXX_X-XXXXXXX”,
__”nextPageToken”: “XXXXXXXXXXXXXX”,
__”items”: [
____{
______”kind”: “youtube#playlistItem”,
______”etag”: “XXXXXXXXXXXXXXXXXXXX_XXXXXX”,
______”id”: “XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX”,
______”snippet”: {
________”publishedAt”: “2022-02-20T17:23:00Z”,
________”resourceId”: {
__________”kind”: “youtube#video”,
__________”videoId”: “XXXXXXXXXXX”
________},

Public Class MyClass
__Public Property kind As String
__Public Property etag As String
__Public Property nextPageToken As String
__Public Property items As List(Of NestedClass)
End Class

Public Class NestedClass
__Public Property kind As String
__Public Property etag As String
__Public Property id As String
__Public Property snippet As NestedNestedClass
End Class

Public Class NestedNestedClass
__Public Property publishedAt As Date
__Public Property resourceId As Dictionary(Of String, String)
End Class

調査実施環境:

  • Windows 11
  • Visual Studio .NET 2019
  • .NET Core 3.1
  • Json .NET .NET Standard 2.0 Version 13.0.1.25517