環境
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
を確認します。
{
"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ヶ月になるよう自動修正した値が返されます。
//期間中の録画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で取得します。
$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 . "'");
これで指定のフォルダに録画データを保存することができました!
実際には、取得した情報からフォルダやファイル名の指定をしたいですよね。
それについては次の記事で書いていきます。