Как исправить ошибку .get () при создании события календаря Google с python? - PullRequest
0 голосов
/ 04 июня 2019

Я пытаюсь использовать python для создания события в календаре Google. Ошибка заключается в том, что частично с этим возникает проблема с использованием .get (). Я не очень разбираюсь в API календаря Google, так как это моя первая программа, поэтому я больше не могу ее сузить, так что кто-то может мне помочь с этим?

Я воссоздал код, предложенный на видео в https://developers.google.com/calendar/create-events и я изменил storage.json на credentials.json

Строка, которая вызывает ошибку, это,

store = file.Storage('credentials.json')
creds = store.get()

Файл просто не запускается и выдает кучу ошибок.

Это ошибки:

Traceback (most recent call last):
  File "goal_insert.py", line 9, in module>
    creds = store.get()
  File "/Users/name/Library/Python/2.7/lib/python/site-packages/oauth2client/client.py", line 407, in get
    return self.locked_get()
  File "/Users/name/Library/Python/2.7/lib/python/site-packages/oauth2client/file.py", line 54, in locked_get
    credentials = client.Credentials.new_from_json(content)
  File "/Users/name/Library/Python/2.7/lib/python/site-packages/oauth2client/client.py", line 302, in new_from_json
    module_name = data['_module']
KeyError: '_module'

Ответы [ 2 ]

0 голосов
/ 06 июня 2019

Мое предложение заключается в том, что вам следует начать с быстрого старта здесь:

https://developers.google.com/calendar/quickstart/python

Также есть объяснение того, как создать событие:

https://developers.google.com/calendar/create-events

Вы сможете запустить свой код, собрав эти 2 примера.Вот пример реализации, следующий за инструкциями по быстрому запуску (установка библиотек python, pip, google и помещение файла credentials.json в один каталог со сценарием) и добавление функциональности создания события в сценарий быстрого запуска:

from __future__ import print_function
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.
SCOPES = ['https://www.googleapis.com/auth/calendar']


def main():
    """Shows basic usage of the Admin SDK Directory API.
    Prints the emails and names of the first 10 users in the domain.
    """
    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()
        # Save the credentials for the next run
        with open('token.pickle', 'wb') as token:
            pickle.dump(creds, token)

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

    #Create event with invitees    
    event = {
        'summary': 'Liron clone wars training',
        'location': 'Barcelona city',
        'description': 'A chance to hear more about Google\'s developer products.',
        'start': {
            'dateTime': '2019-06-08T00:00:00',
            'timeZone': 'America/Los_Angeles',
        },
        'end': {
            'dateTime': '2019-06-08T08:00:00',
            'timeZone': 'America/Los_Angeles',
        },
        'attendees': [{"email": "random1@domain.eu"}, {"email": "random2@domain.eu"}]
    }

    event = serviceCalendar.events().insert(calendarId='primary', body=event).execute()
    print('Event created: %s' % (event.get('htmlLink')))

if __name__ == '__main__':
    main()
0 голосов
/ 04 июня 2019

Я не знаю почему, но комментируя строку

creds = store.get() 

и строку после заставили ее работать, я не знаю, почему, если честно, но это исправило это.Кажется, это изменяет файл учетных данных, тогда я могу раскомментировать строки, и он снова работает.

...