2015-05-17 5 views
1

Я получаю Insufficient permissions при попытке вызвать метод acl.list календаря Google api через python.«Недостаточно прав» в Google календаре api's acl.list

service.acl().list(calendarId='primary').execute(); 
*** HttpError: <HttpError 403 when requesting https://www.googleapis.com/calendar/v3/calendars/primary/acl?alt=json returned "Insufficient Permission"> 

Я использую рамки «https://www.googleapis.com/auth/calendar», как это рекомендовано в документации. Кроме того, другие методы API работают, например service.calendarList

service.calendarList().list(pageToken=page_token).execute() 

Что мне не хватает?

Вот код, я использую практически полностью основывался на образце они обеспечивают:

import sys 

from oauth2client import client 
from googleapiclient import sample_tools 

def main(argv): 
    # Authenticate and construct service. 
    # import pdb;pdb.set_trace() 

    service, flags = sample_tools.init(
     argv, 'calendar', 'v3', __doc__, __file__, 
     # scope='https://www.googleapis.com/auth/calendar.readonly') 
     scope='https://www.googleapis.com/auth/calendar') 

    try: 
    page_token = None 
    while True: 
     calendar_list = service.calendarList().list(pageToken=page_token).execute() 
     for calendar_list_entry in calendar_list['items']: 
     print calendar_list_entry['summary'] 
     page_token = calendar_list.get('nextPageToken') 
     service.acl().list(calendarId='primary').execute(); 
     if not page_token: 
     break 

    except client.AccessTokenRefreshError: 
    print ('The credentials have been revoked or expired, please re-run' 
     'the application to re-authorize.') 

if __name__ == '__main__': 

    main(sys.argv) 
+0

Какую аутентификацию вы используете? Используете ли вы широкую аутентификацию делегирования? Если да, вам необходимо убедиться, что вы разрешили доступ к API для вашей дочерней учетной записи. –

+0

Я использую Oauth2.0 – erjoalgo

+0

@erjoalgo Любая идея относительно того, почему доступ к readonly не удается? Я не мог найти разрешения на чтение/запись, необходимые для документирования в любом месте, но без них они не работают. Я просто хочу просмотреть/list() список управления доступом - не изменять его. – Vreality

ответ

0

Что-то не так с вашей аутентификацией. Недопустимые разрешения означают, что у вас нет доступа.

Я могу проверить, что область https://www.googleapis.com/auth/calendar достаточна для отображения ACL.list на календаре primary.

+0

«Что-то не так с вашей аутентификацией». Не могли бы вы подробнее рассказать? – erjoalgo

+0

Не без вашего кода. – DaImTo

+0

Я отредактировал для добавления своего кода – erjoalgo

3

Возможно, вам придется удалить существующие учетные данные в виде файлов .json. У меня была аналогичная проблема «Недостаточно разрешений», и мне пришлось удалить хранимые учетные данные. У меня была дополнительная проблема, из-за того, что из-за опробования некоторых скриптов Google в их учебниках я, бессознательно, имел учетные данные, хранящиеся в скрытой папке .credentials в моем домашнем каталоге (пользователи/домашний). Поскольку они были скрыты, я должен был искать их через Terminal (на Mac) и удалять их там. После удаления проблема была решена, так как я мог создать новые и надлежащие учетные данные, подходящие для области моего нового скрипта.

+0

Спасибо за указание местоположения сохраненных учетных данных для удаления - я смог перейти в мою папку .credentials и удалить там файл. – denise

+0

Вау ... Буквально понятия не имел, почему что-то не работает !! Это исправлено :) – James111

0

Вы должны найти расположение файла "calendar-dotnet-quickstart.json" и удалить его. Я использовал пример .NET, и мне нужно отладить следующий код, чтобы найти точное местоположение.

строка credPath = System.Environment.GetFolderPath ( System.Environment.SpecialFolder.Personal); credPath = Path.Combine (credPath, ".credentials/calendar-dotnet-quickstart.json");

Затем измените область действия, как показано ниже, и перестройте решение.

string [] scopes = {CalendarService.Scope.Calendar};

Вы заметите, что Google попросит подтвердить доступ еще раз.