需要有关Google API Calendar V3 Java和OAUTH2的帮助

时间:2015-04-28 19:14:01

标签: java google-calendar-api google-oauth

我正在尝试使用Google Calendar APi V3(Java)处理我的Google议程。 但是,我对这个和OAUTH2都很新...然后我搜索了一些例子,我在这里找到了一个: Google Calendar API V3 Java: Unable to use 'primary' for Calendars:get 这是代码:

   import java.io.IOException;
import java.util.Collections;
import java.util.Scanner;
import java.util.Set;

import com.google.api.client.auth.oauth2.AuthorizationCodeFlow;
import com.google.api.client.auth.oauth2.AuthorizationCodeRequestUrl;
import com.google.api.client.auth.oauth2.AuthorizationCodeTokenRequest;
import com.google.api.client.auth.oauth2.TokenResponse;
import com.google.api.client.extensions.auth.helpers.Credential;
import com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeFlow;
import com.google.api.client.http.HttpRequestInitializer;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.jackson2.JacksonFactory;
import com.google.api.services.calendar.Calendar;
import com.google.api.services.calendar.Calendar.CalendarList;
import com.google.api.services.calendar.CalendarScopes;
import com.google.api.services.calendar.model.CalendarListEntry;


public class App {
    public static void main(String[] args) throws IOException{
        //Two globals that will be used in each step.
        HttpTransport httpTransport = new NetHttpTransport();
        JsonFactory jsonFactory = new JacksonFactory();

    //Create the authorization code flow manager
    Set<String> scope = Collections.singleton(CalendarScopes.CALENDAR);
    String clientId = "xxxxxx.apps.googleusercontent.com";
    String clientSecret = "xxxxxxxxxxx";

    //Use a factory pattern to create the code flow
    AuthorizationCodeFlow.Builder codeFlowBuilder = 
            new GoogleAuthorizationCodeFlow.Builder(
                    httpTransport, 
                    jsonFactory, 
                    clientId, 
                    clientSecret, 
                    scope
            );
    AuthorizationCodeFlow codeFlow = codeFlowBuilder.build();

    //set the code flow to use a dummy user
    //in a servlet, this could be the session id
    String userId = "ipeech";

    //"redirect" to the authentication url
    String redirectUri = "https://www.example.com/oauth2callback";
    AuthorizationCodeRequestUrl authorizationUrl = codeFlow.newAuthorizationUrl();
    authorizationUrl.setRedirectUri(redirectUri);
    System.out.println("Go to the following address:");
    System.out.println(authorizationUrl);

    //use the code that is returned as a url parameter
    //to request an authorization token
    System.out.println("What is the 'code' url parameter?");
   String code = new Scanner(System.in).nextLine();

    AuthorizationCodeTokenRequest tokenRequest = codeFlow.newTokenRequest(code);
    tokenRequest.setRedirectUri(redirectUri);
    TokenResponse tokenResponse = tokenRequest.execute();

    //Now, with the token and user id, we have credentials
    com.google.api.client.auth.oauth2.Credential credential = codeFlow.createAndStoreCredential(tokenResponse, userId);

    //Credentials may be used to initialize http requests
    HttpRequestInitializer initializer = credential;
    //and thus are used to initialize the calendar service
    Calendar.Builder serviceBuilder = new Calendar.Builder(
            httpTransport, jsonFactory, initializer);
    serviceBuilder.setApplicationName("Example");
    Calendar calendar = serviceBuilder.build();

    //get some data

    String calendarID = "xxxxxxxxxxx";
    getCalendarListSummary(calendarID,calendar);
    getAllCalendarListSummary(calendar);
    //getCalendarSummary(calendarID,calendar);
}

public static void getCalendarListSummary(String calendarID, Calendar calendar) throws IOException{
    CalendarListEntry calendarListEntry = calendar.calendarList().get(calendarID).execute();
    System.out.println(calendarListEntry.getSummary());
}

public static void getAllCalendarListSummary (Calendar calendar) throws IOException{
    Calendar.CalendarList.List listRequest = calendar.calendarList().list();
    com.google.api.services.calendar.model.CalendarList feed = listRequest.execute();
    for(CalendarListEntry entry:feed.getItems()){
        System.out.println("ID: " + entry.getId());
        System.out.println("Summary: " + entry.getSummary());
    }
}

当我启动程序时,它要求我提供授权代码(“什么是'代码'url参数?”)但我不知道在哪里找到它......有什么想法吗?

1 个答案:

答案 0 :(得分:0)

在此示例中,有一个部分显示“转到以下地址:”您必须复制该URL,将其粘贴到浏览器中,然后您将收到授权代码。复制该代码并在“什么是'代码'url参数后粘贴它?”然后按“Enter”以便程序可以继续。

这是一个基本的例子,为什么OAuth 2流程是这样完成的。

Here是Google日历java程序的完整示例。我建议首先了解OAuth 2如何工作,如何在Developer console中创建项目以及如何为这些项目创建凭据。然后,更容易理解和使用完整的例子。