基于C#的ServiceAccount应用:定时检测组织用户Drive的Meet录制文件
基于C#的ServiceAccount应用下载Google Meet录制文件方案
可行性说明
完全可行。借助具备域范围权限的ServiceAccount,你可以模拟域内任意用户访问其Google Drive,搭配定时任务框架(比如Quartz.NET)就能实现周期性检测并下载Meet录制文件。
问题解答
1. 认证环节优化
不需要每次运行都重新认证。你可以把生成的access token存入数据库,同时记录token的过期时间(ServiceAccount生成的token默认有效期为1小时)。每次执行检测任务前,先检查数据库中存储的token是否仍在有效期内:
- 若未过期,直接取出使用;
- 若已过期,再通过ServiceAccount重新生成token并更新数据库中的记录。
在C#的Google.Apis.Auth库中,获取token时可以通过TokenResponse.ExpiresIn属性计算出准确的过期时间,方便后续判断。
2. 检测并下载组织内所有用户的Meet录制文件
按以下步骤实现核心逻辑:
- 获取域内用户列表:使用Admin SDK的Directory API,模拟域内超级管理员账号调用
Users.List接口,批量获取所有用户的邮箱或用户ID。 - 模拟用户身份访问Drive:对每个用户,通过ServiceAccount的
ImpersonateUser方法指定目标用户邮箱,创建对应的DriveService实例,以此身份访问该用户的Drive。 - 筛选Meet录制文件:
- 精准筛选:Google Meet录制文件默认存放在用户Drive的「Meet Recordings」文件夹中,可先定位该文件夹ID,再查询其中的文件;
- 通用筛选:用Drive API的搜索查询语句,比如
mimeType='video/mp4' and name contains 'Meet' and createdTime > '上次检测时间',既过滤出视频类型的Meet录制文件,又只获取上次检测后新增的文件。
- 避免重复下载:维护一个数据库表,记录每个用户已下载的文件ID、下载时间等信息,每次检测时只处理不在该表中的文件。
- 下载文件:调用Drive API的
Files.Get方法,通过Download()获取文件流,将流写入本地文件或指定存储系统。
内容的提问来源于stack exchange,提问作者elad weinbreand
相关产品推荐
相关产品推荐

