Как проверить Календарь Google, чтобы увидеть, если событие уже существует перед добавлением - PullRequest
0 голосов
/ 21 марта 2019

Есть веб-сайт, на котором запланированы события, которые я смог вытащить, проанализировать и добавить в свой личный календарь Google. Прежде чем добавить событие в календарь Google, я хочу проверить, есть ли событие с таким же названием и временем в моем календаре Google. Если да, пропустите это событие. Если нет, опубликуйте его.

Я думаю, что я беру все даты, начиная с сегодняшнего дня, и получаю следующее число событий X, как, например, в собственном руководстве по быстрому старту Google . Затем с каждым потенциально новым событием проверьте, соответствует ли оно дате, времени и описанию события, которое уже есть в календаре.

Вот что у меня есть, и я подумал, что это сработает, но не [ОБНОВЛЕНО ДЛЯ ОБНОВЛЕНИЯ КОДА]:

Теперь он не публикует никаких событий, даже если время не заполнено.

        new_event = {
            'summary': event_summary,
            'location': event_location,
            'description': '',
            'start': {
                'dateTime': event_start,
                'timeZone': 'America/Chicago',
            },
            'end': {
                'dateTime': event_end,
                'timeZone': 'America/Chicago',
            },
            'reminders': {
                'useDefault': True,
            },


        }

        now = datetime.utcnow().isoformat() + 'Z'  # 'Z' indicates UTC time

        events_result = service.events().list(calendarId=calendar_ID,
                                              timeMin=now,
                                              maxResults=50, singleEvents=True,
                                              orderBy='startTime').execute()
        events = events_result.get('items', [])

        for event in events:
            start = event['start'].get('dateTime', event['start'].get('date'))
            summary = event['summary']

            if start == event_start and summary == event_summary:
                break
            else:
                service.events().insert(calendarId=calendar_ID, body=new_event).execute()

Любая помощь будет принята с благодарностью - я самоучка, поэтому мои знания и способности ограничены.

1 Ответ

0 голосов
/ 29 марта 2019

Я смог разобраться с небольшой помощью:

с помощью:

 new_event = {
            'summary': event_summary,
            'location': event_location,
            'description': '',
            'start': {
                'dateTime': event_start,
                'timeZone': 'America/Chicago',
            },
            'end': {
                'dateTime': event_end,
                'timeZone': 'America/Chicago',
            },
            'reminders': {
                'useDefault': True,
            },

        }

это код:

class PostToGoogleCalendar:
def __init__(self):
    self.creds = None
    if os.path.exists('token.pickle'):
        with open('token.pickle', 'rb') as token:
            self.creds = pickle.load(token)
    if not self.creds or not self.creds.valid:
        if self.creds and self.creds.expired and self.creds.refresh_token:
            self.creds.refresh(Request())
        else:
            flow = InstalledAppFlow.from_client_secrets_file(
                'credentials.json', SCOPES)
            self.creds = flow.run_local_server()
        with open('token.pickle', 'wb') as token:
            pickle.dump(self.creds, token)

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

def get_events(self):
    now = datetime.utcnow().isoformat() + 'Z'
    events_result = self.service.events().list(calendarId='primary', timeMin=now,
                                               maxResults=500, singleEvents=True,
                                               orderBy='startTime').execute()
    return events_result.get('items', [])

def create_event(self, new_event):
    if not self.already_exists(new_event):
        event = self.service.events().insert(calendarId='primary', body=new_event).execute()
        return event.get('htmlLink')
    else:
        return 'Event Already Exists'

def already_exists(self, new_event):
    events = self.get_date_events(new_event['start']['dateTime'], self.get_events())
    event_list = [new_event['summary'] for new_event in events]
    if new_event['summary'] not in event_list:
        return False
    else:
        return True

def get_date_events(self, date, events):
    lst = []
    date = date
    for event in events:
        if event.get('start').get('dateTime'):
            d1 = event['start']['dateTime']
            if d1 == date:
                lst.append(event)
    return lst
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...