我正在创建一个MacOS应用,可在给定的Google Team Drive /文件夹中创建自定义文件夹层次结构。每次我运行应用程序时,它都会打开一个浏览器并要求用户登录并允许该应用程序访问。在接受时,应用程序会创建文件夹并按预期工作。但是,它每次都这样做,我很难找到如何保存用户的同意"因此,他们应该只在第一次运行应用程序时允许一次同意。我尝试了很多不同的选择,但我无处可去,所以我非常感谢你的帮助。
from google.oauth2.credentials import Credentials
from googleapiclient.discovery import build
from googleapiclient.errors import HttpError
from google_auth_oauthlib.flow import InstalledAppFlow
SCOPES = ['https://www.googleapis.com/auth/drive']
API_SERVICE_NAME = 'drive'
API_VERSION = 'v3'
def get_authenticated_service():
client_secrets = args["secrets"] #client_secrets.json file passed as "secrets" argument
flow = InstalledAppFlow.from_client_secrets_file(client_secrets, SCOPES)
credentials = flow.run_local_server(host='localhost',
port=8080,
authorization_prompt_message='Please visit this URL: {url}',
success_message='The auth flow is complete; you may close this window.',
open_browser=True)
return build(API_SERVICE_NAME, API_VERSION, credentials = credentials)
if __name__ == '__main__':
service = get_authenticated_service()
name = format_client_name()
create_folders(service, name)
我尝试使用此处的Google API客户端库(https://developers.google.com/api-client-library/python/guide/aaa_oauth),其中显示了存储,但是它没有google.oauth的任何说明,因为您无法使用oauth2client用google.oauth存储。我觉得它很简单,但我已经撞墙了。
答案 0 :(得分:1)
您可以使用oauth2client.file.Storage
将凭据存储在credentials.json
文件中以供将来检索。该函数在运行身份验证流之前检查本地存储的有效凭据。
我在下面的回购中附上了一个例子:
https://github.com/gsuitedevs/python-samples/blob/master/drive/quickstart/quickstart.py
# Copyright 2018 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
#
# http://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 drive_quickstart]
"""
Shows basic usage of the Drive v3 API.
Creates a Drive v3 API service and prints the names and ids of the last 10 files
the user has access to.
"""
from __future__ import print_function
from apiclient.discovery import build
from httplib2 import Http
from oauth2client import file, client, tools
# Setup the Drive v3 API
SCOPES = 'https://www.googleapis.com/auth/drive.metadata.readonly'
store = file.Storage('credentials.json')
creds = store.get()
if not creds or creds.invalid:
flow = client.flow_from_clientsecrets('client_secret.json', SCOPES)
creds = tools.run_flow(flow, store)
service = build('drive', 'v3', http=creds.authorize(Http()))
# Call the Drive v3 API
results = service.files().list(
pageSize=10, fields="nextPageToken, files(id, name)").execute()
items = results.get('files', [])
if not items:
print('No files found.')
else:
print('Files:')
for item in items:
print('{0} ({1})'.format(item['name'], item['id']))
# [END drive_quickstart]