2014-12-18 2 views
1

В течение нескольких недель я пытался заставить свои события календаря Google работать из сценария Python на терминале. Моя цель - вывести мои события с определенного времени (вчера), изменить имя события и сохранить их с новым именем.Python - API календаря Google - учетная запись службы - нет списка событий

Я прочитал много страниц переполнения стека и хороший фрагмент документации по API, и даже попросил преподавателя Python (я беру ночной класс), без всякой удачи.

Следующий код «работает» и создает кучу вещей, включая список «предметов», который пуст []. Я подозреваю, что на самом деле я не связан с моим календарем, так как теоретический список должен быть наполнен всеми моими вещами; это или я намного больше, чем я себе представлял.

В любом случае, это код, который у меня есть, который производит нежелательный результат двумя способами. Спасибо заранее за любую помощь!

import pprint 
import pytz 
import httplib2 
import requests 

from datetime import datetime, timedelta 
from apiclient.discovery import build 
from oauth2client.client import SignedJwtAssertionCredentials 

with open('calendarchecker.p12', 'rb') as f: 
    key = f.read() 

service_account_name = #EMAIL ADDRESS IN OAUTH SERVICE ACCOUNT 

credentials = SignedJwtAssertionCredentials(
service_account_name, key, 
scope=['https://www.googleapis.com/auth/calendar', 
'https://www.googleapis.com/auth/calendar.readonly']) 

http = httplib2.Http() 
http = credentials.authorize(http) 

service = build(serviceName='calendar', version='v3', http=http) 

showDeleted = True 

lists = service.calendarList().list().execute() 
pprint.pprint(lists) 

page_token = None 
while True: 
    events = service.events().list(calendarId=service_account_name, pageToken=page_token).execute() 
    pprint.pprint(events) 
    for event in events['items']: 
    print event['summary'] 
    page_token = events.get('nextPageToken') 
    if not page_token: 
    break 

ответ

0
credentials = SignedJwtAssertionCredentials(
    service_account_name, 
    key, 
    scope=['https://www.googleapis.com/auth/calendar', 
     'https://www.googleapis.com/auth/calendar.readonly'], 
    sub='<userid to impersonate>') 

Если вы делегировали общедоменный доступ к учетной записи службы, и вы хотите, чтобы олицетворять учетную запись пользователя, укажите адрес электронной почты учетной записи пользователя в параметре юга при создании объекта по проверке полномочий. Например:

credentials = SignedJwtAssertionCredentials(client_email, private_key, 
    'https://www.googleapis.com/auth/sqlservice.admin', 
    sub='[email protected]') 

Reference

Смежные вопросы