誰のための記事?
タスクマネージャーなど、毎日いろんな集計に悩み、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. トリガーを設定する
トリガー(=時計マーク)をクリックして、「トリガーを追加」をクリック。
- getDailyVideoStatsを実行関数に設定
- 時間主導型にし、日付ベースタイマーを設置
- 毎日更新時刻を決める
完成!!!
毎日、定時に更新してくれます!! そこから関数を使っていろんな統計ができますので、ぜひ試してみてください。
再生数は累計になりますので、毎日の再生回数は関数で計算すればOK!!
あとがき
バリバリコード書くタイプではないので、周りに比べたら引き目を感じてる時が多いですが、目の前にいる同僚が雑務から解放され、やりたい仕事へ集中できる姿を目の当たりにする時、業務改善は単なるタスクを減らすだけではないと気づきました。
雑務って、結構いい人そうで、人当たりのいい新人に行きがちで、それを減らせることによって、負担を減り、「いい人」をただのいい人に終わらせないための手助けでもあると考えると、タスクを減る以上の価値があると思っております。
なので、これからも業務改善を継続するつもりです!!
コメントもお待ちしております。