6

ドメイン内のユーザーのカレンダー イベントを取得しようとしています。サービス アカウントにアクセスできますが、特定のユーザー イベントを取得しようとすると 404 エラーが発生します。接続コードは次のとおりです。

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"
}

助けてくれてありがとう。

4

2 に答える 2

3

この問題を解決するには、このサービス アカウントをドメイン管理の承認済み API クライアントに追加する必要がありました。クライアント名はサービス アカウントのクライアント ID であり、範囲は読み取り専用カレンダーでした

于 2013-06-21T08:20:01.763 に答える