Проблема с API Google Диска, ошибка ключа: «client_secret»

#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.

  1. Перейдите в консоль облачной платформы Google.
  2. В списке проекты выберите проект или создайте новый.
  3. Если страница API и службы еще не открыта, откройте меню консоли слева и выберите API и службы.
  4. Слева щелкните Учетные данные.
  5. Нажмите кнопку Новые учетные данные, затем выберите идентификатор клиента OAuth.
  6. Выберите Настольное приложение.
  7. Нажмите на значок загрузки, чтобы загрузить файл идентификатора клиента/секретов и переименовать его в файл учетных данных.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"
    ]
  }
}