gpt4 book ai didi

java - 无法从其他 Gmail 帐户获取 Calendar API v3 的事件列表

转载 作者:太空宇宙 更新时间:2023-11-04 12:51:32 25 4
gpt4 key购买 nike

我正在尝试使用 Google Calendar API v3 从另一个 Google 帐户(而不是从我的计算机中的登录用户)检索事件列表。即使我尝试“填写”用户帐户电子邮件,我收到的事件列表也仅来自计算机中的登录用户。我应该做什么?

/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package us.com.manga;

import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.security.GeneralSecurityException;
import java.util.Arrays;

import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.google.api.services.calendar.Calendar;
import com.google.api.services.calendar.model.Event;
import com.google.api.services.calendar.model.Events;
import java.util.List;

import com.google.api.client.auth.oauth2.Credential;
import com.google.api.client.extensions.java6.auth.oauth2.AuthorizationCodeInstalledApp;
import com.google.api.client.extensions.jetty.auth.oauth2.LocalServerReceiver;
import com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeFlow;
import com.google.api.client.googleapis.auth.oauth2.GoogleClientSecrets;
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.json.jackson2.JacksonFactory;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.util.store.FileDataStoreFactory;
import com.google.api.client.util.DateTime;

import com.google.api.services.calendar.CalendarScopes;
import com.google.api.services.calendar.model.*;

import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.List;

/**
*
* @author robert bones
*/
public class NewServlet extends HttpServlet {





private static final String APPLICATION_NAME
= "Google Calendar API Java Quickstart";

/**
* Directory to store user credentials for this application.
*/
private static final java.io.File DATA_STORE_DIR = new java.io.File(
System.getProperty("user.home"), ".credentials/calendar-java-quickstart");

/**
* Global instance of the {@link FileDataStoreFactory}.
*/
private static FileDataStoreFactory DATA_STORE_FACTORY;

/**
* Global instance of the JSON factory.
*/
private static final JsonFactory JSON_FACTORY
= JacksonFactory.getDefaultInstance();

/**
* Global instance of the HTTP transport.
*/
private static HttpTransport HTTP_TRANSPORT;

/**
* Global instance of the scopes required by this quickstart.
*/
private static final List<String> SCOPES
= Arrays.asList(CalendarScopes.CALENDAR_READONLY);

static {
try {
HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();
DATA_STORE_FACTORY = new FileDataStoreFactory(DATA_STORE_DIR);
} catch (Throwable t) {
t.printStackTrace();
System.exit(1);
}
}

/**
* Creates an authorized Credential object.
*
* @return an authorized Credential object.
* @throws IOException
*/
public Credential authorize() throws IOException {
// Load client secrets.
//InputStream in
// = NewServlet.class.getResourceAsStream("/client_secret.json");
InputStream in = this.getServletConfig().getServletContext().
getResourceAsStream("/WEB-INF/client_secret.json");
GoogleClientSecrets clientSecrets
= GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(in));

// Build flow and trigger user authorization request.
GoogleAuthorizationCodeFlow flow
= new GoogleAuthorizationCodeFlow.Builder(
HTTP_TRANSPORT, JSON_FACTORY, clientSecrets, SCOPES)
.setDataStoreFactory(DATA_STORE_FACTORY)
.setAccessType("offline")
.setClientId("xxxx@gmail.com")
.build();
Credential credential = new AuthorizationCodeInstalledApp(
flow, new LocalServerReceiver()).authorize("xxxxx@gmail.com");

System.out.println(
"Credentials saved to " + DATA_STORE_DIR.getAbsolutePath());
return credential;
}

/**
* Build and return an authorized Calendar client service.
*
* @return an authorized Calendar client service
* @throws IOException
*/
public com.google.api.services.calendar.Calendar
getCalendarService() throws IOException {
Credential credential = authorize();
return new com.google.api.services.calendar.Calendar.Builder(
HTTP_TRANSPORT, JSON_FACTORY, credential)
.setApplicationName(APPLICATION_NAME)
.build();
}

/**
* Handles the HTTP <code>POST</code> method.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

// Initialize Calendar service with valid OAuth credentials
//Calendar service = new Calendar.Builder(httpTransport, jsonFactory, credentials)
// .setApplicationName("applicationName").build();
// Iterate over the events in the specified calendar
String pageToken = null;
response.setContentType("text/html;charset=UTF-8");
try (PrintWriter out = response.getWriter()) {
/* TODO output your page here. You may use following sample code. */
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet NewServlet</title>");
out.println("</head>");
out.println("<body>");

do {
Events events = getCalendarService().events().list("primary").setPageToken(pageToken).execute();
List<Event> items = events.getItems();
for (Event event : items) {


out.println("<h1>" + event.getSummary() + "</h1>");

}


pageToken = events.getNextPageToken();
} while (pageToken != null);

out.println("</body>");
out.println("</html>");
}

}



}

提前致谢。

最佳答案

当您进行身份验证时,您的应用程序可以访问经过身份验证的用户有权访问的所有信息。

示例:

如果我验证您的申请,您将有权阅读我的 Google 日历。以及任何公共(public)日历,例如美国的假期。 (后者是公共(public)数据,您无需经过身份验证即可访问它)

我对您的应用程序进行身份验证后,不会让您或我访问 Jon Snow 的 Google 日历帐户(这是他的私有(private)数据)。

答案:

您只能访问经过身份验证的用户有权访问的数据。不是其他人的数据。

你应该做什么

要求其他用户向您正在验证的用户授予对其日历的访问权限。

关于java - 无法从其他 Gmail 帐户获取 Calendar API v3 的事件列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35788488/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com