Molybdenum

あれこれ記録がてらに書いていきます。

Zoom APIを触ってみる

先日、とあるオンライン勉強会にて、運営の方がZoom APIを使って来場者とConnpassページとの突合を楽にしたいと仰っていました。
たぶんAPI提供されてるんじゃないかなと踏んでいたら予想通りあり、簡単に取得できたのでメモ書きします。

今回の場合、勉強会の運営側でレジストレーション機能を使って氏名やConnpass IDの入力後に入室できるようにしているみたいなので、少なくともその登録内容からconnpass IDとZoom上での名前を全員分取得できたらゴールとします。
なお、レジストレーション機能の詳細はこちら

ZoomのAPIリファレンスはこちらにありました。APIとかDeveloper向けサイトでは定番の英語で書かれているやつです。 探してみるとレジストレーションに関するAPIを発見しましたのでリファレンスに書かれている内容に従って叩いていきましょう。
なお、本稿の内容は2020年5月24日現在のものであるため今後変更が発生するかもしれません。

どうやらGETでパラメータを添えてリクエスト投げると帰ってくるみたいなので、とりあえずcurlでやってみましょう。
ZoomのApp Marletplaceにアクセスし、ログインした上で右の "Develop" からBuild Appを押して、作成画面へいきます。

f:id:forestython:20200524213109p:plain

JWTのCreateボタンを押します(下記画面は作成後のため一部異なります)。
※ JWTはJson Web Token の略です。

f:id:forestython:20200524212612p:plain

App Credentials の下部にある、View JWT Tokenで JWT Tokenをコピーします。

f:id:forestython:20200524212910p:plain

コピーしたJWT Token(<JWT Token>)と、取得したいミーティングのID(<Meeting ID>)を下記のコマンドにいれて実行。

kmori@kmoriMacbookPro $ curl -H 'Authorization: Bearer <JWT Token>' https://api.zoom.us/v2/meetings/<Meeting ID>/registrants

そうするとあれこれ情報が返ってくるはずです。
下記はサンプルですが、実際の戻り値を改行やインテンドによる整形をしたものです。

{
    "page_count":1,
    "page_number":1,
    "page_size":30,
    "total_records":90,
    "registrants":[
        {
            "id":"idABCD",
            "first_name":"AB",
            "last_name":"CD",
            "email":"abcd@hogehoge.com",
            "address":"",
            "city":"",
            "country":"",
            "state":"",
            "phone":"",
            "industry":"",
            "org":"",
            "job_title":"",
            "purchasing_time_frame":"",
            "role_in_purchase_process":"",
            "no_of_employees":"",
            "comments":"",
            "custom_questions":[
                {
                    "title":"connpass IDを記入してください。",
                    "value":"id_ABCD"
                }
            ],
            "status":"approved",
            "create_time":"2020-05-23T18:36:52Z",
            "join_url":"https://us02web.zoom.us/w/honyarara"
        },
        {
            "id":"idXYZ",
            "first_name":"XYZ",
            "email":"xyz@hogehoge.com",
            "address":"",
            "city":"",
            "country":"",
            "zip":"",
            "state":"",
            "phone":"",
            "industry":"",
            "org":"",
            "job_title":"",
            "purchasing_time_frame":"",
            "role_in_purchase_process":"",
            "no_of_employees":"",
            "comments":"",
            "custom_questions":[
                {
                    "title":"connpass IDを記入してください。",
                    "value":"id_XYZ"
                }
            ],
            "status":"approved",
            "create_time":"2020-05-23T18:36:52Z",
            "join_url":"https://us02web.zoom.us/w/honyarara"
        }
    ]
}

どうやらレスポンス自体は、

Responses
page_count
page_number
page_size
total_records
registrants
status
create_time
join_url

の8項目で構成されており更に、registrantsの中に

registrants
id
first_name
last_name
email
address
city
country
state
phone
industry
org
job_title
purchasing_time_frame
role_in_purchase_process
no_of_employees
comments
custom_questions

が内包されていて、更にcustom_questionsの中に

custom_questions
title
value

が内包されている模様です。
今回の場合、カスタムの質問でconnpassのIDを聞いているため、custom_questionsの中身まで必要となりますが、ここはパース芸でなんとかなる話なので、ゴールとしているconnpass IDと名前は取得できるので無事におしまい。

さてこのAPIですが、1回で返せる値の個数を示すpage_sizeがデフォルトだと30となっています。 そのため、デフォルトのままだと30人より多い会議では全員分取得できません。なので参加者数に応じてここは調整しましょう(なお最大値は300となっています)。
今回の勉強会では定員が100人であったためpage_sizeを100としてGETしてみましょう。

kmori@kmoriMacbookPro $ curl -H 'Authorization: Bearer <JWT Token>' https://api.zoom.us/v2/meetings/<Meeting ID>/registrants\?page_size=100

これで無事に全員分取得できましたとさ。めでたしめでたし。

他にもZoomのAPIでは会議を開催したり、IMのメッセージを取得・送信したりできるそうです。また、MarketplaceではSlack連携やWebhook等もできるみたいなので、可能性が拡がっていますね。

Enjoy!