Skip to content
Snippets Groups Projects
Commit 81070b5d authored by Martin Mareš's avatar Martin Mareš
Browse files

Initial experiments

parents
No related branches found
No related tags found
No related merge requests found
db.ddl 0 → 100644
CREATE TABLE zoom_users (
id serial PRIMARY KEY, -- our internal
user_id varchar(255) UNIQUE NOT NULL, -- Zoom's
email varchar(255) NOT NULL,
full_name varchar(255) NOT NULL
);
CREATE TABLE zoom_meetings (
id serial PRIMARY KEY, -- our internal
meeting_id int NOT NULL, -- Zoom's meeting ID (not unique for recurring meetings!)
uuid varchar(255) NOT NULL, -- Zoom's
host_id int NOT NULL REFERENCES zoom_users(id),
topic varchar(255) DEFAULT '',
type int NOT NULL, -- 1=instant, 2=scheduled, 3=recurring no time, 8=recurring fixed time
start_time timestamp NOT NULL,
duration int NOT NULL -- minutes
);
#!/usr/bin/env python3
import configparser
import json
from pprint import pprint
from zoomus import ZoomClient
import psycopg2
import psycopg2.extras
import time
import dateutil.parser
# import dateutil.tz
verbose = True
very_verbose = False
config = configparser.ConfigParser()
config.read('zoom.ini')
client = ZoomClient(config['api']['key'], config['api']['secret'])
db_conn = psycopg2.connect(dbname=config['db']['name'], user=config['db']['user'], password=config['db']['passwd'], host="127.0.0.1")
db = db_conn.cursor(cursor_factory=psycopg2.extras.NamedTupleCursor)
def parse_time(iso_time, tz_name):
utc = dateutil.parser.isoparse(iso_time)
# tz = dateutil.tz.gettz(tz_name)
# return utc.astimezone(tz)
return utc
def add_meeting(uid, meet):
if 'start_time' not in meet:
# Type 3 meetings (scheduled with no time) are ignored
return
db.execute("""
INSERT INTO zoom_meetings
(meeting_id, uuid, host_id, topic, type, start_time, duration)
VALUES (%s, %s, %s, %s, %s, %s, %s)
""", (
meet['id'],
meet['uuid'],
uid,
meet['topic'],
meet['type'],
parse_time(meet['start_time'], meet['timezone']),
meet['duration'],
))
def get_meetings(uid, user_id):
page_id = 1
num_pages = 999
expected_rec = 0
total_rec = 0
while page_id <= num_pages:
if verbose:
print(f"Fetching meetings for user {user_id}: page {page_id} of {num_pages}")
resp = client.meeting.list(user_id = user_id, type = 'upcoming', page_number = page_id)
resp.raise_for_status()
meeting_list = json.loads(resp.content)
if very_verbose:
pprint(meeting_list)
num_pages = meeting_list['page_count']
expected_rec = meeting_list['total_records']
for meet in meeting_list['meetings']:
add_meeting(uid, meet)
total_rec += 1
page_id += 1
time.sleep(0.2)
assert total_rec == expected_rec, "Unexpected number of records, probably because of race condition"
db.execute('DELETE FROM zoom_meetings')
db.execute("SELECT * FROM zoom_users")
users = db.fetchall()
for u in users:
get_meetings(u.id, u.user_id)
db_conn.commit()
#!/usr/bin/env python3
import configparser
import json
from pprint import pprint
from zoomus import ZoomClient
import psycopg2
config = configparser.ConfigParser()
config.read('zoom.ini')
client = ZoomClient(config['api']['key'], config['api']['secret'])
db_conn = psycopg2.connect(dbname=config['db']['name'], user=config['db']['user'], password=config['db']['passwd'], host="127.0.0.1")
resp = client.user.list(page_size = 300)
resp.raise_for_status()
user_list = json.loads(resp.content)
assert user_list['page_count'] == 1
# pprint(user_list)
with db_conn.cursor() as db:
for user in user_list['users']:
id = user['id']
db.execute("SELECT * FROM zoom_users WHERE user_id=%s", (id,))
if db.fetchone():
print(f"User {id}: Already present")
else:
print(f"User {id}: Creating")
db.execute("INSERT INTO zoom_users(user_id, email, full_name) VALUES (%s,%s,%s)",
(id, user['email'], user['first_name'] + ' ' + user['last_name']))
db_conn.commit()
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment