Tạo biểu mẫu hoặc bài kiểm tra

Trang này mô tả cách thực hiện các tác vụ này liên quan đến biểu mẫu:

  • Tạo biểu mẫu mới
  • Tạo bản sao của biểu mẫu hiện có
  • Chuyển đổi biểu mẫu thành bài kiểm tra

Trước khi bắt đầu

Hãy làm những việc sau trước khi tiếp tục làm những việc trên trang này:

  • Hoàn tất quy trình uỷ quyền/xác thực và thiết lập thông tin xác thực theo hướng dẫn của Chương trình Người sử dụng sớm.
  • Đọc Tổng quan về API Biểu mẫu.

Tạo biểu mẫu mới

Quá trình tạo biểu mẫu ban đầu chỉ cần trường tiêu đề – mọi trường khác trong yêu cầu sẽ bị bỏ qua. Để xây dựng nội dung và siêu dữ liệu cho một biểu mẫu hoặc tiến hành cập nhật, hãy sử dụng phương thức batchUpdate(). Hãy xem phần Cập nhật biểu mẫu hoặc bài kiểm tra để biết thêm thông tin.

Kiến trúc chuyển trạng thái đại diện (REST)

Gọi phương thức forms.create() chỉ có một tiêu đề.

Nội dung yêu cầu mẫu

{
  "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;

Tạo bản sao của biểu mẫu hiện có

Bạn có thể sao chép biểu mẫu hiện có bằng API Google Drive để dễ dàng sử dụng lại nội dung. Bạn có thể tìm thấy mã biểu mẫu trong URL của Google Biểu mẫu:

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

Kiến trúc chuyển trạng thái đại diện (REST)

Gọi phương thức files.copy() của API Google Drive bằng mã của biểu mẫu bạn muốn sao chép.

Python

form/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()

Chuyển đổi biểu mẫu thành bài kiểm tra

Để tạo bài kiểm tra, trước tiên, hãy tạo một biểu mẫu như mô tả ở trên, sau đó cập nhật các chế độ cài đặt của biểu mẫu đó. Bản cập nhật yêu cầu mã biểu mẫu.

Kiến trúc chuyển trạng thái đại diện (REST)

Gọi phương thức batch.update() trên biểu mẫu hiện có để đặt chế độ cài đặt isQuiz thành true.

Nội dung yêu cầu mẫu

{
  "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;

Các bước tiếp theo

Bạn có thể thử một số bước tiếp theo sau đây: