2013-06-20 2 views
5

Я пытаюсь извлечь события календаря для пользователя в домене. У меня есть доступ к учетной записи службы, но я получаю ошибку 404, когда пытаюсь получить конкретные пользовательские события. Heres код подключения:Как правильно получать события календаря пользователя, используя учетную запись службы?

NetHttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport(); 
    GoogleCredential credential = new GoogleCredential.Builder() 
      .setTransport(httpTransport) 
      .setJsonFactory(JSON_FACTORY) 
      .setServiceAccountId(googleApiServiceAccountId) 
      .setServiceAccountScopes(Collections.singleton(CalendarScopes.CALENDAR_READONLY)) 
      .setServiceAccountPrivateKey(SecurityUtils.loadPrivateKeyFromKeyStore(
        SecurityUtils.getPkcs12KeyStore(), 
        getClass().getClassLoader().getResourceAsStream(googleApiPrivateKeyPath), 
        NOTASECRET, PRIVATEKEY, NOTASECRET)) 
      .build(); 

    calendarApi = new Calendar.Builder(httpTransport, 
      JSON_FACTORY, credential).setApplicationName(getApplicactionName()).build(); 

События Метод перечисления:

public List<Event> getCalendarEventsForUserAndDates(String userEmail, Long dateFrom, Long dateTo) { 
    try { 
     String pageToken = null; 
     List<Event> allEvents = Lists.newArrayList(); 
     do { 
      ArrayMap<String, Object> parameters = new ArrayMap<String, Object>(); 
      parameters.add("xoauth_requestor_id", userEmail); 
      Calendar.Events.List list = calendarApiBean.getCalendarApi() 
        .events().list("primary"); 
      list.setTimeMax(new DateTime(dateFrom, 0)) 
        .setTimeMin(new DateTime(dateTo, 0)) 
        .setUnknownKeys(parameters); 
      Events events = list.setPageToken(pageToken) 
        .execute(); 
      List<? extends Event> items = events.getItems(); 
      if (items != null) { 
       allEvents.addAll(items); 
      } 
      pageToken = events.getNextPageToken(); 
     } while (pageToken != null); 
     return allEvents; 
    } catch (IOException e) { 
     logger.error("error while retriving calendar events for {} and dates {} {} ", userEmail, dateFrom, dateTo); 
     logger.error("exception", e); 
     return Collections.emptyList(); 
    } 

} 

Когда я пытаюсь установить xoauth_requestor_id к электронной почте и список пользователя «первичный», я получаю Календарь событий для моих учетных записей служб. Когда я изменяю параметр events(). List() для электронной почты пользователя, я получаю следующее сообщение об ошибке:

com.google.api.client.googleapis.json.GoogleJsonResponseException: 404 Not Found 
{ 
    "code" : 404, 
    "errors" : [ { 
    "domain" : "global", 
    "message" : "Not Found", 
    "reason" : "notFound" 
    } ], 
    "message" : "Not Found" 
} 

Спасибо за любую помощь.

ответ

3

Чтобы решить эту проблему, мне пришлось добавить эту учетную запись службы авторизованным клиентам API в Администрацию домена. Имя клиента - это учетная запись клиента службы, а область действия указана для календаря Readonly

+0

+1, но можете ли вы подробнее рассказать о необходимых шагах. Я еще не смог выполнить это в новой консоли Google (https://cloud.google.com/console). – Drux

+0

Это не было сделано мной. Некоторые администраторы домена исправили это. – mihn

+0

Привет @mihn, Не могли бы вы поделиться полным кодом? У меня проблемы с программой разработки, чтобы она могла использовать служебную учетную запись для получения пользовательских событий Календаря. Интересно, какие вещи я пропустил. Я хочу исправить программу. Спасибо. – Jack

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