Manages uploading meetings from Zoom to YouTube; intended for Open Source Working Groups. Built specifically for the GraphQL working group, but is also used by the Grafast WG and could be used for your projects too?
Stable; has been working for the GraphQL Foundation for months. Recently adopted by the Grafast WG.
- Scans through Zoom recordings and YouTube videos and determine which have been uploaded and which have not
- Figure out from each recording which working group, and which meeting, it applies to
- Automatically ignore Zoom recordings that don't look sensible (too short, insufficient data, etc)
- When uploading:
- Assign to correct playlist
- Give consistent title
- Make sensible per-WG description
- Publish
- Add a link from the description to the meeting notes if appropriate
- Convert Zoom and/or YouTube transcripts to useful format and upload somewhere
- Add a cover image
- Allow updating previous recordings (e.g. customized descriptions/cover image/update title (if possible))
- Cut blank section from beginning of recordings, or add the "start point" to the description
- Add cards or end screen details
- Submit pull request to the meeting notes to add a link back to the specific YouTube video
- Notify Discord (or somewhere) that the video has been posted
First, run the init.sh
script:
./init.sh
Then:
If you're using this for the GraphQL WG, edit src/secrets.ts
and populate the
SECRET and TOKEN values from someone who knows them (likely @benjie!)
If you're not using this for the GraphQL WG, there's a few more steps:
Edit the src/secrets.ts
file and populate all of the placeholders, including
the seemingly hardcoded ones - see Generating Secrets below for instructions.
Edit src/constants.ts
and update the DEFAULT_UPLOAD_DESCRIPTION
,
ZOOM_USER_ID
(Zoom -> Profile > Account No.), YOUTUBE_CHANNEL_ID
,
workingGroups
and playlistIds
to match your setup. Every public video must
be in a playlist.
Run yarn start
. (As an optimization, future runs may use yarn quickstart
(which skips compilation) if you are absolutely certain that no code,
including the constants/settings, has changed.)
You will probably see authentication errors, and/or links to log in. Log in to
both links, then kill (ctrl-c) and restart (yarn start
) the process. (In
future we should make it so restarting the process is not needed.)
Follow the instructions on screen.
If you are not using this for the GraphQL project, then you will need to create
an "app" on both Zoom and Google so that you can use the APIs necessary to
perform the sync. Follow the steps below, and then remove the throw new Error
statement from src/secrets.ts
.
If there are mistakes in these instructions or you'd like to submit clarifications, please send a PR!
- Log in to https://marketplace.zoom.us/
- Click Develop > Build App (top right)
- Select "OAuth" as the type
- Pick a name, e.g. "MyProjectSync"
- Make the app "User-managed"
- Do not publish to the marketplace
- Copy the Client ID and Client Secret into
src/secrets.ts
asZOOM_CLIENT_ID
andZOOM_CLIENT_SECRET
respectively - Set the "Redirect URL for OAuth" to
https://localhost:6549/zoom/auth/redirect
, and add the same URL to the Allow List - Press "Continue" and set
Syncs recordings with YouTube
or similar for the short/long descriptions. Fill out Company Name and Developer Contact Information - Press "Continue" and copy the "Secret Token" into
src/secrets.ts
asZOOM_SECRET_TOKEN
- Press "Continue" then "+ Add Scopes" add
meeting:read
,recording:read
andrecording:write
scopes - "Continue"
That should do it.
- Log in to https://console.cloud.google.com/
- Create an organization if you haven't already (I guess... Kinda fuzzy on this step)
- Create a project, e.g.
MyProjectSync
- Wait for the project to be created, and then select that project as the active project (top left)
- Hamburger > APIs & Services > Enabled APIs & Services; then click "+ ENABLE APIS AND SERVICES"
- Search for and enable "YouTube Data API v3"
- Click the "CREATE CREDENTIALS" button, and create credentials for "User
data"; if asked (kinda fuzzy on this step too):
- Scopes: Add
https://www.googleapis.com/auth/youtube
,https://www.googleapis.com/auth/youtube.readonly
,https://www.googleapis.com/auth/youtube.upload
- Application type: Desktop app
- Name: MyProjectSync CLI
- Authorized redirect URIs:
https://localhost:6549/google/auth/redirect
- Scopes: Add
- Download the credentials and copy the
client_id
andclient_secret
intosrc/secrets.ts
asGOOGLE_CLIENT_ID
andGOOGLE_CLIENT_SECRET
respectively. - "Done"
- Under APIs & Services > OAuth consent screen, change User type to External and add your own account as a test user.