当前位置: 首页 > 知识库问答 >
问题:

Google日历API在spring boot和Android中的集成

邵飞宇
2023-03-14

我在Spring启动项目中运行Google Calendar API时遇到了一个问题。它是一个运行在live server上的企业项目

GoogleCalendarService.java

@Service
@Slf4j
public class GoogleCalenderService {

private static final List<String> SCOPES = Collections.singletonList(CalendarScopes.CALENDAR);
private static final String CREDENTIALS_FILE_PATH = "/RP_OAuth.json";
private static final JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance();
private static final String TOKENS_DIRECTORY_PATH = "tokens";
private static final String APPLICATION_NAME = "Google Calendar API Java Quickstart";
private GoogleAuthorizationCodeFlow flow;
private NetHttpTransport HTTP_TRANSPORT;


public String getCredentials(String candidateEmail,String recruiterEmail,long startTimeStamp, long endTimeStamp) {
    // Load client secrets.

    try {
        AuthorizationCodeRequestUrl authorizationUrl;
        authorizationUrl = getFlow().newAuthorizationUrl()
                .setRedirectUri("http://localhost:8948/Callback/"
                        +startTimeStamp+
                        "/"+endTimeStamp+
                        "/"+recruiterEmail+
                        "/"+candidateEmail
                );


        return authorizationUrl.build();

    } catch (Exception e) {
        log.error(e.getMessage());
    }

    return null;
}

public GoogleAuthorizationCodeFlow getFlow() {
    if (flow == null) {
        try {
            HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport();

            InputStream in = GoogleCalenderService.class.getResourceAsStream(CREDENTIALS_FILE_PATH);
            if (in == null) {
                throw new FileNotFoundException("Resource not found: " + CREDENTIALS_FILE_PATH);
            }
            GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(in));

            flow = new GoogleAuthorizationCodeFlow.Builder(
                    HTTP_TRANSPORT, JSON_FACTORY, clientSecrets, SCOPES)
                    .setDataStoreFactory(new FileDataStoreFactory(new java.io.File(TOKENS_DIRECTORY_PATH)))
                    .setAccessType("offline")
                    .build();
        } catch (Exception e) {
            log.error(e.getMessage());
        }
    }

    return flow;
}

public String createCredentials(String code,long startTimeStamp, long endTimeStamp, String recruiterEmail,
                              String candidateEmail) {

    try {
        TokenResponse response = getFlow().newTokenRequest(code).setRedirectUri("http://localhost:8948/Callback/"
                +startTimeStamp+
                "/"+endTimeStamp+
                "/"+recruiterEmail+
                "/"+candidateEmail
        )
                .execute();
        Credential credential = flow.createAndStoreCredential(response, "userID");

        Calendar service = new Calendar.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential)
                .setApplicationName(APPLICATION_NAME)
                .build();

        Event event = new Event()
                .setSummary("You have a Scheduled Interview")
                .setDescription("Please be present on the scheduled interview date");

        DateTime startDateTime = new DateTime(startTimeStamp);
        EventDateTime start = new EventDateTime()
                .setDateTime(startDateTime);
        event.setStart(start);

        DateTime endDateTime = new DateTime(endTimeStamp);
        EventDateTime end = new EventDateTime()
                .setDateTime(endDateTime);
        event.setEnd(end);

        String[] recurrence = new String[]{"RRULE:FREQ=DAILY;COUNT=2"};
        event.setRecurrence(Arrays.asList(recurrence));

        EventAttendee[] attendees = new EventAttendee[]{
                new EventAttendee().setEmail(recruiterEmail),
                new EventAttendee().setEmail(candidateEmail),
        };
        event.setAttendees(Arrays.asList(attendees));

        EventReminder[] reminderOverrides = new EventReminder[]{
                new EventReminder().setMethod("email").setMinutes(24 * 60),
                new EventReminder().setMethod("popup").setMinutes(10),
        };
        Event.Reminders reminders = new Event.Reminders()
                .setUseDefault(false)
                .setOverrides(Arrays.asList(reminderOverrides));
        event.setReminders(reminders);

        String calendarId = "primary";
        event = service.events().insert(calendarId, event).execute();
        System.out.printf("Event created: %s\n", event.getHtmlLink());

        return event.getHtmlLink();

    } catch (IOException e) {
        log.error(e.getMessage());
        return  null;
    }

}



 }

这是我收到的错误消息

共有1个答案

解宏扬
2023-03-14

您的浏览器正在查找地址localhost:8948。如果您的浏览器没有在live server上运行,它必然会失败。您应该从请求中获取主机,并使用该主机而不是localhost,在我看来,这应该使其工作。

 类似资料:
  • 我希望你能帮帮我。 我正在尝试使用Oauth2身份验证连接到Google(日历)API。 为此,我遵循了以下步骤: 通过Google开发者控制台注册应用程序 使用composer(google-api-php-client)安装客户端库 将以下脚本放置在供应商文件夹中: 不幸的是,在单击“接受”按钮进行身份验证后,我得到了一个错误: 到目前为止,谷歌的研究并没有帮助。 可能的解决办法: > 正确设

  • 我是新手,但我想将google API与PHP结合使用,但它不起作用。我已经创建了

  • 我从快速入门开始(https://developers.google.com/google-apps/calendar/quickstart/python)而且效果很好。然后我尝试用这个指南插入事件(https://developers.google.com/google-apps/calendar/create-events)。我将此代码添加到quickstart的代码中,但出现错误。如何查看我

  • 问题内容: 如何使用google-api-java-client解析用户Google日历中事件的开始和结束时间? 从Google代码安装此示例android项目后,我可以进入Google日历并解析一些信息(例如所有日历,事件名称,发布时间和摘要),但是我无法终生获取事件的开始和结束时间。 我对代码的理解是这样的。 在主要活动类(CalendarAndroidSample.java)内,这是获取我每

  • 通过Spring Security OAuth2重用终端用户Google身份验证以访问Web应用程序中的Google日历API 我能够通过Spring Security创建一个小的Spring Boot Web应用程序并进行登录 当应用程序启动时,我可以访问http://localhost:8080/user用户被要求谷歌登录。成功登录后,浏览器中会显示json配置文件,作为以下用户的响应: 我想

  • 我正在扩展一个PHP应用程序,它允许管理员创建事件并为这些事件分配特定用户。但是,在用户被列为可分配之前,我会检查用户的日历,看看他们是否可用。 我已经使用EWS为Exchange构建了一次,并使用FindItem方法在给定的时间段内检索用户电子邮件地址的事件,但我在Google日历API中很难找到等效的事件。 Events和FreeBusy Call似乎都需要特定用户的calendarId,这对