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

如何用Python调用Google Forms API的batchUpdate修改URL与答案

使用Google Forms API的batchUpdate修改表单内容

已获取的表单结构

{
    'formId': '1q4pJMDtiLxQ2cjmLXxowqJ5VPfI68bUUo', 
    'info': {'title': 'PIXEL ', 'documentTitle': 'daily'}, 
    'settings': {'quizSettings': {'isQuiz': True}},
    'revisionId': '00000067', 
    'responderUri': 'https://docs.google.com/forms/d/e/1FAIpQLScap6ZdpOnWIyxWqZNXjlfWW9DgPe-Wv_CUtziWw/viewform', 
    'items': [
        {'itemId': '7c0ddb37', 'pageBreakItem': {}}, 
        {'itemId': '2870b06c', 'videoItem': {'video': {'youtubeUri': 'www.youtube.com/watch?v=Lt5HqPvM-eI', 'properties': {'alignment': 'LEFT', 'width': 320}}}},
        {'itemId': '381aedf6', 'questionGroupItem': {'questions': [{'questionId': '4d7f011e', 'required': True, 'rowQuestion': {'title': 'pick'}}], 'grid': {'columns': {'type': 'RADIO', 'options': [{'value': '1'}, {'value': '2'}, {'value': '3'}]}}}, 'title': 'pay'}, 
        {'itemId': '0f9dc00b', 'title': 'number', 'questionItem': {'question': {'questionId': '39523976', 'required': True, 
        'grading': {'correctAnswers': {'answers': [{'value':'1115'}]}}, 'textQuestion': {}}}}, 
        {'itemId': '0a12a42e', 'pageBreakItem': {}}, 
        {'itemId': '19640fea', 'videoItem': {'video': {'youtubeUri': 'www.youtube.com/watch?v=Lt5HqPvM-eI', 'properties': {'alignment': 'LEFT', 'width': 320}}}}, 
        {'itemId': '685ba545', 'questionGroupItem': {'questions': [{'questionId': '044f9f9b', 'required': True, 'rowQuestion': {'title': 'pick'}}], 'grid': {'columns': {'type': 'RADIO', 'options': [{'value': '1'}, {'value': '2'}, {'value': '3'}]}}}, 'title': 'pay'}, 
        {'itemId': '6a9d1b88', 'title': 'number', 'questionItem': {'question': {'questionId': '2199beb0', 'required': True, 
          'grading': {'correctAnswers': {'answers': [{'value': '1115'}]}}, 'textQuestion': {}}}}
    ]
}

需求

已通过Get接口获取上述表单信息,需用Python调用Google Forms API的batchUpdate方法,修改第一个视频问题的URL,以及第一个文本题的正确答案。

参考的官方示例代码

update = {
    "requests": [{
        "updateItem": {
            "item": {
                "title": "Homework video",
                "description": "Quizzes in Google Forms",
                "videoItem": {
                    "video": {
                        "youtubeUri": "https://www.youtube.com/watch?v=Lt5HqPvM-eI"
                    }
                }
            },
            "location": {
                "index": 0
            },
            "updateMask": "description,youtubeUri"
        }
    }]
}

question_setting = service.forms().batchUpdate(
    formId=form_id, body=update).execute()

实现方案

核心思路

batchUpdate支持在单个请求中执行多个修改操作,每个操作通过requests数组传递。定位表单项时,使用itemId比索引更可靠(避免表单结构变化导致索引失效),同时需通过updateMask明确指定要修改的字段路径。

完整代码示例

# 替换为目标表单ID
form_id = "1q4pJMDtiLxQ2cjmLXxowqJ5VPfI68bUUo"

update_requests = {
    "requests": [
        # 修改第一个视频问题的URL
        {
            "updateItem": {
                "itemId": "2870b06c",
                "item": {
                    "videoItem": {
                        "video": {
                            "youtubeUri": "https://www.youtube.com/watch?v=新的视频ID"
                        }
                    }
                },
                "updateMask": "videoItem.video.youtubeUri"
            }
        },
        # 修改第一个文本题的正确答案
        {
            "updateItem": {
                "itemId": "0f9dc00b",
                "item": {
                    "questionItem": {
                        "question": {
                            "grading": {
                                "correctAnswers": {
                                    "answers": [{"value": "新的正确答案"}]
                                }
                            }
                        }
                    }
                },
                "updateMask": "questionItem.question.grading.correctAnswers"
            }
        }
    ]
}

# 执行批量修改请求
result = service.forms().batchUpdate(formId=form_id, body=update_requests).execute()
print("修改完成:", result)

关键说明

  • 字段路径规则:updateMask中的路径需与表单项的层级结构完全对应,例如修改视频URL的路径为videoItem.video.youtubeUri,修改正确答案的路径为questionItem.question.grading.correctAnswers。
  • 批量操作:多个修改请求可放在requests数组中,API会按顺序执行所有操作。
  • 可靠性:使用itemId定位表单项,不受表单中添加/删除分页符、问题等操作的影响。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 12:20:41