#python #google-drive-api
Вопрос:
У меня ошибка с API Google Диска. Я получаю ключевую ошибку для «client_secret». Большая часть этого кода взята прямо из документации Google. У кого-нибудь еще была эта проблема и/или кто знает решение?
Код:
from __future__ import print_function
import os.path
from googleapiclient.discovery import build
from google_auth_oauthlib.flow import InstalledAppFlow
from google.auth.transport.requests import Request
from google.oauth2.credentials import Credentials
# If modifying these scopes, delete the file token.json.
SCOPES = ['https://www.googleapis.com/auth/drive.metadata.readonly']
def main():
"""Shows basic usage of the Drive v3 API.
Prints the names and ids of the first 10 files the user has access to.
"""
creds = None
# The file token.json stores the user's access and refresh tokens, and is
# created automatically when the authorization flow completes for the first
# time.
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(
'credentials.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
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(u'{0} ({1})'.format(item['name'], item['id']))
if __name__ == '__main__':
main()
Ошибка:
Traceback (most recent call last):
File "C:/Users/holym/PycharmProjects/HackPhoenix2021/quickstart.py", line 48, in <module>
main()
File "C:/Users/holym/PycharmProjects/HackPhoenix2021/quickstart.py", line 28, in main
creds = flow.run_local_server(port=0)
File "C:UsersholymAppDataLocalProgramsPythonPython38libsite-packagesgoogle_auth_oauthlibflow.py", line 474, in run_local_server
self.fetch_token(authorization_response=authorization_response)
File "C:UsersholymAppDataLocalProgramsPythonPython38libsite-packagesgoogle_auth_oauthlibflow.py", line 286, in fetch_token
kwargs.setdefault("client_secret", self.client_config["client_secret"])
KeyError: 'client_secret'
Комментарии:
1. О
Most of this code is straight from Google documentation.
том , можете ли вы указать URL-адрес документа, который вы проверили?2. Возможно, вы создали неправильный тип клиента в консоли разработчика Google для своего кода.Убедитесь, что вы создали учетные данные установленного / другого типа.
3. Можете ли вы уточнить, какие шаги вы предприняли, чтобы получить
credentials.json
файл?
Ответ №1:
Проблема, скорее всего, связана с содержимым вашего файла учетных данных.json.
- Перейдите в консоль облачной платформы Google.
- В списке проекты выберите проект или создайте новый.
- Если страница API и службы еще не открыта, откройте меню консоли слева и выберите API и службы.
- Слева щелкните Учетные данные.
- Нажмите кнопку Новые учетные данные, затем выберите идентификатор клиента OAuth.
- Выберите Настольное приложение.
- Нажмите на значок загрузки, чтобы загрузить файл идентификатора клиента/секретов и переименовать его в файл учетных данных.json.
См.также раздел Настройка OAuth 2.0.
Файл credentials.json должен выглядеть следующим образом:
{
"installed": {
"client_id": "1234-abcd.apps.googleusercontent.com",
"project_id": "myproject",
"auth_uri": "https://accounts.google.com/o/oauth2/auth",
"token_uri": "https://oauth2.googleapis.com/token",
"auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
"client_secret": "generatedsecret",
"redirect_uris": [
"urn:ietf:wg:oauth:2.0:oob",
"http://localhost"
]
}
}