4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【GASで業務効率化】YouTube配信実績を自動更新するスクリプトを作ってみた

Last updated at Posted at 2023-05-09

誰のための記事?

タスクマネージャーなど、毎日いろんな集計に悩み、YouTubeAPIを使って、
集計を自動化したい方を向けに書いています。

なんで解決したいの?

会社が運用するYouTubeチャンネルがあり、SEO対策のため、更新頻度を増やすことにしました。当然、動画編集担当が集計する余裕がなくなり、データがだんだん怪しくなってきたのがきっかけです。

「こんなちまちまな作業を自動化すれば全て解決じゃない?!! 」
という発想に至りました。

何を実現したかった?

小さい会社に勤めていて、仕事は山ほどあります。
「忙しい」だけで終わらせず、チームメンバーの自己研鑽のための時間、人生の時間を1秒でも多くENJOYできるように、自動化できることを自動化して、可処分時間を増やして、みんなよりHAPPYな人生を過ごせる体制を作りたい!!!!

実際やったこと

GASを使って、YouTubeの配信実績(BEST 50)を毎日定時に自動更新!!

と言っても、特定のチャンネルのベスト50を取得しますので、ジャンルごとにデータを取得したい方は、コードをいじってください。

そして、Google Scripts Appsの基本操作はこちらの記事を参考してください。

1. YouTube APIを取得

YouTubeのAPIキーはGoogle Cloud Platformのコンソールから取得できます!
下記の記事をご参考ください。

2. GASを書く

a. まず、毎日動画のデータを取得する

function getDailyVideoStats() { 
  
  var apiKey = 'YouTubeAPI KEY';

  var channelId = 'YouTubeチャンネルID';
  
  // チャンネルの動画を取得
  var videoIds = getChannelVideos(channelId, apiKey);
  
  // それぞれの動画の統計情報を取得し、スプレッドシートに追加
  for (var i = 0; i < videoIds.length; i++) {
    var videoId = videoIds[i];
    var videoStats = getVideoStats(videoId, apiKey);
    writeStatsToSheet(videoStats);
  }
}

b. 動画のidを取得する

function getChannelVideos(channelId, apiKey) {
  var url = 'https://www.googleapis.com/youtube/v3/search?part=id&channelId=' + channelId + '&maxResults=50&order=date&type=video&key=' + apiKey;
  var response = UrlFetchApp.fetch(url);
  var json = JSON.parse(response.getContentText());
  var videoIds = [];

  for (var i = 0; i < json.items.length; i++) {
    var videoId = json.items[i].id.videoId;
    videoIds.push(videoId);
  }

  return videoIds;
}

c. 特定の動画の再生数を取得する

function getVideoStats(videoId, apiKey) {
  var url = 'https://www.googleapis.com/youtube/v3/videos?part=snippet,statistics&id=' + videoId + '&key=' + apiKey;
  var response = UrlFetchApp.fetch(url);
  var json = JSON.parse(response.getContentText());
  var video = json.items[0];
  var snippet = video.snippet;
  var statistics = video.statistics;

  return {
    title: snippet.title,
    videoId: videoId,
    viewCount: statistics.viewCount,
    date: new Date()
  };
}

ちなみに、グッド、バッド、コメントもカウントできます!! その時はreturnの部分に追加してください。

likeCount: statistics.likeCount,
dislikeCount: statistics.dislikeCount,
commentCount: statistics.commentCount,

d. ここが非常に重要!! 自動的に記入してもらうように、あるものを数字だけ追加し、ないものを自動的にスプレットシートに追加してもらいます。

function writeStatsToSheet(videoStats) {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var lastRow = sheet.getLastRow();
  var lastColumn = sheet.getLastColumn();
  var found = false;
  var dateColumn;

  // 既に存在する日付の列を探す
  for (var i = 1; i <= lastColumn; i++) {
    var currentDate = sheet.getRange(1, i).getValue();
    if (currentDate instanceof Date && currentDate.toDateString() === videoStats.date.toDateString()) {
      found = true;
      dateColumn = i;
      break;
    }
  }

  // 日付が存在しない場合、新しい列に日付を追加 
  if (!found) {
    dateColumn = lastColumn + 1;
    sheet.getRange(1, dateColumn).setValue(videoStats.date);
  }

  // タイトルが既にシートに存在するかどうかを確認し、対応する行に統計情報を書き込む
  for (var i = 2; i <= lastRow; i++) {
    var currentTitle = sheet.getRange(i, 2).getValue();
    if (currentTitle === videoStats.title) {
      sheet.getRange(i, dateColumn).setValue(videoStats.viewCount);
      return;
    }
  }

  // タイトルが見つからなかった場合、新しい行に動画情報を追加
  var data = [
    videoStats.videoId,
    videoStats.title,
  ];
  data[dateColumn - 1] = videoStats.viewCount;
  sheet.appendRow(data);
}

3. トリガーを設定する

トリガー(=時計マーク)をクリックして、「トリガーを追加」をクリック。
スクリーンショット 2023-05-09 10.37.21.png

  1. getDailyVideoStatsを実行関数に設定
  2. 時間主導型にし、日付ベースタイマーを設置
  3. 毎日更新時刻を決める

スクリーンショット 2023-05-09 10.37.44.png

完成!!!

毎日、定時に更新してくれます!! そこから関数を使っていろんな統計ができますので、ぜひ試してみてください。

再生数は累計になりますので、毎日の再生回数は関数で計算すればOK!!

スクリーンショット 2023-05-09 10.08.53.png

あとがき

バリバリコード書くタイプではないので、周りに比べたら引き目を感じてる時が多いですが、目の前にいる同僚が雑務から解放され、やりたい仕事へ集中できる姿を目の当たりにする時、業務改善は単なるタスクを減らすだけではないと気づきました。

雑務って、結構いい人そうで、人当たりのいい新人に行きがちで、それを減らせることによって、負担を減り、「いい人」をただのいい人に終わらせないための手助けでもあると考えると、タスクを減る以上の価値があると思っております。

なので、これからも業務改善を継続するつもりです!!
コメントもお待ちしております。

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?