AlteryxからJWT認証でZoom APIにアクセスして過去のミーティング履歴を取得する

2021.05.11

こんにちは。
データアナリティクス事業本部ソリューション部プリセールススペシャリストの兼本です。

弊社では在宅勤務を始めて2年が経過し、お客さまとのミーティングでもZoomを使ったWebミーティングが当たり前になってきました。
ZoomのアプリやWeb UIは皆さんも見慣れたものかと思いますが、Zoom APIを使用することでGUIアクセスなしにミーティング情報やユーザ情報を取得、あるいは、会議の作成や変更といった操作ができるのはあまり知られていないかもしれません。

そこで今回はAlteryxからZoom APIにアクセスして過去のミーティング履歴を取得するワークフローを作成します。Zoom APIでは認証方法としてOAuth2.0とJWTの2種類を用意していますが、今回はJWTを使用します。

JWT認証方式って何?という方はこちらをどうぞ。

また、Zoom APIの詳細について知りたい方はこちらをご覧ください。

事前準備

Zoom APIを利用するには、最初にアプリケーションを作成する必要があります。今回はZoom APIを使用しますが、恐らくOAuth2.0やJWTを使用する他のAPIを使用する場合でも同様の手順が必要になると思いますので、各APIのドキュメントに記載された手順に従ってアプリケーションの作成を進めてください。

  • ZoomのApp Marketplaceにアクセスし、右上のポッポアップメニューから「Develop>Build App」を選択します。

  • 作成するアプリケーションの種類を選択します。今回はJWTを選択します。

  • アプリケーションの登録名として任意の文字列を設定します。

  • アプリケーション登録者やコンタクト先などに次用な情報を入力して「Continue」を押下します。

  • 次の画面ではAPI KeyとSecretを取得することができます。これらの値はワークフロー実行時にJWT Tokenを生成するために必要な情報ですのでメモしておいてください。

  • 登録が完了するとアクティベートできたことを示す画面が表示されます。

ワークフローの作成

JWT認証によるZoom APIの実行に関しては、Alteryx Communityのディスカッションがありますので、こちらを参考にします。

JWT認証では、都度Tokenを生成するプロセスがちょっと厄介なんですが、このワークフローではPythonツールを使用して簡単なPythonコードを組み込むことで解決しています。用意されたツールだけで実現しようとすると複雑になりがちな処理をPythonやRのコードと組み合わせることでシンプルに実現できるのがAlteryxの良いところのひとつですね。

作成したワークフローはこちら。

一見複雑そうに見えますが、JWTの生成をしているのは左上の黄色くマークした4ツールのみで、あとはZoom APIを実行した応答結果のJSONデータの解析をしています。順番に見ていきます。

  • JWT Tokenの生成 JWT Tokenを生成する際にTokenの有効期間をエポック秒で指定する必要があります。この例ではフォーミュラツールで以下の計算式を実行して現在時刻に2分足した時間を有効期限としています。
datetimediff(datetimeadd(datetimenow(),2,'minutes'),"1970-01-01 00:00:00","seconds")

Zoom APIはタイムゾーンを考慮する必要ありませんでしたが、利用するAPIによってはタイムゾーンを考慮する必要があるようなのでご注意ください。

  • PythonツールでJWT Tokenの生成 この例ではPyJWTを使用してJWT Tokenを生成しています。4行目でパッケージのインストールをしていますが、ワークフロー実行時にライブラリが見つからないというエラーが表示される場合は、Alteryx Designerを一度終了し、管理者権限でAlteryx Designerを起動することをお試しください。

また、13行目の「YOUR API KEY」と「YOUR SECRET」の部分には最初にメモしておいたAPI KEYとSECRETを入力します。

from ayx import Package
from ayx import Alteryx
import pandas
Package.installPackages(['pyjwt'])
import jwt
from io import StringIO

table = Alteryx.read("#1")
print(table)

value = table.at[0, 'seconds']
value = int(value)
encoded = jwt.encode({"iss": "YOUR API KEY","exp": value}, 'YOUR SECRET', algorithm='HS256')
data = StringIO(encoded) 

df=pandas.read_csv(data,header=None)
Alteryx.write(df,1)

Zoom APIの実行

  • 生成したJWT TokenはHTTPヘッダにBearer xxxxxxxxxxxxx.yyyyyyyyyyyy.zzzzzzzzzzzz (A)という形式で付与する必要があります。そのため、フォーミュラツールで適切な文字列に加工しています。

  • ユーザリストの取得をするために、https://api.zoom.us/v2/users?page_size=300 (B)というURLを準備します。

  • ダウンロードツールでヘッダとして(A)のパラメータを付与して(B)のURLにアクセスします。

  • ミーティングのリスト(/users/{userId}/meetings)やウェビナーのリスト(/users/{userId}/webinars)はそれぞれ、API実行時に{userId}を指定する必要があるため、最初にユーザのリストを取得したうえで、それぞれのURLを生成し、APIを実行する処理を繰り返してます。

結果として、以下のようなデータを得ることができました。(実データのため、モザイク多めで申し訳ありません。)

まとめ

今回のエントリでは、AlteryxからJWT認証でZoom APIにアクセスして過去のミーティング履歴を取得する手法についてご紹介いたしました。
JWT Tokenを生成するプロセスに関してはZoom APIに限らず、ほかのアプリケーションやAPIでも応用できるテクニックだと思いますので、どなたかのお役に立てば幸いです。

以上、最後までお読みいただきありがとうございました。