Python で Cisco Webex Teams のスペースに所属するメンバー一覧を取得する
Python で webexteamssdk を使い、Webex Teams のスペース (≒ チャット) に参加しているメンバー一覧を取得するスクリプト例をメモしておきます。 Ubuntu 22.04LTS + Python 3.10.4 環境で動作確認しました。 メンバー取得出来るのは後の手順で作成する bot が所属しているスペースが対象です。
venv 環境の作成
作業用の venv 環境を作成します。
| mkdir webex-example
cd webex-example
python3 -m venv .venv
echo 'source .venv/bin/activate' > .envrc
direnv allow
python3 -m pip install --upgrade pandas pip webexteamssdk
|
サンプルスクリプト
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 | #!/usr/bin/env python3
import argparse
import configparser
import os
import pandas
from webexteamssdk import WebexTeamsAPI
parser = argparse.ArgumentParser(description="Retrieve chat room members.")
parser.add_argument("-c", "--csv", help="Output in CSV format")
args = parser.parse_args()
config = configparser.ConfigParser()
config.read(os.path.expanduser("~") + "/.webexrc")
BOT_ACCESS_TOKEN = config["settings"]["BOT_ACCESS_TOKEN"]
data = []
api = WebexTeamsAPI(access_token=BOT_ACCESS_TOKEN)
rooms = api.rooms.list()
for room in rooms:
members = api.memberships.list(room.id)
for member in members:
data.append([room.title, member.personDisplayName, member.personEmail])
df = pandas.DataFrame(data, columns=["Room", "Name", "Email"]).sort_values(
by=["Room", "Name"]
)
print(df.to_string(index=False))
if args.csv != None:
df.to_csv(args.csv, index=False)
|
アクセストークンの用意
Python スクリプトからスペースのメンバーを取得するには冒頭に記載した通り、スペースへ bot を参加させておく必要があります。 Python から Cisco Webex へメッセージを送信する に記載した内容に従い、webex for Developvers にログインし、bot を登録してアクセストークンを取得しておきます。 また、メンバー取得の対象にしたいスペースには bot をユーザとして追加しておきます。
アクセストークンは Python スクリプトを実行するユーザの ~/.webexrc
に、以下の内容で保存しておきます。 ACCESS-TOKEN
は実際の値に読み替えますが、ダブルクォートやシングルクォートで括らないようにします。 クォートしてしまうと Python の configparser で処理する際、クォートが含まれてしまい、意図しないエラーになってしまいます。
| [settings]
BOT_ACCESS_TOKEN = ACCESS-TOKEN
|
実行例
実行例は以下の通りです。
| # ./export-webex-members.py
Room Name Email
TestRoom1 Foo Bar foobar@example.com
TestRoom1 foo-bar-bot foobar@webex.bot
|
結果を CSV ファイルに保存したい場合は以下のように実行します。
| ./export-webex-members.py --csv result.csv
|