diff --git a/README.md b/README.md index 808c811a..6c65498b 100644 --- a/README.md +++ b/README.md @@ -37,6 +37,11 @@ Perform mail merges from plain text or Google Sheets data sources - [Quickstart](https://developers.google.com/drive/v3/web/quickstart/python) - [DriveApp](drive/driveapp): A simple app that uploads a file to Google Drive. +### Forms + +- [Quickstart](https://developers.google.com/forms/api/quickstart/python) +- [Snippets](https://developers.google.com/forms/api/guides) + ### Gmail - [Quickstart](https://developers.google.com/gmail/api/quickstart/python) diff --git a/forms/quickstart/README.md b/forms/quickstart/README.md new file mode 100644 index 00000000..bbcb3bdd --- /dev/null +++ b/forms/quickstart/README.md @@ -0,0 +1,18 @@ +# Google Forms Python Quickstart + +Complete the steps described in the [Google Forms Python Quickstart]( +https://developers.google.com/forms/quickstart/python), and in +about five minutes you'll have a simple Python command-line application that +makes requests to the Google Forms API. + +## Install + +```shell +pip install -r requirements.txt +``` + +## Run + +```shell +python quickstart.py +``` diff --git a/forms/quickstart/quickstart.py b/forms/quickstart/quickstart.py new file mode 100644 index 00000000..80bb64b2 --- /dev/null +++ b/forms/quickstart/quickstart.py @@ -0,0 +1,80 @@ +# Copyright 2021 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# [START forms_quickstart] +from __future__ import print_function + +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) + +# Request body for creating a form +NEW_FORM = { + "info": { + "title": "Quickstart form", + } +} + +# Request body to add a multiple-choice question +NEW_QUESTION = { + "requests": [{ + "createItem": { + "item": { + "title": "In what year did the United States land a mission on the moon?", + "questionItem": { + "question": { + "required": True, + "choiceQuestion": { + "type": "RADIO", + "options": [ + {"value": "1965"}, + {"value": "1967"}, + {"value": "1969"}, + {"value": "1971"} + ], + "shuffle": True + } + } + }, + }, + "location": { + "index": 0 + } + } + }] +} + +# Creates the initial form +result = form_service.forms().create(body=NEW_FORM).execute() + +# Adds the question to the form +question_setting = form_service.forms().batchUpdate(formId=result["formId"], body=NEW_QUESTION).execute() + +# Prints the result to show the question has been added +get_result = form_service.forms().get(formId=result["formId"]).execute() +print(get_result) + +# [END forms_quickstart] \ No newline at end of file diff --git a/forms/quickstart/requirements.txt b/forms/quickstart/requirements.txt new file mode 100644 index 00000000..b50bc3c8 --- /dev/null +++ b/forms/quickstart/requirements.txt @@ -0,0 +1,3 @@ +google-api-python-client==1.7.9 +google-auth-httplib2==0.0.3 +google-auth-oauthlib==0.4.0 \ No newline at end of file diff --git a/forms/snippets/README.md b/forms/snippets/README.md deleted file mode 100644 index bf5f8862..00000000 --- a/forms/snippets/README.md +++ /dev/null @@ -1,5 +0,0 @@ -# Google Forms API - -The Google Forms API is currently in Restricted Beta. To use the API and these samples prior to General Availability, -your Google Cloud project must be allowlisted. To request that your project be allowlisted, complete the -[Early Adopter Program application](https://developers.google.com/forms/api/eap). diff --git a/forms/snippets/add_item.py b/forms/snippets/add_item.py index b2a9f242..964404b9 100644 --- a/forms/snippets/add_item.py +++ b/forms/snippets/add_item.py @@ -20,16 +20,15 @@ from oauth2client import client, file, tools SCOPES = "https://www.googleapis.com/auth/forms.body" -API_KEY = "" -DISCOVERY_DOC = f"https://forms.googleapis.com/$discovery/rest?version=v1beta&key={API_KEY}&labels=FORMS_BETA_TESTERS" +DISCOVERY_DOC = "https://forms.googleapis.com/$discovery/rest?version=v1" -store = file.Storage('credentials.json') +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', 'v1beta', http=creds.authorize( +form_service = discovery.build('forms', 'v1', http=creds.authorize( Http()), discoveryServiceUrl=DISCOVERY_DOC, static_discovery=False) form = { diff --git a/forms/snippets/convert_form.py b/forms/snippets/convert_form.py index 2c68d97a..bfb6ea8a 100644 --- a/forms/snippets/convert_form.py +++ b/forms/snippets/convert_form.py @@ -20,21 +20,20 @@ from oauth2client import client, file, tools SCOPES = "https://www.googleapis.com/auth/forms.body" -API_KEY = "" -DISCOVERY_DOC = f"https://forms.googleapis.com/$discovery/rest?version=v1beta&key={API_KEY}&labels=FORMS_BETA_TESTERS" +DISCOVERY_DOC = "https://forms.googleapis.com/$discovery/rest?version=v1" -store = file.Storage('credentials.json') +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', 'v1beta', http=creds.authorize( +form_service = discovery.build('forms', 'v1', http=creds.authorize( Http()), discoveryServiceUrl=DISCOVERY_DOC, static_discovery=False) form = { "info": { - "title": "My new form", + "title": "My new quiz", } } diff --git a/forms/snippets/create_form.py b/forms/snippets/create_form.py index ec61385a..97e1a767 100644 --- a/forms/snippets/create_form.py +++ b/forms/snippets/create_form.py @@ -20,16 +20,15 @@ from oauth2client import client, file, tools SCOPES = "https://www.googleapis.com/auth/drive" -API_KEY = "" -DISCOVERY_DOC = f"https://forms.googleapis.com/$discovery/rest?version=v1beta&key={API_KEY}&labels=FORMS_BETA_TESTERS" +DISCOVERY_DOC = "https://forms.googleapis.com/$discovery/rest?version=v1" -store = file.Storage('credentials.json') +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', 'v1beta', http=creds.authorize( +form_service = discovery.build('forms', 'v1', http=creds.authorize( Http()), discoveryServiceUrl=DISCOVERY_DOC, static_discovery=False) form = { diff --git a/forms/snippets/create_watch.py b/forms/snippets/create_watch.py index 8dce58a2..5450d756 100644 --- a/forms/snippets/create_watch.py +++ b/forms/snippets/create_watch.py @@ -20,16 +20,15 @@ from oauth2client import client, file, tools SCOPES = "https://www.googleapis.com/auth/drive" -API_KEY = "" -DISCOVERY_DOC = f"https://forms.googleapis.com/$discovery/rest?version=v1beta&key={API_KEY}&labels=FORMS_BETA_TESTERS" +DISCOVERY_DOC = "https://forms.googleapis.com/$discovery/rest?version=v1" -store = file.Storage('credentials.json') +store = file.Storage('token.json') creds = None if not creds or creds.invalid: flow = client.flow_from_clientsecrets('client_secret.json', SCOPES) creds = tools.run_flow(flow, store) -service = discovery.build('forms', 'v1beta', http=creds.authorize( +service = discovery.build('forms', 'v1', http=creds.authorize( Http()), discoveryServiceUrl=DISCOVERY_DOC, static_discovery=False) watch = { diff --git a/forms/snippets/delete_watch.py b/forms/snippets/delete_watch.py index d493cf85..948fc8ed 100644 --- a/forms/snippets/delete_watch.py +++ b/forms/snippets/delete_watch.py @@ -20,15 +20,14 @@ from oauth2client import client, file, tools SCOPES = "https://www.googleapis.com/auth/drive" -API_KEY = "" -DISCOVERY_DOC = f"https://forms.googleapis.com/$discovery/rest?version=v1beta&key={API_KEY}&labels=FORMS_BETA_TESTERS" +DISCOVERY_DOC = "https://forms.googleapis.com/$discovery/rest?version=v1" -store = file.Storage('credentials.json') +store = file.Storage('token.json') creds = None if not creds or creds.invalid: flow = client.flow_from_clientsecrets('client_secret.json', SCOPES) creds = tools.run_flow(flow, store) -service = discovery.build('forms', 'v1beta', http=creds.authorize( +service = discovery.build('forms', 'v1', http=creds.authorize( Http()), discoveryServiceUrl=DISCOVERY_DOC, static_discovery=False) form_id = '' diff --git a/forms/snippets/list_watches.py b/forms/snippets/list_watches.py index 3a48832b..dcb36073 100644 --- a/forms/snippets/list_watches.py +++ b/forms/snippets/list_watches.py @@ -20,15 +20,14 @@ from oauth2client import client, file, tools SCOPES = "https://www.googleapis.com/auth/drive" -API_KEY = "" -DISCOVERY_DOC = f"https://forms.googleapis.com/$discovery/rest?version=v1beta&key={API_KEY}&labels=FORMS_BETA_TESTERS" +DISCOVERY_DOC = "https://forms.googleapis.com/$discovery/rest?version=v1" -store = file.Storage('credentials.json') +store = file.Storage('token.json') creds = None if not creds or creds.invalid: - flow = client.flow_from_clientsecrets('client_secret.json', SCOPES) + flow = client.flow_from_clientsecrets('client_secrets.json', SCOPES) creds = tools.run_flow(flow, store) -service = discovery.build('forms', 'v1beta', http=creds.authorize( +service = discovery.build('forms', 'v1', http=creds.authorize( Http()), discoveryServiceUrl=DISCOVERY_DOC, static_discovery=False) form_id = '' diff --git a/forms/snippets/renew_watch.py b/forms/snippets/renew_watch.py index 552ed63a..ef61df8d 100644 --- a/forms/snippets/renew_watch.py +++ b/forms/snippets/renew_watch.py @@ -20,15 +20,14 @@ from oauth2client import client, file, tools SCOPES = "https://www.googleapis.com/auth/drive" -API_KEY = "" -DISCOVERY_DOC = f"https://forms.googleapis.com/$discovery/rest?version=v1beta&key={API_KEY}&labels=FORMS_BETA_TESTERS" +DISCOVERY_DOC = "https://forms.googleapis.com/$discovery/rest?version=v1" -store = file.Storage('credentials.json') +store = file.Storage('token.json') creds = None if not creds or creds.invalid: - flow = client.flow_from_clientsecrets('client_secret.json', SCOPES) + flow = client.flow_from_clientsecrets('client_secrets.json', SCOPES) creds = tools.run_flow(flow, store) -service = discovery.build('forms', 'v1beta', http=creds.authorize( +service = discovery.build('forms', 'v1', http=creds.authorize( Http()), discoveryServiceUrl=DISCOVERY_DOC, static_discovery=False) form_id = '' diff --git a/forms/snippets/retrieve_all_responses.py b/forms/snippets/retrieve_all_responses.py index 234c7192..1cd7f340 100644 --- a/forms/snippets/retrieve_all_responses.py +++ b/forms/snippets/retrieve_all_responses.py @@ -20,15 +20,14 @@ from oauth2client import client, file, tools SCOPES = "https://www.googleapis.com/auth/forms.responses.readonly" -API_KEY = "" -DISCOVERY_DOC = f"https://forms.googleapis.com/$discovery/rest?version=v1beta&key={API_KEY}&labels=FORMS_BETA_TESTERS" +DISCOVERY_DOC = "https://forms.googleapis.com/$discovery/rest?version=v1" -store = file.Storage('credentials.json') +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) -service = discovery.build('forms', 'v1beta', http=creds.authorize( +service = discovery.build('forms', 'v1', http=creds.authorize( Http()), discoveryServiceUrl=DISCOVERY_DOC, static_discovery=False) # Prints the responses of your specified form: diff --git a/forms/snippets/retrieve_contents.py b/forms/snippets/retrieve_contents.py index 83b5e197..a7395143 100644 --- a/forms/snippets/retrieve_contents.py +++ b/forms/snippets/retrieve_contents.py @@ -20,15 +20,14 @@ from oauth2client import client, file, tools SCOPES = "https://www.googleapis.com/auth/forms.body.readonly" -API_KEY = "" -DISCOVERY_DOC = f"https://forms.googleapis.com/$discovery/rest?version=v1beta&key={API_KEY}&labels=FORMS_BETA_TESTERS" +DISCOVERY_DOC = "https://forms.googleapis.com/$discovery/rest?version=v1" -store = file.Storage('credentials.json') +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) -service = discovery.build('forms', 'v1beta', http=creds.authorize( +service = discovery.build('forms', 'v1', http=creds.authorize( Http()), discoveryServiceUrl=DISCOVERY_DOC, static_discovery=False) # Prints the title of the sample form: diff --git a/forms/snippets/retrieve_single_response.py b/forms/snippets/retrieve_single_response.py index c7bd7eb3..33501143 100644 --- a/forms/snippets/retrieve_single_response.py +++ b/forms/snippets/retrieve_single_response.py @@ -20,15 +20,14 @@ from oauth2client import client, file, tools SCOPES = "https://www.googleapis.com/auth/forms.responses.readonly" -API_KEY = "" -DISCOVERY_DOC = f"https://forms.googleapis.com/$discovery/rest?version=v1beta&key={API_KEY}&labels=FORMS_BETA_TESTERS" +DISCOVERY_DOC = "https://forms.googleapis.com/$discovery/rest?version=v1" -store = file.Storage('credentials.json') +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) -service = discovery.build('forms', 'v1beta', http=creds.authorize( +service = discovery.build('forms', 'v1', http=creds.authorize( Http()), discoveryServiceUrl=DISCOVERY_DOC, static_discovery=False) # Prints the specified response from your form: diff --git a/forms/snippets/update_form.py b/forms/snippets/update_form.py index b11df710..b5521d03 100644 --- a/forms/snippets/update_form.py +++ b/forms/snippets/update_form.py @@ -20,16 +20,15 @@ from oauth2client import client, file, tools SCOPES = "https://www.googleapis.com/auth/forms.body" -API_KEY = "" -DISCOVERY_DOC = f"https://forms.googleapis.com/$discovery/rest?version=v1beta&key={API_KEY}&labels=FORMS_BETA_TESTERS" +DISCOVERY_DOC = "https://forms.googleapis.com/$discovery/rest?version=v1" -store = file.Storage('credentials.json') +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', 'v1beta', http=creds.authorize( +form_service = discovery.build('forms', 'v1', http=creds.authorize( Http()), discoveryServiceUrl=DISCOVERY_DOC, static_discovery=False) form = {