見出し画像

PHPによるZoom APIの実装例(第3回(全4回))

第3回:現在ミーティング中のZoomの表示、今後予定しているZoomミーティングの一覧の表示

前回はZoom APIを利用して、Zoomミーティング参加者の取得を行いました。
今回は、現在ミーティング中のZoomの表示、今後予定しているZoomミーティングの一覧の表示をしていきます。
自分のアカウントのZoom状況や今後の予約は、サインインをすればすぐにわかりますが、会社で複数アカウントを持っていて、管理部門として誰がZoomを行っているかわかるようにしたいという用途で使えるのではないのかと思います。
イメージとしては、下記の画面のようになります。


解説しますと、上段の行が、現在Zoomミーティングを開催している対象ミーティングになります。「Live」という画像をつけて、開催中とわかりやすいようにしています。
下段の行が、今後予約されているミーティング一覧となります。
上記の場合だと、個人アカウントのみの表示となっておりますが、会社で複数アカウントを持っている場合は、すべてのアカウントのミーティング一覧を表示させることも可能です。


使用するAPIは公式のZoomAPIリファレンスにある
List meetings
になります。

https://developers.zoom.us/docs/meeting-sdk/apis/#operation/meetings

GET /users/{userId}/meetings
{userId}は、第一回の記事で書いたZoom IDの取得から、それぞれのZoomアカウントユーザーのidを指定してください。

https://note.com/jun574/n/n4964a60a5afe


上記リファレンスにあるとおり、typeを指定してほしい情報を取得します。
type=scheduledの場合、今後のミーティングと開催中のミーティングをまとめて取得しますが、今回は、開催中のものと、今後のミーティングを分けて表示したいため、
type=liveと
type=upcoming
を使用します。
今回は使用しませんが、
type=previous_meetings
を使用すれば、過去のミーティング一覧を取得できます。

まずは、配信中のZoomのhtml部分のソースになります。


<div class="h3">配信中のZoom</div>
<div class="h5"> ※ウェビナーは配信中の情報を取得できません。予約一覧に記載の開催時間を確認してください。</div>
<table class="table">
  <thead class="table-danger">
    <tr>
      <th class="col-1">日付</thclass=col-1>
      <th class="col-1">開始時刻</th>
      <th class="col-1">終了時刻</th>
      <th>トピック</th>
      <th>URL</th>
    </tr>
  </thead>
  <tbody>
    <?php
      if (is_array($meetingAryLive)) {
        $num = count($meetingAryLive);
      } else {
        $num = 0;
      }

      for ($i = 0; $i < $num; $i++) {
        //タイムゾーンの修正
        $t = new DateTime($meetingAryLive[$i]["start_time"]);
        $t->setTimeZone( new DateTimeZone('Asia/Tokyo'));
        $start_time_t = $t->format(DateTime::ISO8601);

        // 時間加算により終了時刻を算出
        $end_time = strtotime($start_time_t. '+' . $meetingAryLive[$i]["duration"] .'minute');
        $end_time = date('H:i', $end_time);
     ?>
     <tr data-js="tr-copy">
       <td class="start-day"><?= substr($meetingAryLive[$i]["start_time"], 0, 10)?></td>
       <td class="start-time"><?= substr($start_time_t, 11, 5)?><img class="img-zoom-live ms-1" src="./img/live.png" alt="" /></td>
       <td class="end-time"><?= $end_time?></td>
       <td class="topic"><?= $meetingAryLive[$i]["topic"]?></td>
       <td class="url"><?= $meetingAryLive[$i]["join_url"]?></td>
      </tr>
    <?php } ?>
  </tbody>
</table>

上記ソースにある、$meetingAryLiveは別の個所でZoom APIから取得しています。 
/users/{userId}/meetings?type='live'
とgetパラメーターを指定しています。
Zoomの予約を取るときにわかると思いますが、
Zoomは開始時間と終了時間を入れるのではなく、開始時間と開催分数を入れるため、上記画像のように、終了時間と表記したい場合は、
開始時間+開催分数 を計算して終了時間を算出しています。
<td>部分で、ミーティング数分のZoom情報を出力しています。
ここは、1アカウントしか使用していない場合は、ループさせる必要はないのですが、会社の複数アカウントで開催中のZoomをまとめて表示させてい場合に、ループ処理で出力できるようにしています。
開始時刻の隣に、src="./img/live.png"として画像を表示させています。

予約一覧(今後のミーティングのみ)の個所も、基本的なソースは同じで、
$meetingAryLiveに入れているAPIを
/users/{userId}/meetings?type='upcoming'
とすればよいだけです。

さて、それではいよいよphpのAPI取得部分の実装になります。
Server-to-server OAuthの認証については、第1回、第2回の記事でしておりますので、APIにアクセスできる前提でコードを紹介します。


<?php
//▼▼▼ ライブ中のZoom ▼▼▼
$zl = new ZoomList();
$zl->getZoomList("live", "meetings", 2); // ※1:引数3:アカウント数
$meetingAryLive = $zl->meetingAryLive;
if ($meetingAryLive == '') {
  $meetingAryLive = null;
}

//▼▼▼ 今後のZoom ▼▼▼
$z2 = new ZoomList();
$z2->getZoomList("upcoming", "meetings", 2);
$meetingAry = $z2->meetingAryLive;

//▼▼▼ 今後のWebinar ▼▼▼
$z3 = new ZoomList();
$z3->getZoomList("upcoming", "webinars", 1);
$meetingAry3 = $z3->meetingAryLive;

【解説】
まず上のブロックのコードでは、/users/{userId}/meetingsをコールするため、処理を共通化し、引数で内容を分けています。
getZoomList("live", "meetings", 2);
の関数は、
第1引数で'live'や'upcoming'を指定
※type=で指定したいパラメーターを入れます。

第2引数で'meetings'や'webinars'を指定
※ウェビナー契約がない人は、'meetings'のみでよいと思います。

第3引数でZoomアカウント数を指定
※これは、複数アカウントをまとめて表示したい場合の処理として入れています。指定した数の繰り返し処理を行っています。
1アカウントしかない場合は、繰り返し処理は不要ですので、コードはもっとすっきりすると思います。

次に、下のブロックのコードでは
getZoomList("live", "meetings", 2);
でコールした部分の関数処理になります。

ここから先は

2,933字
この記事のみ ¥ 500

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