Notion で(自分なりの)タスク管理を行う方法?(YouTube編)
前回から「番外編」に入り、まずは、個人的にはタスク管理に関連づけられた話でもあるのですが、本質的にはあまり関係ないとも言える、
ブログ等の更新情報を Notion のデータベースに蓄積し、プロジェクトノートなどで管理していく方法を紹介しました。
実は、今回も、割と似たような内容で、
Web 上の記事の更新を追っていけるなら、例えば、お気に入りの YouTube チャンネルの動画の更新も、同じように扱えるはずですよね?
そもそも、GAS(Google Apps Script)は、その名の通り、Google のサービスなので、むしろ RSS よりも関係が深いと言いますか、
Google カレンダー同様、YouTube の情報を扱うのは、お手のものです。
とは言え、プロジェクトのページなどに、前回と同じようなテーブルを作成し、同じようにデータを追加していくだけ、というのも芸がないので、
今回は、直接「タスクリスト」に、YouTube の動画を観るためのタスクを自動生成してみたいと思います。
では、早速、始めていきましょう!
動画の情報を取得してみる
今回も、前回と同じ流れで、単にデータを取得する手法について説明した後で、API を使って Notion へデータを送信するサンプルの紹介に移ります。
GAS の使い方の概要などは、以前の記事も参考にしてもらうとして、基本的に割愛しますが、
上の記事で、カレンダーの予定を扱うために「Google Calendar API」を追加したのと同様、今回は、YouTube からデータを取得するため、
左のサイドバーにある「サービス」の「+」ボタンから、「YouTube Data API v3」を追加しておいてください。

実を言うと、好きなチャンネルに(最近)アップロードされている動画の情報を取得するには、RSS を使っても良いのですが、
これで、前回のような RSS の解析を行わなくても、専用の関数が使えるので、比較的、楽にデータを処理できるというわけですね。
例えば、以下のようにすれば、24時間前から現在までの間にアップロードされた動画の情報が取得できます。
function parseYouTube() {
const channelId = "UCVFbotUzNYkn6jJ2YlU_ViQ";
const results = YouTube.Channels.list('contentDetails', { id: channelId });
const playlistId = results.items[0].contentDetails.relatedPlaylists.uploads;
const playlistResponse = YouTube.PlaylistItems.list('snippet', { playlistId: playlistId, maxResults: 25 });
const items = playlistResponse.items;
const today = new Date();
const yesterday = new Date(today.getTime() - (24 * 60 * 60 * 1000));
items.forEach((item) => {
const snippet = item.snippet;
const date = new Date(snippet.publishedAt);
if (yesterday <= date) {
const videoId = snippet.resourceId.videoId;
console.log(videoId);
const title = snippet.title;
console.log(title);
}
});
}まぁ、動画のタイトルや更新日時を取得するだけなら、RSS を解析した方が簡単なのでは?と思う人もいるかもしれませんが、
RSS からは取得できないデータを取ってくる方法や、機能なども備えているので、一応、こちらも使えるようになっておくのがオススメです。
例えば、動画の長さ(再生時間)などを取得する API も利用できるので、気になったら、調べてみてください。
ともあれ、この「parseYouTube()」を実行してみると、以下のようなログが出力されましたでしょうか?

初めて実行しようとした時には「承認が必要です」と言われるかもしれませんが、承認の手順も「Google Calendar API」を追加した時と同様です。
ここで、最初に「channelId」で指定しているのが、その名の通り、データを取得する対象となるチャンネルの ID で、
例えば、チャンネルの概要文が書いてあるところの「さらに表示」をクリックすると表示されるポップアップから「チャンネルを共有」ボタンを押し、
ID をコピーして、そのまま貼り付けるのが、簡単だと思います。

ちなみに、前回は「ユタカジン」というマガジンの RSS フィードを具体例として使わせてもらいましたが、
今回は、その「ユタカジン」の記事の1分紹介動画を作成している「タスクシュート認定トレーナー」の方の YouTube チャンネルを、
勝手ながら、さりげなく?例とさせてもらっていますので、ここで、正式にリンクも掲載しておくとしましょう。
Notion にデータを自動追加する
さて、これで、後は、取得したデータを、Notion API を使ってデータベースに追加していくだけです。
Google カレンダーの予定を「タスクリスト」へ追加した時と同じように、
ただし、「今日の予定」ではなく、「昨日アップロードされた動画」を、今日のタスクとして、適当に追加してみましょう!
例えば、最終的なコードは、以下のような感じになるでしょうか?
function parseYouTube() {
const channelId = "UCVFbotUzNYkn6jJ2YlU_ViQ";
const results = YouTube.Channels.list('contentDetails', { id: channelId });
const playlistId = results.items[0].contentDetails.relatedPlaylists.uploads;
const playlistResponse = YouTube.PlaylistItems.list('snippet', { playlistId: playlistId, maxResults: 25 });
const items = playlistResponse.items;
const today = new Date();
const yesterday = new Date(today.getTime() - (24 * 60 * 60 * 1000));
items.forEach((item) => {
const snippet = item.snippet;
const date = new Date(snippet.publishedAt);
if (yesterday <= date) {
const videoId = snippet.resourceId.videoId;
const children = [{ "embed": { "url": "https://www.youtube.com/watch?v=" + videoId } }];
const title = snippet.title;
const data = {
"parent": { "type": "database_id", "database_id": "xxxxx" },
"properties": {
"title": { "type": "title", "title": [{ "type": "text", "text": { "content": title } }] },
"実行日": { "type": "date", "date": { "start": today } }
},
"children": children
};
const options = {
'method': 'post',
'headers': {
'Authorization': 'Bearer secret_XXXXX',
'Content-Type': 'application/json',
'Notion-Version': '2022-06-28'
},
'payload': JSON.stringify(data)
};
UrlFetchApp.fetch('https://api.notion.com/v1/pages', options);
}
});
}今度は、「console.log()」で出力する代わりに、Notion API でデータを送信しています。
例によって、"xxxxx" と "secret_XXXXX" の部分は、「タスクリストデータベースの ID」と「Notion API のシークレット」に書き換えてください。
また、今回は、タスクのタイトルと実行日くらいしか、プロパティを指定しませんでしたが、
ルーチンからタスクを自動生成する時と同様に、自分の方針に合わせて、開始終了時刻やセクションの設定なども、検討してみると良いでしょう。
その上で、再度「parseYouTube()」を実行してみると、以下のように「今日のタスク」に追加されましたかね?

実は、何気に「children」に、動画の埋め込みも含めておいたので、
同じようなコードを書いた場合、各タスクのページを開くと、次のようになっており、そこで動画を再生してしまうことも可能です!

もちろん、動画のコントローラー内の「YouTube」ボタンや、
埋め込み右上の「…」メニュから「オリジナルを表示する」を押すなどすれば、元の YouTube ページを開くこともできます。
特に、PC で観る際には、埋め込みだと(端の辺りをドラッグすることで、多少、サイズは変えられますが)比率として小さすぎる気もしますし、
フルスクリーンで表示するか、必要に応じて、別のタブで開くなどした方がいいかもしれません。

また、次のように書けば、そもそも、埋め込みではなく、Web ブックマークを、つまり、リンクだけを設置しておくことも可能です。
const children = [{ "object": "block", "type": "bookmark", "bookmark": { "caption": [], "url": "https://www.youtube.com/watch?v=" + videoId } }];では、最後に、GAS のトリガーページを開き、定期的に「parseYouTube()」が自動実行されるよう、設定しておきましょう!
今回は、Google カレンダーの予定やルーチンから今日のタスクを自動生成するのと同じように、「日付ベースのタイマー」を使い、
朝起きたら、昨日アップロードされた動画を観るためのタスクが、「今日のタスク」として追加されている状態にしてみます。

前回は、RSS から取得した記事のタイトルやリンクなどを、専用のテーブルに追加していく仕組みを採用しましたが、
当然、同じようにすれば、YouTube の「動画リストデータベース」を作成しておいて、そこへデータを自動的に追加していくこともできるでしょう。
それなら、YouTube のホームページを開くことも、なんなら、チャンネル登録さえ、もはや必要なく、
更新を追って行きたい最低限のチャンネルの動画だけを、Notion 上でチェックできるような環境が整うかもしれません。
一応、もう一度、リンクを貼っておきますが、その辺の仕様や方針は、この記事と合わせて、是非、自分なりに考えてみてください。
まとめ
今回は、YouTube から、お気に入りのチャンネルの更新情報を取得し、自動的に「今日のタスク」に追加しておく方法を紹介しました。
これは、他の娯楽系のタスク全般についても言えることだと思いますが、
こうして、あえてタスクとして追加しておくことで、むしろ「それ以外にはやらない」といった方針を採ることも可能となるのではないでしょうか?
特に、YouTube をダラダラ観てしまうという人は、そもそも「おすすめの動画」が表示されるページを開かないようにするのが「おすすめ」です。
もちろん、自分に言い訳して、ダラダラする時間も大切だと正当化してしまうのも、一つの方法ですが、それなら、別に YouTube でなくても良く、
試しに、実際に YouTube を制限してみると、その中毒性や不必要性が、実感できたりすることもあります。
代わりに、趣味の幅を広げてみるというのも、いいかもしれませんよ?
まぁ、趣味が増えれば、その分、その趣味に関連した動画を観たくなってしまうというオチがつくのですが。
とりあえず、今回は、この辺で。
ではまた。
