您的位置:首页 > 编程语言 > Java开发

java实现对Google Calendar API event 事件的添加

2014-12-08 11:16 597 查看
参考文档:
参考demo: CalendarSample.java

/*
* Copyright (c) 2010 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
* in compliance with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0 *
* Unless required by applicable law or agreed to in writing, software distributed under the License
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
* or implied. See the License for the specific language governing permissions and limitations under
* the License.
*/

package com.google.api.services.samples.calendar.cmdline;

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.batch.BatchRequest;
import com.google.api.client.googleapis.batch.json.JsonBatchCallback;
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.googleapis.json.GoogleJsonError;
import com.google.api.client.http.HttpHeaders;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.jackson2.JacksonFactory;
import com.google.api.client.util.DateTime;
import com.google.api.client.util.Lists;
import com.google.api.client.util.store.DataStoreFactory;
import com.google.api.client.util.store.FileDataStoreFactory;
import com.google.api.services.calendar.CalendarScopes;
import com.google.api.services.calendar.model.Calendar;
import com.google.api.services.calendar.model.CalendarList;
import com.google.api.services.calendar.model.Event;
import com.google.api.services.calendar.model.EventDateTime;
import com.google.api.services.calendar.model.Events;

import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Collections;
import java.util.Date;
import java.util.TimeZone;

/**
* @author Yaniv Inbar
*/
public class CalendarSample {

/**
* Be sure to specify the name of your application. If the application name is {@code null} or
* blank, the application will log a warning. Suggested format is "MyCompany-ProductName/1.0".
*/
private static final String APPLICATION_NAME = "";

/** Directory to store user credentials. */
private static final java.io.File DATA_STORE_DIR =
new java.io.File(System.getProperty("user.home"), ".store/calendar_sample");

/**
* Global instance of the {@link DataStoreFactory}. The best practice is to make it a single
* globally shared instance across your application.
*/
private static FileDataStoreFactory dataStoreFactory;

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

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

private static com.google.api.services.calendar.Calendar client;

static final java.util.List<Calendar> addedCalendarsUsingBatch = Lists.newArrayList();

/** Authorizes the installed application to access user's protected data. */
private static Credential authorize() throws Exception {
// load client secrets
GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY,
new InputStreamReader(CalendarSample.class.getResourceAsStream("/client_secrets.json")));
if (clientSecrets.getDetails().getClientId().startsWith("Enter")
|| clientSecrets.getDetails().getClientSecret().startsWith("Enter ")) {
System.out.println(
"Enter Client ID and Secret from https://code.google.com/apis/console/?api=calendar "
+ "into calendar-cmdline-sample/src/main/resources/client_secrets.json");
System.exit(1);
}
// set up authorization code flow
GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(
httpTransport, JSON_FACTORY, clientSecrets,
Collections.singleton(CalendarScopes.CALENDAR)).setDataStoreFactory(dataStoreFactory)
.build();
// authorize
return new AuthorizationCodeInstalledApp(flow, new LocalServerReceiver()).authorize("user");
}

public static void main(String[] args) {
try {
// initialize the transport
httpTransport = GoogleNetHttpTransport.newTrustedTransport();

// initialize the data store factory
dataStoreFactory = new FileDataStoreFactory(DATA_STORE_DIR);

// authorization
Credential credential = authorize();

// set up global Calendar instance
client = new com.google.api.services.calendar.Calendar.Builder(
httpTransport, JSON_FACTORY, credential).setApplicationName(APPLICATION_NAME).build();

// run commands
showCalendars();
addCalendarsUsingBatch();
Calendar calendar = addCalendar();
updateCalendar(calendar);
addEvent(calendar);
showEvents(calendar);
deleteCalendarsUsingBatch();
deleteCalendar(calendar);

} catch (IOException e) {
System.err.println(e.getMessage());
} catch (Throwable t) {
t.printStackTrace();
}
System.exit(1);
}

private static void showCalendars() throws IOException {
View.header("Show Calendars");
CalendarList feed = client.calendarList().list().execute();
View.display(feed);
}

private static void addCalendarsUsingBatch() throws IOException {
View.header("Add Calendars using Batch");
BatchRequest batch = client.batch();

// Create the callback.
JsonBatchCallback<Calendar> callback = new JsonBatchCallback<Calendar>() {

@Override
public void onSuccess(Calendar calendar, HttpHeaders responseHeaders) {
View.display(calendar);
addedCalendarsUsingBatch.add(calendar);
}

@Override
public void onFailure(GoogleJsonError e, HttpHeaders responseHeaders) {
System.out.println("Error Message: " + e.getMessage());
}
};

// Create 2 Calendar Entries to insert.
Calendar entry1 = new Calendar().setSummary("Calendar for Testing 1");
client.calendars().insert(entry1).queue(batch, callback);

Calendar entry2 = new Calendar().setSummary("Calendar for Testing 2");
client.calendars().insert(entry2).queue(batch, callback);

batch.execute();
}

private static Calendar addCalendar() throws IOException {
View.header("Add Calendar");
Calendar entry = new Calendar();
entry.setSummary("Calendar for Testing 3");
Calendar result = client.calendars().insert(entry).execute();
View.display(result);
return result;
}

private static Calendar updateCalendar(Calendar calendar) throws IOException {
View.header("Update Calendar");
Calendar entry = new Calendar();
entry.setSummary("Updated Calendar for Testing");
Calendar result = client.calendars().patch(calendar.getId(), entry).execute();
View.display(result);
return result;
}

private static void addEvent(Calendar calendar) throws IOException {
View.header("Add Event");
Event event = newEvent();
Event result = client.events().insert(calendar.getId(), event).execute();
View.display(result);
}

private static Event newEvent() {
Event event = new Event();
event.setSummary("New Event");
Date startDate = new Date();
Date endDate = new Date(startDate.getTime() + 3600000);
DateTime start = new DateTime(startDate, TimeZone.getTimeZone("UTC"));
event.setStart(new EventDateTime().setDateTime(start));
DateTime end = new DateTime(endDate, TimeZone.getTimeZone("UTC"));
event.setEnd(new EventDateTime().setDateTime(end));
return event;
}

private static void showEvents(Calendar calendar) throws IOException {
View.header("Show Events");
Events feed = client.events().list(calendar.getId()).execute();
View.display(feed);
}

private static void deleteCalendarsUsingBatch() throws IOException {
View.header("Delete Calendars Using Batch");
BatchRequest batch = client.batch();
for (Calendar calendar : addedCalendarsUsingBatch) {
client.calendars().delete(calendar.getId()).queue(batch, new JsonBatchCallback<Void>() {

@Override
public void onSuccess(Void content, HttpHeaders responseHeaders) {
System.out.println("Delete is successful!");
}

@Override
public void onFailure(GoogleJsonError e, HttpHeaders responseHeaders) {
System.out.println("Error Message: " + e.getMessage());
}
});
}

batch.execute();
}

private static void deleteCalendar(Calendar calendar) throws IOException {
View.header("Delete Calendar");
client.calendars().delete(calendar.getId()).execute();
}
}
参考demo: View.java
/*
* Copyright (c) 2010 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
* in compliance with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0 *
* Unless required by applicable law or agreed to in writing, software distributed under the License
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
* or implied. See the License for the specific language governing permissions and limitations under
* the License.
*/

package com.google.api.services.samples.calendar.cmdline;

import com.google.api.services.calendar.model.Calendar;
import com.google.api.services.calendar.model.CalendarList;
import com.google.api.services.calendar.model.CalendarListEntry;
import com.google.api.services.calendar.model.Event;
import com.google.api.services.calendar.model.Events;

/**
* @author Yaniv Inbar
*/
public class View {

static void header(String name) {
System.out.println();
System.out.println("============== " + name + " ==============");
System.out.println();
}

static void display(CalendarList feed) {
if (feed.getItems() != null) {
for (CalendarListEntry entry : feed.getItems()) {
System.out.println();
System.out.println("-----------------------------------------------");
display(entry);
}
}
}

static void display(Events feed) {
if (feed.getItems() != null) {
for (Event entry : feed.getItems()) {
System.out.println();
System.out.println("-----------------------------------------------");
display(entry);
}
}
}

static void display(CalendarListEntry entry) {
System.out.println("ID: " + entry.getId());
System.out.println("Summary: " + entry.getSummary());
if (entry.getDescription() != null) {
System.out.println("Description: " + entry.getDescription());
}
}

static void display(Calendar entry) {
System.out.println("ID: " + entry.getId());
System.out.println("Summary: " + entry.getSummary());
if (entry.getDescription() != null) {
System.out.println("Description: " + entry.getDescription());
}
}

static void display(Event event) {
if (event.getStart() != null) {
System.out.println("Start Time: " + event.getStart());
}
if (event.getEnd() != null) {
System.out.println("End Time: " + event.getEnd());
}
}
}
地址:https://code.google.com/p/google-api-java-client/source/browse/calendar-cmdline-sample/src/main/java/com/google/api/services/samples/calendar/cmdline/?repo=samples

java实现Google Calendar API event 事件的添加:(需要的jar包在blog里)
import java.io.File;
import java.util.Collections;
import java.util.Date;
import java.util.TimeZone;

import com.google.api.client.auth.oauth2.Credential;
import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.http.HttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.jackson2.JacksonFactory;
import com.google.api.services.calendar.CalendarScopes;
import com.google.api.services.calendar.model.Event;
import com.google.api.services.calendar.model.EventDateTime;

public class TestCalendar2 {
private static HttpTransport httpTransport;
private static com.google.api.services.calendar.Calendar client;
private static final JsonFactory JSON_FACTORY = JacksonFactory.getDefaultInstance();
private static Credential authorize() throws Exception{
JsonFactory JSON_FACTORY =JacksonFactory.getDefaultInstance();
HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport();
//        File file = new File(TestCalendar2.class.getResource("/eb2e54acd629.p12").getFile());
File file = new File("G:/eb2e54acd629.p12");
GoogleCredential credential = new GoogleCredential.Builder()
.setTransport(httpTransport)
.setServiceAccountId("874235120563-s1srqejjvmqn84g29oqeqcifqa9jto0a@developer.gserviceaccount.com")
.setServiceAccountScopes(Collections.singleton(CalendarScopes.CALENDAR))
.setJsonFactory(JSON_FACTORY).setServiceAccountPrivateKeyFromP12File(file)
.build();
return credential;
}

public static void main(String[] args) {
try {
httpTransport = GoogleNetHttpTransport.newTrustedTransport();
Credential credential = authorize();
credential.refreshToken();

client = new com.google.api.services.calendar.Calendar.Builder(
httpTransport, JSON_FACTORY, credential).setApplicationName("test").build();
com.google.api.services.calendar.model.Events events = client.events().list("primary").execute();
//System.out.println(events.getDescription());
try {
Event event = new Event();
event.setSummary("vincentlinnnnnnn");
event.setLocation("myhomeeeeeeeeee");
System.out.println("----------");
Date startDate = new Date();
Date endDate = new Date(startDate.getTime() + 3600000);
com.google.api.client.util.DateTime start = new com.google.api.client.util.DateTime(startDate, TimeZone.getTimeZone("UTC"));
event.setStart(new EventDateTime().setDateTime(start));
com.google.api.client.util.DateTime end = new com.google.api.client.util.DateTime(endDate, TimeZone.getTimeZone("UTC"));
event.setEnd(new EventDateTime().setDateTime(end));
System.out.println("------=====");
Event result = client.events().insert("vincent.xiao.gz@gmail.com", event).execute();
System.out.println(result.getId());
} catch (Exception e) {
e.printStackTrace();
}

com.google.api.services.calendar.model.Events showEvents = client.events().list("").execute();
for (Event e : showEvents.getItems()) {
System.out.println(e.getSummary());
}
System.out.println("======");
} catch (Exception e) {

}

}

}
实现思路:

参考文档:
1、https://developers.google.com/google-apps/calendar/

2、https://developers.google.com/google-apps/calendar/firstapp

3、https://developers.google.com/console/help/new/

4、https://developers.google.com/accounts/docs/OAuth2#serviceaccount

5、https://developers.google.com/google-apps/calendar/downloads
本文出自 “IT狼” 博客,请务必保留此出处http://xiaoshitou.blog.51cto.com/6396736/1587435
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: