見出し画像

#95 希望する文字列を含んだ会議コードを取得したい(Google Meet)

Google Meet に参加するための URL は、XXX-XXXX-XXX という形式の会議コードで構成されています。
作成された会議コードは、以下のヘルプ記事で説明されているように、会議コードを作成した状況に応じて有効期限が異なります。多くの場合は、最後に使用してから 365日後に有効期限が切れるようです。

作成し直すことでまるで違う会議コードが生成されますが、「もっと覚えやすい会議コードだったらいいのに!」と思ったことはありませんか? 今回のプログラムはそんな要望に応えるもので、希望するキーワードを含んだ会議コードが生成されるまで、再作成をくり返します。

それだけのプログラムなので、それ以上の効果を期待するプログラムではありません。

注意(2023/06/25 追記)

この記事で紹介しているプログラムを用いて、予定の作成をくり返した場合、以下 URL のヘルプ記事にあるような制限に抵触する場合がありますのでご注意ください。

ChatGPT にお願いしてみた

ChatGPT に、以下 URL のようにお願いしてみましたが、「目的の処理を行うための API が提供されていないため、要件を満たせません」という旨の回答でした。

ChatGPT の回答(冒頭部分)

しかしながら、以下の 2018/01/22 に公開された Google  のブログ記事で、Google Calendar API を用いて Hangouts Meet(現在の Google Meet)の情報が扱えることが説明されているんですけどね…

仕方がないので自作

前述のように、ChatGPT ではプログラムを作成してくれなかったので、ググって得られた、以下 URL の情報をもとにして自作しました。

できあがったプログラムは、以下の通りです。空行やコメントも含めて、80行余りの GAS によるプログラムです。

"use strict";                                       // 変数の宣言を強要

function onOpen() {
  const customMenu = SpreadsheetApp.getUi()
  customMenu.createMenu('リンク作成')                 //メニューバーに表示するカスタムメニュー名
    .addItem('イベント作成', 'createEvents')          //メニューアイテムを追加
    .addToUi()
}

function createEvents() {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  const TARGET_STR1 = sheet.getRange('keyword1').getValue();
  const TARGET_STR2 = sheet.getRange('keyword2').getValue();
  console.info(TARGET_STR1, TARGET_STR2);

  //GAS実行ユーザーのGoogleアカウントIDをカレンダーIDとして取得
  const calendarId = Session.getActiveUser().getEmail();
  console.log(calendarId);

  var startRow = 2;  // 開始行を指定(ヘッダー行をスキップ)
  var numRows = sheet.getLastRow() - 1;             // 行数を取得

  var dataRange = sheet.getRange(startRow, 1, numRows, 3); // データ範囲を指定
  var data = dataRange.getValues();                 // データを取得
  let status;

  for (var i in data) {
    var row = data[i];
    var date = new Date(row[0]);                    // 日付を取得
    var time = row[1];                              // 時間を取得
    var eventName = row[2];                         // 予定名を取得
    if (date == 'Invalid Date') {
      continue;
    }
    console.info(Number(i), date);
    let j = Number(sheet.getRange(startRow + Number(i), 6).getValue());

    // 日付と時間を結合
    date.setHours(time.getHours());
    date.setMinutes(time.getMinutes());

    let eventParam = {
      conferenceData: {
        createRequest: {
          conferenceSolutionKey: {
            type: "hangoutsMeet"
          },
          requestId: "123"
        },
      },
      summary: eventName,
      start: {
        dateTime: date.toISOString()
      },
      end: {
        dateTime: new Date(date.getTime() + 60 * 60 * 1000).toISOString()
      },
    };

    console.log(eventParam);
    status = true;
    let event;
    while (status) {
      j++;
      event = Calendar.Events.insert(eventParam, calendarId, { conferenceDataVersion: 1 });
      console.log(event.hangoutLink);

      if (event.hangoutLink.includes(TARGET_STR1) || event.hangoutLink.includes(TARGET_STR2)) {
        status = false;
      }
      else {
        Calendar.Events.remove(calendarId, event.id);
      }
    }

    console.info(startRow, Number(i), event.id);
    sheet.getRange(startRow + Number(i), 4).setValue(event.id);
    sheet.getRange(startRow + Number(i), 5).setValue(event.hangoutLink);
    sheet.getRange(startRow + Number(i), 6).setValue(j);
  }
}

使い方

作成したプログラムは、下図のようなスプレッドシートのバインドスクリプトとして作成してあります。

作成した Google スプレッドシート(1)

このスプレッドシートは、以下 URL にアクセスすることで、自身の Google にコピーを作成できます。

  • https://bit.ly/42VrkTK
    → 利用件数を確認するために Bitly の短縮 URL で掲載しています。

上図のマーカー部分に必要事項を設定してから、

  • セル J1 とセル K1 に会議コードに含めたい文字列を設定する。
    ここで設定した文字列のいずれかを含んでいる会議コードが生成されるまで、処理を継続します。

  • 作成する会議コードがひも付けられる Google  カレンダーの予定について、列 A ~ C に設定する。 ※列 A「日付」、列 B「時刻」、列 C 「予定の名前」

上記の内容を設定してから、追加されているメニュー「リンク作成」から「イベント作成」を選択すると、処理が実行できます。

作成した Google スプレッドシート(2)

プログラムをはじめて実行する際には、アカウントによる確認作業が必要になります。詳しくは以下の投稿をご覧ください。

メニューからプログラムを実行すると、セル J1 とセル K1 に設定された文字列のいずれかが含まれている会議コードが生成されるまで、生成をくり返します。

注意するポイント

  • セル J1 とセル K1 に設定する文字列のいずれかが含まれていれば、条件を満たしたと判断します。 ※プログラム中の || を && に変更すれば、両方の条件を満たすまでくり返します。

  • 生成される会議コードはランダムな文字列なので、条件に一致する会議コードが生成されるまでのリトライ回数は運次第です。

  • 設定されている文字列が長くなるほど、条件が一致する確率が下がります。3文字にとどめておくのがいいと思います。

  • 設定されている文字列が 3文字の場合、会議コードの中央 4文字の前 3文字か後 3文字で一致する場合があります。

  • 運が悪い場合には、GAS の実行時間制限によってプログラムの実行が中断されてしまうかもしれません。その場合には、プログラムを再実行してください。

最後に

今回のプログラムは、ChatGPT に手伝ってもらおうとしたものの、生成してくれなかったので自分で作成してしまいました。😅 また、このプログラムそのものは、覚えやすそうな Google Meet の会議コードの生成を手助けするだけであり、それ以上の効果はありません。

最後に、お決まりのフレーズなどを書いておきます。

  • 一応の動作確認は行っているものの、不慮のトラブルによって損害等が生じても、責任はとれませんので予めご了承ください。

  • コメントを含めても 80行くらいのスクリプトであり、実行に際して目的外の場所への書き出しや収集などは行っていません。

  • 特別なエラー処理は行っていないので、意図しないケースでエラーが発生してしまうかもしれません。どうにもならない場合には、ご連絡ください。

わたし自身にしてみると、このような「スクリプトを作ること」が目的になっているような感じですが、このスクリプトが何かの役に立てば幸いです。
「スキ ♡」を押してもらえると、このようなプログラム作成の励みになります。😍

この記事が気に入ったらサポートをしてみませんか?