YouTubeAPIを使ってあるチャンネルの動画情報を新しい順に取得


作ったもの


ばっちり新しい順に動画リストを取得できました。
すみません、個人の趣味が入ってしまうので何を取ったかは塗らせていただいています。
限定公開のものではないのでたぶん大丈夫w

何故やるのか

 今回お試しで趣味のチャンネルで情報を取れるかをやってみましたが、
 実は業務に生かそうとしています。
 動画のアップロード情報をメールで受け取って、YouTubeの別のお仕事に使っていました。
 しかし、8月あたりに仕様変更でメールが送られなくなったので、
 自動で何とか情報を取得できないかと考えていてちょうどよい機会になりました。

 アウトプット先が何で平文のメッセージになっているのかというと、
 ただ単にきれいに送る方法がわからなかったからです!
 業務では自分のTeamsに綺麗に送れるようにしたいところです。

気を付けるところ

 事前にYouTube Data APIの有効化が必要!
 ⇒GASで使用してよいという「有効化」と、YouTubeAPIを使う時の認証をする必要がある。

 YouTube Data APIには取得件数には制限がある。

今後直していきたいポイント

 1.取得件数の変更 上限がありますがもう少し数を増やします。
 2.ページ数の制御 数を増やした時に次ページへのトークンの設定などうまくやりたいです。
 3.アウトプット先を変える スプレッドシートにする。
 4.3を踏まえてスプレッドシートに更新がかかったら、お知らせするようにする。
 5.お知らせを綺麗なメッセージにする。
 6.アップロードされた分だけ取得するようにする。

環境

Google Apps Script
YouTube Data API v3

ソース

function getYouTubeMovies() {
  // 処理を送り先Webhook URL
  const URL = 'webhookURL';

  // YouTubeの動画リストを取得
  var y_res = YouTube.Search.list('id,snippet', {
    maxResults: 5, 
    channelId: 'チャンネルID',
    order: "date",  // 取得順序は、最新動画順にしてある
    type: "video"
  })   
  console.log(y_res);
  // 動画の情報が欲しかったので動画リストだけ保存
  var movie_list = y_res.items;

  // レスポンスのJSONを分解してテキストに突っ込む。たぶんスプレッドシートに記入するならそのままかける。
  let text = "";
  for(var i = 0; i < movie_list.length; i++){
    var title = movie_list[i].snippet.title;
    var p_time = movie_list[i].snippet.publishTime;
    var video_id = movie_list[i].id.videoId;
    text = text + "title:" + title +  ",uldate:" + p_time +  ",url:https://www.youtube.com/watch?v=" + video_id + "; ";

  }
  // POSTする中身
  const teamsPayload = {
    'title': 'YouTube最新動画5個',
    'text': text,
  };

  // UrlFetchAppのオプション
  const params = {
    'method': 'POST',
    'contentType': 'application/json',
    'payload' : JSON.stringify(teamsPayload),
  };
  console.log(params)
  // HTTPリクエスト送信
  const res = UrlFetchApp.fetch(URL, params);
}