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

如何通过Google Classroom API获取待完成作业?请求优化咨询

优化Google Classroom待完成作业统计的请求效率

核心优化方案


1. 使用Google API批量请求(Batch Requests)

Google API支持将多个接口请求打包为单个HTTP请求发送,能直接把10门课程的20次请求压缩为1次,大幅降低请求成本。Python的google-api-python-client库原生支持批量请求处理。

示例代码框架:

from googleapiclient.http import BatchHttpRequest

def handle_course_work_response(request_id, response, exception):
    if exception is None:
        course_id = request_id.split("_")[0]
        course_work_cache[course_id] = response.get('courseWork', [])

def handle_submissions_response(request_id, response, exception):
    if exception is None:
        course_id = request_id.split("_")[0]
        submissions_cache[course_id] = response.get('studentSubmissions', [])

# 初始化批量请求及缓存容器
batch = BatchHttpRequest(callback=None)
course_work_cache = {}
submissions_cache = {}

# 遍历课程ID,添加请求到批量任务
for course_id in your_course_ids_list:
    # 请求仅返回已分配的作业
    batch.add(
        service.courses().courseWork().list(
            courseId=course_id,
            courseWorkStates=['ASSIGNED']
        ),
        callback=handle_course_work_response,
        request_id=f"{course_id}_work"
    )
    # 请求仅返回未提交的记录
    batch.add(
        service.courses().courseWork().studentSubmissions().list(
            courseId=course_id,
            userId='me',
            courseWorkId='-',
            states=['CREATED']
        ),
        callback=handle_submissions_response,
        request_id=f"{course_id}_subm"
    )

# 执行批量请求(仅1次HTTP调用)
batch.execute()

# 快速匹配待完成作业
for course_id, works in course_work_cache.items():
    submissions = submissions_cache.get(course_id, [])
    subm_map = {subm['courseWorkId']: subm for subm in submissions}
    for work in works:
        if work['id'] in subm_map:
            print(f"课程[{course_id}]待完成作业: {work['title']}")

2. 过滤请求返回数据

在API请求中添加状态过滤参数,减少不必要的数据传输和本地处理:

  • 调用courses().courseWork().list时,指定courseWorkStates=['ASSIGNED'],只返回已分配但未归档/删除的作业
  • 调用studentSubmissions().list时,指定states=['CREATED'],只返回未提交的记录

3. 本地缓存优化

由于脚本每5分钟执行一次,大部分作业状态不会频繁变化:

  • 缓存已确认完成的作业ID,后续请求直接跳过
  • 仅对临近截止时间的作业做状态校验,其他作业延长缓存周期

优化效果说明

  • 批量请求将请求次数从20次降至1次,直接减少95%的请求成本
  • 状态过滤减少API返回数据量,降低传输耗时和本地计算量
  • 本地缓存进一步减少不必要的API调用,适配周期性执行场景

内容的提问来源于stack exchange,提问作者Samarth Chauhan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 12:09:59