These are several related, but iterative approaches to scheduling, documenting, and downloading Zoom meetings for large-scale events. They were written on-the-fly and as such currently have no error handling and conform only to the problems I faced during my most recent conference technology experience. Thus, they are shared out without warranty or support (though I'd like to make them better over time). The JSON to CSV tools use Postman as a primary driver and also require the ResponseToFile-Postman script(s). New versions of Postman allow you to save the JSON responses from Runner call sets, so the extra software/setup may be unnecesary.
The first two scripts assume that you're using ResponseToFile-Postman. The others do not require that software, but have their own dependencies.
- Create an OAuth app on the Zoom Marketplace to serve your purposes. Scopes should include creating webinars and meetings. I opted to allow for viewing of these as well.
- Figure out your OAuth workflow -- using the built-in token retriever in Postman was very useful. If you opt for this route, set the token config to authenticate via browser and ensure the Zoom app's callback URL matches what's in Postman, otherwise the authentication will fail. NOW PROVIDED: A Python Zoom OAuth2 workflow -- see zoom_oauth.py.
- Install the ResponseToFile-Postman program. Learn how to run the local server and test it with a few calls, particularly using the appendFile mode and multiple calls at once (i.e, Runner). Examine the JSON files and see that the original program merely pastes the output to the file rather than writing readable JSON.***
*** Again, this may not be necessary for all functions.
I could not figure out how to get ResponseToFile-Postman to actually write a CSV so I wrote this script.
- The script takes two arguments, the input JSON file and the output CSV file (include your file extension).
- Reads in the JSON file written by the modified ResponseToFile-Postman script.
- Adds brackets, removes newline and comma at end of file and writes a new temp file. NOTE: Brackets "[]" are added to make this a JSON array so json.load functions properly Newline, comma at EOF are removed to ensure json.load functions properly
- Writes new CSV with proper newlines and columns
Usage: ./postman_jsontocsv.py [input-file] [outputfile]
- Two arguments, input JSON from Postman that returns cloud recordings and destination file.
- SEE postman_jsontoCSV.py walkthrough
Usage: ./cloud_rec_json-to-csv.py [input-file] [outputfile]
NOTE: Depends on rauth Python library (may be unmaintained -- will search for better alternative)
A Python script, defines a function that either fetches a token or refreshes an existing token. Not terribly secure, use at your own risk.
- Checks for existing refresh token in JSON credentials file
- If present: a. Sends a request to Zoom API to renew token authorization b. Writes refresh token to JSON creds file from API response c. Returns Zoom OAuth2 token
- If not present: a. Sends request for authorization to Zoom b. Opens web browser to Zoom + redirect URL c. Requests user input of redirect URL (includes authorization code for token request) d. Sends a request for an OAuth2 token using authorization code from #4c e. Writes refresh token to JSON creds file from API response f. Returns Zoom OAuth2 token
Usage: N/A (used in download_account_recordings) -- can be used on its own if needed
NOTE: Dependency on zoom_oauth.py and Python requests library. Requires some configuration such as output dir, dates, CSV log file name, Zoom account ID (if not using "me")...
- Uses zoom_oauth.py to get an Oauth2 token or refresh an existing token.
- Grabs a list of cloud recordings from an account -- CURRENTLY ACCOUNT LEVEL ONLY, MAX 300 RECORDINGS
- Documents the JSON response for each recording in a CSV
- Downloads 3 files (if present, must be "completed" status): MP4 recording, TXT chat file, VTT audio transcript
- Renames files (using "topic" from API response) to alphanumeric, replaces illegal characters with hyphens (regular expression can be customized)
- Creates folders for each recording (using "topic" from API response) w/ same replacement scheme as #5
Usage: ./download_account_recordings.py
Here's the collection I used: https://marketplace.zoom.us/docs/guides/guides/postman/using-postman-to-test-zoom-apis
users > {user Id} > meetings > [POST] Create a Meeting users > {user Id} > webinars > [POST] Create a Webinar (requires some modification of sample CSV) meetings > [GET] Get a Meeting (need 10-digit numeric meeting ID) webinars > [GET] Get a Webinar (used to get Start URL for webinars)
I sent meeting settings as raw JSON, as that's the only way I could get it to work. Check the meeting_settings.json file.
Also included here is the modified ResponseToFile-Postman script.js. Consult the original project for usage.
I've included a sample CSV for use with the Create a Meeting Endpoint.