API Календаря Google - «Превышен дневной лимит для использования без аутентификации. Для продолжения использования требуется регистрация» - PullRequest
1 голос
/ 21 сентября 2019

Я пытаюсь написать некоторый код Python, который создает календарь (в моей учетной записи) и добавляет к нему события.

Я продолжаю получать следующую ошибку 403:

Daily Limit for Unauthenticated Use Exceeded. Continued use requires signup

Это происходит , а не , когда я создаю новые календари:

created_calendar = service.calendars().insert(body=calendar).execute()

Но возникает ошибка , когда я пытаюсь создать события в календаре, который я простоmade:

event = service.events().insert(calendarId=created_calendar, body=event).execute()

Как и в других потоках справки, я выполнил все правильные аутентификации (ключ API, OAuth, служебная учетная запись):

enter image description here

И мой дневной лимит намного превышает количество отправляемых мной запросов:

enter image description here

Я указываю OAuthфайл credentials.json при создании моего клиента API.Я указываю переменную окружения GOOGLE_APPLICATION_CREDENTIALS на ключ учетной записи службы (также json) перед запуском.

Я не уверен, как еще я могу аутентифицировать себя ... некоторая помощь действительно будет оценена!

РЕДАКТИРОВАТЬ

Это мой сценарий (и я считаю минимальным примером ошибки) на случай, если он будет полезен:

import datetime
import pytz
import pickle
import os.path
from googleapiclient.discovery import build
from google_auth_oauthlib.flow import InstalledAppFlow
from google.auth.transport.requests import Request

# If modifying these scopes, delete the file token.pickle.
# Add .readonly for read only
SCOPES = ['https://www.googleapis.com/auth/calendar']


def build_cal_service():
    creds = None
    # The file token.pickle 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.pickle'):
        with open('token.pickle', 'rb') as token:
            creds = pickle.load(token)
    # 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.pickle', 'wb') as token:
            pickle.dump(creds, token)

    service = build('calendar', 'v3', credentials=creds)

    return service

def main():
    service = build_cal_service()

    calendar = {
        'summary': 'TEST CAL',
        'timeZone': 'America/Los_Angeles'
    }

    created_calendar = service.calendars().insert(body=calendar).execute()

    time = datetime.datetime(
        year=2019,
        month=11,
        day=9,
        hour=21,
        tzinfo=pytz.timezone('US/Pacific'))

    event = {
      'summary': 'test summary',
      'description': 'test description.',
      'start': {
        'dateTime': time.isoformat(),
      },
      'end': {
        'dateTime': (time + datetime.timedelta(hours=1)).isoformat(),
      },
      'attendees': [
        {'email': 'test1@example.com'},
        {'email': 'test2@example.com'},
      ],
    }

    event = service.events().insert(calendarId=created_calendar, body=event).execute()

1 Ответ

1 голос
/ 22 сентября 2019

Как насчет этой модификации?

К сожалению, в моей среде, когда я тестировал предоставленный вами скрипт, я не смог подтвердить ошибку Daily Limit for Unauthenticated Use Exceeded. Continued use requires signup.Но я думаю, что в вашем скрипте event = service.events().insert(calendarId=created_calendar, body=event).execute() возникает ошибка.Так как насчет следующей модификации?

От:

event = service.events().insert(calendarId=created_calendar, body=event).execute()

До:

event = service.events().insert(calendarId=created_calendar['id'], body=event).execute()

Примечание:

  • created_calendar изcreated_calendar = service.calendars().insert(body=calendar).execute() это объект.Поэтому, когда идентификатор календаря получен, используйте created_calendar['id'].
  • . В этом ответе предполагается, что credentials.json - это файл, который был загружен «Создать учетные данные» в «Идентификатор клиента OAuth».
  • Если возникает ошибка, связанная с авторизацией, удалите файл token.pickle и запустите скрипт, а затем снова авторизуйтесь.

Ссылки:

...