יצירת טופס או בוחן

בדף הזה נסביר איך לבצע את הפעולות הבאות שקשורות לטופס:

  • יצירת טופס חדש
  • שכפול של טופס קיים
  • המרת טופס לבוחן

לפני שמתחילים

לפני שממשיכים במשימות שבדף הזה, צריך לבצע את המשימות הבאות:

יצירת טופס חדש

ביצירה הראשונית של טופס נדרש רק שדה כותרת – כל שדה אחר בבקשה יהיה מבוטל. כדי להוסיף תוכן ומטא-נתונים לטופס או לבצע בו עדכונים, משתמשים בשיטה batchUpdate(). למידע נוסף, ראו עדכון טופס או בוחן.

REST

קוראים לשיטה forms.create() עם כותרת בלבד.

דוגמה לגוף הבקשה

{   "info": {       "title": "My new form"   } } 

Python

forms/snippets/create_form.py
from apiclient import discovery from httplib2 import Http from oauth2client import client, file, tools  SCOPES = "https://www.googleapis.com/auth/drive" DISCOVERY_DOC = "https://forms.googleapis.com/$discovery/rest?version=v1"  store = file.Storage("token.json") creds = None if not creds or creds.invalid:   flow = client.flow_from_clientsecrets("client_secrets.json", SCOPES)   creds = tools.run_flow(flow, store)  form_service = discovery.build(     "forms",     "v1",     http=creds.authorize(Http()),     discoveryServiceUrl=DISCOVERY_DOC,     static_discovery=False, )  form = {     "info": {         "title": "My new form",     }, } # Prints the details of the sample form result = form_service.forms().create(body=form).execute() print(result)

Node.js

forms/snippets/create_form.js
'use strict';  const path = require('path'); const google = require('@googleapis/forms'); const {authenticate} = require('@google-cloud/local-auth');  async function runSample(query) {   const authClient = await authenticate({     keyfilePath: path.join(__dirname, 'credentials.json'),     scopes: 'https://www.googleapis.com/auth/drive',   });   const forms = google.forms({     version: 'v1',     auth: authClient,   });   const newForm = {     info: {       title: 'Creating a new form in Node',     },   };   const res = await forms.forms.create({     requestBody: newForm,   });   console.log(res.data);   return res.data; }  if (module === require.main) {   runSample().catch(console.error); } module.exports = runSample;

שכפול של טופס קיים

אתם יכולים לשכפל טופס קיים באמצעות Google Drive API כדי להקל על שימוש חוזר בתוכן. מזהה הטופס מופיע בכתובת ה-URL של Google Forms:

https://docs.google.com/forms/d/FORM_ID/edit

REST

קוראים לשיטה files.copy() של Google Drive API עם המזהה של הטופס שרוצים להעתיק.

Python

forms/snippets/duplicate_form.py
import os.path  from google.auth.transport.requests import Request from google.oauth2.credentials import Credentials from google_auth_oauthlib.flow import InstalledAppFlow from googleapiclient.discovery import build  # If modifying these scopes, delete the file token.json. SCOPES = ["https://www.googleapis.com/auth/drive"]   def main():   """Shows copy file example in Drive v3 API.   Prints the name, id and other data of the copied file.   """   creds = None   if os.path.exists("token.json"):     creds = Credentials.from_authorized_user_file("token.json", SCOPES)   # If there are no (valid) credentials available, let the user log in.   if not creds or not creds.valid:     if creds and creds.expired and creds.refresh_token:       creds.refresh(Request())     else:       flow = InstalledAppFlow.from_client_secrets_file(           "client_secrets.json", SCOPES       )       creds = flow.run_local_server(port=0)     # Save the credentials for the next run     with open("token.json", "w") as token:       token.write(creds.to_json())    service = build("drive", "v3", credentials=creds)    # Call the Drive v3 API   origin_file_id = "1ox-6vHFeKpC6mon-tL5ygBC8zpbTnTp76JCZdIg80hA"  # example ID   copied_file = {"title": "my_copy"}   results = (       service.files().copy(fileId=origin_file_id, body=copied_file).execute()   )   print(results)   if __name__ == "__main__":   main()

המרת טופס לבוחן

כדי ליצור בוחן, קודם יוצרים טופס כפי שמתואר בקטע יצירת טופס חדש, ואז מעדכנים את ההגדרות של הטופס. כדי לבצע את העדכון, צריך את מזהה הטופס.

REST

כדי להגדיר את ההגדרה isQuiz כ-true, צריך לבצע קריאה ל-method‏ batch.update() בטופס קיים.

דוגמה לגוף הבקשה

{   "requests": [     {       "updateSettings": {         "settings": {           "quizSettings": {             "isQuiz": True           }         },        "updateMask": "quizSettings.isQuiz"       }     }   ] } 

Python

forms/snippets/convert_form.py
from apiclient import discovery from httplib2 import Http from oauth2client import client, file, tools  SCOPES = "https://www.googleapis.com/auth/forms.body" DISCOVERY_DOC = "https://forms.googleapis.com/$discovery/rest?version=v1"  store = file.Storage("token.json") creds = None if not creds or creds.invalid:   flow = client.flow_from_clientsecrets("client_secrets.json", SCOPES)   creds = tools.run_flow(flow, store)  form_service = discovery.build(     "forms",     "v1",     http=creds.authorize(Http()),     discoveryServiceUrl=DISCOVERY_DOC,     static_discovery=False, )  form = {     "info": {         "title": "My new quiz",     } }  # Creates the initial form result = form_service.forms().create(body=form).execute()  # JSON to convert the form into a quiz update = {     "requests": [         {             "updateSettings": {                 "settings": {"quizSettings": {"isQuiz": True}},                 "updateMask": "quizSettings.isQuiz",             }         }     ] }  # Converts the form into a quiz question_setting = (     form_service.forms()     .batchUpdate(formId=result["formId"], body=update)     .execute() )  # Print the result to see it's now a quiz getresult = form_service.forms().get(formId=result["formId"]).execute() print(getresult)

Node.js

forms/snippets/convert_form.js
'use strict';  const path = require('path'); const google = require('@googleapis/forms'); const {authenticate} = require('@google-cloud/local-auth');  async function runSample(query) {   const authClient = await authenticate({     keyfilePath: path.join(__dirname, 'credentials.json'),     scopes: 'https://www.googleapis.com/auth/drive',   });   const forms = google.forms({     version: 'v1',     auth: authClient,   });   const newForm = {     info: {       title: 'Creating a new form for batchUpdate in Node',     },   };   const createResponse = await forms.forms.create({     requestBody: newForm,   });   console.log('New formId was: ' + createResponse.data.formId);    // Request body to convert form to a quiz   const updateRequest = {     requests: [       {         updateSettings: {           settings: {             quizSettings: {               isQuiz: true,             },           },           updateMask: 'quizSettings.isQuiz',         },       },     ],   };   const res = await forms.forms.batchUpdate({     formId: createResponse.data.formId,     requestBody: updateRequest,   });   console.log(res.data);   return res.data; }  if (module === require.main) {   runSample().catch(console.error); } module.exports = runSample;

השלבים הבאים

הנה כמה שלבים אפשריים שאפשר לנסות: