📽️

Google Apps ScriptとYouTube Data APIで動画データを分析!Dify.APIでさらに自動化!

2024/06/02に公開

対象読者

  • YouTube の動画データを活用して分析を行いたい人
  • GAS を使って業務効率化や自動化に興味がある人
  • Dify.APIを使って動画要約の自動化に興味がある人

近年、動画コンテンツの需要が高まり、YouTubeをはじめとする動画プラットフォームは、マーケティングや情報収集において重要な役割を担っています。 膨大な動画データの中から有益な情報を効率的に取得し、分析することは、ビジネスの成長や意思決定を大きく左右する可能性を秘めていると言えるでしょう。

この記事では、Google Apps Script(GAS)とYouTube Data APIを活用して、YouTubeの動画データを取得・分析する方法を解説します。GASの初心者でも理解しやすいように、基本的な設定から具体的なコード例まで、丁寧に解説していきます。さらに、動画要約APIのDify.API を組み合わせることで、取得した動画データから要約を作成し、Discordへ通知するまでの自動化を実現する方法を紹介します。

GASとYouTube Data APIの準備

まずは、GASとYouTube Data APIを使うための準備を行いましょう。

  1. Google Cloud PlatformでAPIキーを取得
    • Google Cloud Platformにアクセスし、新しいプロジェクトを作成します。
    • 作成したプロジェクトで、YouTube Data API v3を有効にします。
    • APIキーを作成し、後ほどGASコードで使用するために安全な場所に保管します。
  2. GASプロジェクトの作成とAPIの有効化
    • Google スプレッドシートの新規ファイルを作成し、「拡張機能」>「Apps Script」を選択します。
    • GASエディタが開いたら、左側のサイドバーから「+」ボタンをクリックして「サービス」を選択し、「YouTube」を探してAPIを有効にします。
  3. スプレッドシートとの連携方法
    • GASでは、スプレッドシートのデータを簡単に扱えます。
    • SpreadsheetApp.getActiveSpreadsheet()SpreadsheetApp.openById() を使用してスプレッドシートにアクセスします。
    • getSheetByName()getRange() を使用して、シートやセルを指定します。

基本的なデータ取得

APIキーの取得とGASプロジェクトの作成が完了したら、実際にYouTube Data APIを使って動画データを取得してみましょう。ここでは、よく利用される3つのデータ取得方法を紹介します。

1. 特定のチャンネルの最新動画情報を取得する

特定のチャンネルの最新動画情報を取得するには、search.listエンドポイントを使用します。 必要なパラメータは以下の通りです。

  • part: 取得する情報の種類 (snippet, idなど)
  • channelId: 対象のチャンネルID
  • maxResults: 最大取得件数
  • order: 並び替え順 (date, rating, relevanceなど)
  • key: APIキー
function getLatestVideoByChannelId(channelId) {
  var url = "https://www.googleapis.com/youtube/v3/search?key=" + apiKey + "&channelId=" + channelId + "&part=snippet,id&order=date&maxResults=1";
  var response = UrlFetchApp.fetch(url);
  var data = JSON.parse(response.getContentText());
  
  if (data.items && data.items.length > 0) {
    var latestVideo = data.items[0];
    return {
      "videoId": latestVideo.id.videoId,
      "title": latestVideo.snippet.title,
      "description": latestVideo.snippet.description,
      "publishedAt": latestVideo.snippet.publishedAt,
      "url": "https://www.youtube.com/watch?v=" + latestVideo.id.videoId
    };
  } else {
    return null;
  }
}

2. キーワード検索による動画リストの取得

キーワードで動画を検索するには、search.list エンドポイントを使用します。 必要なパラメータは以下の通りです。

  • part: 取得する情報の種類 (snippet, id など)
  • q: 検索キーワード
  • maxResults: 最大取得件数
  • order: 並び替え順 (date, rating, relevance など)
  • key: APIキー
function searchVideos(query, maxResults = 10) {
  var url = "https://www.googleapis.com/youtube/v3/search?part=id,snippet&q=" + encodeURIComponent(query) + "&maxResults=" + maxResults + "&key=" + apiKey;

  try {
    var response = UrlFetchApp.fetch(url);
    var json = JSON.parse(response.getContentText());

    if (json.items && json.items.length > 0) {
      return json.items;
    } else {
      console.log('No videos found for the search query.');
      return [];
    }
  } catch (err) {
    console.log('Failed with an error: ' + err.message);
    return [];
  }
}

3. 動画の詳細情報(タイトル、説明、再生回数、高評価数など)の取得

動画IDを使って動画の詳細情報を取得するには、videos.list エンドポイントを使用します。必要なパラメータは以下の通りです。

  • part: 取得する情報の種類 (snippet, contentDetails, statistics など)
  • id: 対象の動画ID
  • key: APIキー
function getVideoDetails(videoId) {
  var url = "https://www.googleapis.com/youtube/v3/videos?part=snippet,contentDetails,statistics&id=" + videoId + "&key=" + apiKey;

  try {
    var response = UrlFetchApp.fetch(url);
    var json = JSON.parse(response.getContentText());

    if (json.items && json.items.length > 0) {
      var video = json.items[0];
      return {
        videoId: videoId,
        title: video.snippet.title,
        description: video.snippet.description,
        publishedAt: video.snippet.publishedAt,
        duration: video.contentDetails.duration,
        viewCount: video.statistics.viewCount,
        likeCount: video.statistics.likeCount,
        dislikeCount: video.statistics.dislikeCount,
        commentCount: video.statistics.commentCount
      };
    }

    return null;
  } catch (err) {
    console.log('Failed to get video details for video ID: ' + videoId);
    console.log('Error: ' + err.message);
    return null;
  }
}

応用例

上記で紹介した基本的なデータ取得方法を組み合わせることで、様々な分析に活用できます。

  • チャンネル登録者数の推移をグラフ化:
    • 特定の期間を設定し、定期的にチャンネル情報を取得することで、チャンネル登録者数の推移をスプレッドシートに記録し、グラフ化できます。
  • 特定のキーワードを含む動画のコメントを分析:
    • 特定のキーワードで動画を検索し、取得した動画IDを使ってコメントを取得・分析できます。コメントの内容を分析することで、視聴者の反応や意見を把握できます。
  • 再生回数が多い動画の特徴を分析:
    • 特定のチャンネルやキーワードで動画を検索し、再生回数や高評価数などを元に、人気の動画の特徴を分析できます。

Dify.API を活用した動画要約の自動化

取得した動画データをさらに有効活用するために、Dify.APIを使って動画の内容を要約し、Discordに自動で通知する仕組みを作ってみましょう。

Dify.APIとは

Dify.APIは、最先端のAI技術を用いて、テキストや動画の内容を要約するAPIです。APIを介して簡単に動画要約機能を組み込むことができます。

Dify.APIの利用方法

  1. アカウント登録とAPIキーの取得:
    • Dify.APIのウェブサイトでアカウント登録を行い、APIキーを取得します。
  2. GASからDify.APIへのリクエスト:
    • 取得したAPIキーを使って、GASからDify.APIへ動画のURLを送信します。
  3. 要約の取得とDiscordへの通知:
    • Dify.APIから返された要約結果を取得し、DiscordのWebhook URLを使って通知します。

https://zenn.dev/tregu0458/articles/d93b994b330bfc

function postYoutubeSummarizer(videoId) {
  var url = DIFY_BASE_URL + '/workflows/run';
  var payload = {
    'inputs': {
      'url': "https://www.youtube.com/watch?v=" + videoId,
      'knowledge':''
    },
    'response_mode': 'blocking',
    'user': 'abc-123'
  };
  var options = {
    'method': 'post',
    'contentType': 'application/json',
    'headers': {
      'Authorization': 'Bearer ' + API_DIFY_KEY
    },
    'payload': JSON.stringify(payload)
  };
  
  var response = UrlFetchApp.fetch(url, options);
  var data = JSON.parse(response.getContentText());
  Logger.log(data);
  message = data['data']['outputs'];
  return message
}

まとめ

この記事では、GASとYouTube Data APIを使ったYouTube動画データの取得・分析方法を紹介しました。GASとYouTube Data APIを活用することで、動画データを効率的に取得し、分析することが可能になります。

さらに、Dify.APIを組み合わせることで、動画要約の自動化といった、より高度な処理も実現できます。ぜひ、この記事を参考に、ご自身の業務や分析に役立ててみてください。

注意事項

  • YouTube Data APIには利用制限があります。詳細については、公式ドキュメントをご確認ください。
  • APIキーは第三者に公開しないよう、厳重に管理してください。
  • 本記事で紹介したコードは、あくまでサンプルです。実際の利用環境に合わせて適宜修正してください。
  • YouTube Data APIの仕様変更などにより、記事の内容が古くなっている可能性があります。最新の情報は、公式ドキュメントをご確認ください。

https://github.com/tregu148/difyForShare/blob/main/googleappscript/YouTube_Video_Summarizer_and_Discord_Integration.js


このコードは、クリエイティブ・コモンズ 表示 4.0 国際 (CC BY 4.0) ライセンスの下で提供されています。

このライセンスの詳細については、以下のリンクを参照してください。
https://creativecommons.org/licenses/by/4.0/deed.ja

あなたは以下の条件に従う限り、自由に:

  • 共有 — どのようなメディアやフォーマットでも資料を複製したり、再配布できます
  • 翻案 — マテリアルをリミックスしたり、改変したり、別の作品のベースにしたりできます
  • 営利目的も含め、どのような目的でも利用できます

このライセンスは、著作権者があなたに対し、すべての権利を許諾するというものではありません。

以下のようなことを守る必要があります:

  • 表示 — 適切なクレジットを表示し、ライセンスへのリンクを提供し、変更があったらその旨を示す必要があります。これらは合理的な方法で行えばよいのですが、許諾者があなたやあなたの利用行為を支持していると示唆するような方法は除きます。
  • 追加の制約は課せない — あなたは、このライセンスが他の者に許諾することを法的に制限するようないかなる法的規定も技術的手段も適用してはなりません。

Discussion