如何用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
相关产品推荐
相关产品推荐

