You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何借助Google Classroom API与Drive API批量复制课程及云端文件

实现Google Classroom课程批量复制的方案(结合Classroom API + Drive API)

由于Google Classroom API未提供直接的课程复制接口,我们可以通过拆解流程,结合Classroom API和Drive API手动实现批量复制课程及对应Drive文件的功能,核心思路是「创建新课程→复制原课程Drive内容→关联内容到新课程」,具体步骤如下:

1. 前置准备

  • 启用Google Classroom API和Google Drive API:在Google Cloud控制台中搜索并启用这两个API
  • 配置OAuth2权限范围:需要申请以下权限:
    • https://www.googleapis.com/auth/classroom.courses(创建/修改课程)
    • https://www.googleapis.com/auth/drive(复制Drive文件/文件夹)
  • 确保执行账号拥有原课程的编辑权限,以及创建新课程的权限

2. 具体实现步骤

步骤1:获取原课程信息及关联的Drive文件夹

调用Classroom API的courses.get接口,获取原课程的基本信息和对应的教师文件夹ID(该文件夹存储课程的所有材料):

from googleapiclient.discovery import build

# 初始化Classroom服务(需提前完成OAuth2认证)
classroom_service = build('classroom', 'v1', credentials=creds)

# 获取原课程详情
ORIGINAL_COURSE_ID = "原课程ID"
original_course = classroom_service.courses().get(id=ORIGINAL_COURSE_ID).execute()
# 提取原课程的Drive文件夹ID
original_drive_folder_id = original_course['teacherFolder']['id']

步骤2:创建新的Google Classroom课程

基于原课程的信息,调用courses.create接口创建新课程,可复用原课程的名称、描述、教室等字段(注意部分系统自动生成的字段如enrollmentCode无法手动设置):

# 构造新课程的请求体
new_course_body = {
    'name': f"{original_course['name']} - 副本",
    'description': original_course.get('description', ''),
    'room': original_course.get('room', ''),
    'section': original_course.get('section', ''),
    'courseState': 'ACTIVE'  # 设置课程状态为激活
}

# 创建新课程
new_course = classroom_service.courses().create(body=new_course_body).execute()
new_course_id = new_course['id']
# 提取新课程的默认教师文件夹ID
new_teacher_folder_id = new_course['teacherFolder']['id']

步骤3:复制原课程的Drive文件夹及所有内容

Drive API的files.copy接口默认只复制单个文件/文件夹,不会递归复制子内容,因此需要编写递归函数来完整复制整个文件夹结构:

# 初始化Drive服务(需提前完成OAuth2认证)
drive_service = build('drive', 'v3', credentials=creds)

def copy_drive_contents(source_folder_id, target_folder_id):
    # 查询源文件夹下的所有非垃圾文件/文件夹
    results = drive_service.files().list(
        q=f"'{source_folder_id}' in parents and trashed=false",
        fields="files(id, name, mimeType)"
    ).execute()
    items = results.get('files', [])

    for item in items:
        if item['mimeType'] == 'application/vnd.google-apps.folder':
            # 先复制子文件夹
            new_subfolder = drive_service.files().copy(
                fileId=item['id'],
                body={'name': item['name'], 'parents': [target_folder_id]}
            ).execute()
            # 递归复制子文件夹内的内容
            copy_drive_contents(item['id'], new_subfolder['id'])
        else:
            # 复制单个文件
            drive_service.files().copy(
                fileId=item['id'],
                body={'name': item['name'], 'parents': [target_folder_id]}
            ).execute()

# 调用函数,将原课程Drive内容复制到新课程的默认教师文件夹
copy_drive_contents(original_drive_folder_id, new_teacher_folder_id)

步骤4:批量处理扩展

如果需要批量复制多个课程,只需遍历原课程ID列表,循环执行上述步骤即可:

# 示例:批量复制课程列表
original_course_ids = ["课程ID1", "课程ID2", "课程ID3"]

for course_id in original_course_ids:
    # 重复步骤1-3的逻辑,此处省略具体代码
    pass

3. 关键注意事项

  • API配额限制:Classroom API的courses.create接口每日配额为1000次,Drive API的复制操作也有速率限制,建议添加指数退避重试机制处理请求失败的情况
  • 文件所有权:复制后的文件所有权属于执行API的账号,若需转移给其他教师,可调用Drive API的permissions.create接口添加权限
  • 课程附加内容复制:如果需要复制原课程的作业、评分规则或学生名单,需额外调用对应的Classroom API接口(如courses.courseWork.copy、courses.students.create),注意需符合学校的隐私政策
  • 错误处理:需添加日志记录,记录每个课程复制的状态,便于后续排查失败的任务

内容的提问来源于stack exchange,提问作者Bửu Đoàn Hưng

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 23:36:19