Np-Urのデータ分析教室

オーブンソースデータなどWeb上から入手できるデータを用いて、RとPython両方使って分析した結果を書いていきます

YouTubeの視聴回数をGAS(Google Apps Script)から取得してSlackに送りたいんです

本記事は、Google Apps Script Advent Calendar 2020の21日目の記事です。
投稿遅れて申し訳ございません。


最近、エンジニアの中でYouTubeに動画をアップロードする方が増えています。
私は文章で情報を伝えるスキルには自信を持っているのですが、動画で伝えるスキルも今後身に着けたいなと思い、9月頃からYouTube活動をしています。

www.youtube.com

まずは趣味のお散歩をしている動画をあげているのですが、今後エンジニアとしてプログラミングなどに関連する動画をアップ予定です。
少しでもご興味あればチャンネル登録をお願いいたします。

動画本数も少なく、当然視聴回数もまだまだなんですが、それでも毎朝数字をチェックしています。
「昨日は視聴回数どれくらい伸びたかな?」
と結構気になってしまい、定期的に管理ページにいっては、
「全然変わってないぃ……。」

と落ち込んでいる私ですが、この作業が結構面倒!!

せっかくならSlackを使って自動化してしまいましょう。
今回はGAS(Google Apps Script)とSlackを連携させ、昨日の各動画の視聴回数を自動で流してくれるBotを作成してみました。


完成形としては、以下のようなイメージです。

f:id:Np-Ur:20201224195903p:plain

  • GASからYouTubeのAPIを叩いて視聴回数を取得
  • データをスプレッドシートに保存
  • データを整形してSlackにポスト

といった流れです。

Slack側の設定

まずはIncoming Webhooksの設定を行います。

Incoming Webhooks とは、外部のアプリからSlackにメッセージを送信する仕組みです。
Slackが用意してくれている、Incoming Webhooks を使うと簡単に外部アプリと連携ができます。

補足ですが、slashコマンドというのも使うと、Slackからの特定コマンドの入力をトリガーに、外部アプリとの連携もできます。
そのあたり、以下でまとめているので、ご興味あれば読んでみてください。
www.randpy.tokyo
www.randpy.tokyo


Slackにログインした状態で、https://slack.com/appsにアクセスしてください。

そしたら、「Incoming webhooks」と入力してください。
f:id:Np-Ur:20201224194403p:plain

次に、「Add to Slack」をクリックしましょう。

f:id:Np-Ur:20201224194423p:plain

その後、送信したいチャンネルを選択して、「Add Incoming webhooks integration」をクリックしてください。
今回は、#test チャンネルに送信するように設定しました。

ただし、このチャンネルはGASのプログラム側からも設定できるので、あまり気にせず進みましょう。

f:id:Np-Ur:20201224194620p:plain

そしたら、Webhook URL という箇所をコピーするなりして、後で使えるようにしておいてください。これはGAS側で用います。

f:id:Np-Ur:20201224194725p:plain

Slack側の設定はこれで終わりです。
続いてGASのコードを書いていきましょう。

GAS(Google Apps Script)の設定

Google スプレッドシートを開いて、スクリプトエディタを開くことで編集することができます。
この辺り、よく分からない方は下の記事を参考にしてみてください。
www.randpy.tokyo


スプレッドシートの初期設定

GASを書き始める前に、まずスプレッドシートの初期設定を済ませます。

二つシートを作成します。

  • 視聴回数
  • 日ごとの視聴回数

f:id:Np-Ur:20201224205450p:plain

『視聴回数』シートに

  • 動画タイトル
  • 動画ID

という二つのヘッダーを用意してください。

また、情報を取得したい動画タイトルとIDを入力してください。
IDとは、各動画のURLに例えば以下動画でいうと、「3pKe3HfTYCU」です。各動画のURLを確認して、「v=」の後ろの文字列がIDに該当します。
www.youtube.com
https://www.youtube.com/watch?v=3pKe3HfTYCU


なお、動画タイトルはなくても大丈夫ですが、あった方が分かりやすいので入力しておいてください。
準備はこれでOKです。

『日ごとの視聴回数』シートには特に何も設定しなくて大丈夫です。


ソースコード

コードとしては、以下の通りです。

Githubにも置いてあります。

github.com


まず、7行目に先ほど作ったWebhook URLを貼り付けてください。
また、8行目に送信したいチャンネル名を入力してください。基本publicチャンネルであればどこでも設定できるはずです。

サービスの設定

続いて、YouTube APIをGASから叩くための設定を行います。

サイドバーにある『サービス』をクリックして、「YouTube Data API」を選択して追加しましょう。

f:id:Np-Ur:20201224204904p:plain

こんな感じになっていれば追加できています。
f:id:Np-Ur:20201224205156p:plain

ここまできたら、保存しておきましょう。

ざっくりソースコード解説

以下の流れで処理をしています。

  • 「updateTotalSheet()」関数で、スプレッドシートに入力された動画IDの、現在の視聴回数を取得
  • 「updateEachDaySheet()」関数で、前回取得した際の数字と比較して、直近1日でどの程度視聴回数が伸びたかを記録
  • 「postSlack()」関数で、記録された数字を整形してSlackにポストしています

そんなに難しくないので、たぶん読めばすぐ分かると思います。

動作確認とタイマー設定

スプレッドシートの設定が終わったら、再度Google Apps Scriptに戻り、「updateSheets」関数を実行してください。
f:id:Np-Ur:20201224210623p:plain

以下のように、Slackの設定したチャンネルに情報がポストされていれば成功です!
f:id:Np-Ur:20201224195903p:plain

タイマー設定

続いて、この処理をタイマーに設定して、毎朝スクリプトが実行されるようにします。

サイドバーから、時計のマークをクリックしてください。
f:id:Np-Ur:20201224211222p:plain

続いて、「新しいトリガーを作成します。」をクリックしてください。
f:id:Np-Ur:20201224211419p:plain

以下のように設定してください。
毎日8~9時あたりで、updateSheets関数が呼ばれるように設定しています。

f:id:Np-Ur:20201224211503p:plain

これで毎朝Slackに自動で数字が送られるようになりました!
お疲れ様です!!

まとめ

今回は、SlackとYouTubeを連携させるための、GASを書いてみました。
いちいちYouTubeページにログインして該当部分のデータを見て…ということをしなくてもお使いのSlackから簡単に自動化できます。

今回、YouTube Data APIというAPIを使ったのですが、YouTube Analytics APIを使うと自身のチャンネルについて詳細な数字を取得することができます。
機会あれば、そちらもブログに残そうと思います。

それでは!素敵なGASライフを!!!