見出し画像

ウェザーロイドのYouTube投稿日カレンダーの作成方法

動画投稿日をGoogleカレンダーで見る

YouTube「ウェザーロイド Airi(ポン子)」チャンネルの2023年7月31日までの動画の投稿日をカレンダーにしました。

Googleカレンダー 「ウェザロYouTubeカレンダー
スプレッドシート 「ウェザロYouTubeカレンダーデータ」(元データなど)

備忘録も兼ねて作成方法を書いておきます。スプレッドシートもプログラミングも初心者なので結構無理やり作成しましたが、YouTubeの仕様に関するものについては今後同様のものを作る人に役立つのではないかと思います。

目的
「ウェザーロイド Airi(ポン子)」チャンネルの過去の動画・生放送の投稿日時をGoogleカレンダーで見る

☆全体の流れ
(1)YouTube Data APIのPlaylistItems: listでsnippetを指定してチャンネルの全動画のpublishedAtを取得
(2)YouTube Data APIのVideos: listでliveStreamingDetailsを指定して生放送の開始時刻を取得
(3)スプレッドシートなどに入力
(4)csvでGoogleカレンダーにインポート

チャンネルID

前提としてYouTubeチャンネルのチャンネルIDが必要です。UCで始まる24文字でできており各チャンネルに固有のIDです。以前は普通にチャンネルのURLの末尾に表示されていましたが、今ではハンドルURLばかり表示されるようになってしまいました。

確認方法としてはチャンネルのページでCtrl+Uを押してソースを見てCtrl+Fで「/channel」と検索するのが早いと思います。ウェザーロイドの場合はUCzrw4K7D9Ti3FP8WMTVPImgがチャンネルIDです。

(1)チャンネルの全動画のpublishedAtを取得

YouTube Data APIを使います。

普通にAPIのレファレンスを読むとSearch: listを用いたいところですが、これは実際に使ってみると11ページ目で止まり、501件までしか取得することができません。しかもかなり取得漏れします。

そこでPlaylistItems: list「~さんのアップロード動画」という再生リストを使います。

YouTubeチャンネルにはそれぞれ「~さんのアップロード動画(https://www.youtube.com/playlist?list=UU+22文字)」という再生リストが存在します。この再生リストにはショート・動画・ライブを合わせた全ての公開動画が含まれています。

UU+22文字はチャンネルIDの最初の2文字をUCからUUに変えたものです。
ウェザーロイド Airi(ポン子)チャンネルの場合チャンネルIDが"UCzrw4K7D9Ti3FP8WMTVPImg"なので
https://www.youtube.com/playlist?list=UUzrw4K7D9Ti3FP8WMTVPImg
のようになります。

そして以下のようにリクエストします。(これはブラウザ上での場合です。多数のプログラミング言語にライブラリがあります。)

https://www.googleapis.com/youtube/v3/playlistItems?part=snippet&playlistId=UUzrw4K7D9Ti3FP8WMTVPImg&maxResults=50&pageToken="nextpageTokenに書いてある値"&key="自身のAPIキー"

こうすることで全動画が入っている再生リストから動画情報を取り出すことができます。YouTube Data APIでは一度に情報を最大50件まで取得でき、nextPageTokenを使って以降の情報を取っていく形になります。APIキーには自身で取得したキーを入れてください。

得られたデータからpublishedAtの項目を見ます。動画はそのまま投稿日時のようです。しかし、生放送のpublishedAtは配信終了後しばらく経ってからの時刻になってしまっています(アーカイブ化が完成した時刻?)。
生放送は配信開始時刻が欲しいので(2)に進みます。

(2)生放送の開始時刻を取得

YouTube Data APIのVideos: listを使います。

https://www.googleapis.com/youtube/v3/videos?part=liveStreamingDetails&id="動画ID群"&key="自身のAPIキー"

partには色々指定できますが、このうちliveStreamingDetailsを使います。

動画IDはカンマ区切りで羅列することができます。私は他の方法で991本の動画ID集を作成しましたが、(1)の方法でIDも取得できると思います。

一度に51個以上の動画IDを並べて指定するとエラーになるようなので
50個ずつ動画IDをカンマ区切りで入力し、20回実行しました。

結果目的としていたactualStartTime(配信開始時刻)を手に入れることができました。actualEndTime(配信終了時刻), scheduledStartTime(予定開始時刻)も得られるので活用しましょう。

*(1), (2)で目的のデータを抽出して列に揃えた方法

(1)に関しては似たようなことをしている方のwebページにあったGAS(Google Apps Scripts)をいじって使い(pageTokenは手作業で入力)、(2)はブラウザで取ってきたjsonテキストからcsvファイルにするコードをChatGPTに書いてもらいpythonで実行しました。

このあたりは私がプログラミングがさっぱり分からないため無理やりです。
詳しい方はもっと楽にできると思います。

(3)スプレッドシートに入力

(再掲)スプレッドシート ウェザロYouTubeカレンダーデータ

(1)で取得した情報からは動画タイトルとpublishedAtを列に並べます。

(2)で取得した情報からはactualStartTime, actualEndTime, scheduledStartTimeを列に並べます。
それぞれ配信開始時刻、配信終了時刻、予定開始時刻を指します。

どの値も世界標準時でISO 8601規格になっているのを日本時間に直し、表示もスプレッドシートが認識できる形にします。


2023-07-20T12:59:33Z のようになっているのを
2023/07/20 21:59:33 のような形に変換します

Googleカレンダーにcsvとしてインポートするには最初の行をSubjectやStart Dateなどのヘッダーにする必要があります。

Googleカレンダーヘルプ Google カレンダーに予定を読み込む

2行目から各列に以下のような値を入力しました。
Subject 動画タイトル

Start DateとStart Time
関数を使って動画はpublishedAt、生放送はactualStartTimeを当てはめ日付と時刻に分割しました。

End DateとEnd Time
actualEndTimeを日付と時刻に分割しました。動画の場合は空欄になります。

Description
動画のURLのほか、scheduledStartTimeをおまけに付けておきました。

(4)csvでGoogleカレンダーにインポート

表が完成したらcsvファイルとしてダウンロードし、Googleカレンダーにインポートすることができます。

完成

生放送は開始時刻と終了時刻がそのまま予定の時間になっています。
動画は投稿時間しかないのでその後1時間を予定の時間にしました。

(再掲)Googleカレンダー ウェザロYouTubeカレンダー

参考&参考になりそうなページ

YouTube Data API リファレンス
PlaylistItems: list
Videos: list
Googleカレンダーヘルプ Google カレンダーに予定を読み込む

YouTubeDataAPIでライブ配信の開始日時を取得したい
YouTube Data APIをGoogle Apps Script(GAS)から使おう
GASでYouTubeのデータを取得してスプレッドシートに表示する方法を解説!
あおぎり高校配信スケジュール (非公式)
特定のチャンネルの配信予定日時を YouTube Data API から取得する
YouTube Data APIを使ってチャンネルに含まれる動画を取得する流れ

コメント

ログイン または 会員登録 するとコメントできます。
ウェザーロイドのYouTube投稿日カレンダーの作成方法|なよーて
word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word

mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1