2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Zoom API】クラウド録画をPHP curlでダウンロードする(Postman併用)

Last updated at Posted at 2022-06-22

環境

PHP 8.0

準備

1. JWTトークン発行

ZoomマーケットプレイスでJWTトークンを発行してください。
私が参考にさせていただいた記事はこちらです。

定期的に動かす場合は、プログラム側でJWTトークン生成した方が良いです。当初、生成する方針で進めていましたが、エラー解消できず、今回はZoomマーケットプレイスから発行しました。
参考: https://qiita.com/gentuki/items/d64f15447cb556eafd3b

2. ZoomユーザーIDを取得

postmanを使用してユーザーIDを確認しました。postmanの使用方法については省略します。
ZoomAPIテンプレートが使用できて便利です。

(postmanにて)
テンプレートのZoom Meeting API / users / List users を叩く
Authorization設定(一括設定推奨)
 Type: Bearer Token
 Token: 準備1で発行したJTWトークン
params
 status: active
 page_size: 30

参考:https://marketplace.zoom.us/docs/api-reference/zoom-api/methods/#operation/users

レスポンスのusers.idを確認します。

Postmanのレスポンス例
{
    "page_count": 1,
    "page_number": 1,
    "page_size": 30,
    "total_records": 1,
    "next_page_token": "",
    "users": [
        {
            "id": **********,
            "first_name": "****",
            "last_name": "****",
            "email": "****@****.com",
            "type": 2,
            "pmi": '**********',
            "timezone": "Asia/Tokyo",
            "verified": 1,
            "dept": "",
            "created_at": "20**-**-**T**:**:**Z",
            "last_login_time": "20**-**-**T**:**:**Z",
            "last_client_version": "*******",
            "pic_url": "https://us02web.zoom.us/p/*********",
            "language": "jp-JP",
            "phone_number": "",
            "status": "active",
            "role_id": "1"
        },
	]
}

3. クラウド録画情報を取得

録画情報をまとめて取得します。

(postmanにて)
テンプレートのZoom Meeting API / users / List All Recordings を叩く
Authorization設定
 上述
params
 page_size: 300
 mc: false
 trash: false
 from: yyyy-mm-dd(期間を指定)
 to: yyyy-mm-dd(期間を指定)
Path Variables
 userId: 準備2で取得したユーザーID

参考:https://marketplace.zoom.us/docs/api-reference/zoom-api/methods/#operation/recordingsList

注意
期間の指定は最大1ヶ月です。
1ヶ月を超える期間を指定した場合、API側で1ヶ月になるよう自動修正した値が返されます。

Postmanのレスポンス例
//期間中の録画1件の場合
{
    "from": "2022-05-01",
    "to": "2022-05-31",
    "page_count": 1,
    "page_size": 300,
    "total_records": 1,
    "next_page_token": "",
    "meetings": [
        {
            "uuid": "**********",
            "id": :"**********",
            "account_id": "**********",
            "host_id": "**********",
            "topic": "定例ミーティング",
            "type": 2,
            "start_time": "2022-05-30T11:23:51Z",
            "timezone": "Asia/Tokyo",
            "duration": 51,
            "total_size": 646961300,
            "recording_count": 2,
            "share_url": "https://us02web.zoom.us/rec/share/**********",
            "recording_files": [
                {
                    "id": "**********",
                    "meeting_id": "**********",
                    "recording_start": "2022-05-30T11:23:52Z",
                    "recording_end": "2022-05-30T12:24:24Z",
                    "file_type": "M4A",
                    "file_extension": "M4A",
                    "file_size": 49534472,
                    "play_url": "https://us02web.zoom.us/rec/play/**********",
                    "download_url": "https://us02web.zoom.us/rec/download/**********",
                    "status": "completed",
                    "recording_type": "audio_only"
                },
                {
                    "id": "**********",
                    "meeting_id": "**********",
                    "recording_start": "2022-05-30T11:23:52Z",
                    "recording_end": "2022-05-30T12:24:24Z",
                    "file_type": "MP4",
                    "file_extension": "MP4",
                    "file_size": 597426828,
                    "play_url": "https://us02web.zoom.us/rec/play/**********",
                    "download_url": "https://us02web.zoom.us/rec/download/**********",
                    "status": "completed",
                    "recording_type": "shared_screen_with_speaker_view"
                }
            ]
        }
	]
}

ダウンロード

準備3で取得した情報のなかに、download_urlが2個確認できますね。

上記の例ですと、1件のミーティングに対して、recording_typeが2種類あり

  • audio_only
  • shared_screen_with_speaker_view

それぞれのdownload_urlが発行されている状況です。
recording_typeの種類はこちら

このURLにトークン付与してdownload_url + ?access_token= + JWT tokenのようにブラウザで叩けば、ローカルにダウンロードすることが可能です。保存先は選択できず、自動で(macだとダウンロードフォルダに)ダウンロードされます。

保存先やファイル名を指定するためには、curlで取得します。

sample.php
$download_url = 'download_urlを記入';
$JWT_token = 'JWT tokenを記入';
$url =  $download_url . '?access_token=' . $JWT_token;
$dir_path = '保存先を指定';
$file_name = '拡張子を含むファイル名を指定';

exec("curl -L '" . $url  . "' -o '" . $dir_path . '/' . $file_name . "'");

これで指定のフォルダに録画データを保存することができました!
実際には、取得した情報からフォルダやファイル名の指定をしたいですよね。

それについては次の記事で書いていきます。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?