2014-09-11 78 views
1

我想在Java中将事件添加到Google日历中。 我不想使用基于Web的OAuth。使用简单的java代码我想添加一个事件,我使用的谷歌日历的认证是静态的。我的应用程序生成事件并发布到Google日历。 我使用下面的代码来创建一个事件并发布到日历。在Java中添加没有OAuth的Google日历活动?

Event event = new Event(); 

event.setSummary("Appointment"); 
event.setLocation("Somewhere"); 

ArrayList<EventAttendee> attendees = new ArrayList<EventAttendee>(); 
attendees.add(new EventAttendee().setEmail("attendeeEmail")); 
// ... 
event.setAttendees(attendees); 

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)); 

Event createdEvent = service.events().insert("primary", event).execute(); 

System.out.println(createdEvent.getId()); 

我已经通过以下链接解释了网络OAuth。但我不需要这么复杂的事情。 Google Service creation

我怎样才能得到服务对象在这里?
请帮助我,如果有人知道和示例代码是高度赞赏

+0

您可以使用服务帐户https://developers.google.com/accounts/docs/OAuth2ServiceAccount但是,它不会访问您的日历服务帐户有其自己的日历其自己的实体。它也不会访问另一个用户日历。 – DaImTo 2014-09-11 08:16:03

+1

您可以使用WRITE权限与服务帐户共享您尝试访问的日历。 – luc 2014-09-11 08:35:31

+0

@Dalm创建服务的一些示例代码非常有帮助 – 2014-09-11 09:07:02

回答

1

下面的代码为我工作,服务类

import java.io.File; 
import java.io.IOException; 
import java.net.URL; 
import java.nio.charset.Charset; 
import java.util.Collections; 

import com.google.api.client.googleapis.auth.oauth2.GoogleCredential; 
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.CalendarScopes; 
import com.google.common.io.Files; 

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

    /** 
    * 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 = "ServiceCalendar"; 

    /** E-mail address of the service account. */ 
    private static final String SERVICE_ACCOUNT_EMAIL = "[email protected]"; 

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

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


    public Calendar configure() { 
    try { 
     try { 
     httpTransport = new NetHttpTransport(); 
     // check for valid setup 
     if (SERVICE_ACCOUNT_EMAIL.startsWith("Enter ")) { 
      System.err.println(SERVICE_ACCOUNT_EMAIL); 
      System.exit(1); 
     } 
     URL loc = this.getClass().getResource("/ServiceApp-13c8dce63281.p12"); 
     String path = loc.getPath(); 
     File file = new File(path); 
     String p12Content = Files.readFirstLine(file, Charset.defaultCharset()); 
     if (p12Content.startsWith("Please")) { 
      System.err.println(p12Content); 
      System.exit(1); 
     } 
     // service account credential (uncomment setServiceAccountUser for domain-wide delegation) 
     GoogleCredential credential = new GoogleCredential.Builder() 
      .setTransport(httpTransport) 
      .setJsonFactory(JSON_FACTORY) 
      .setServiceAccountId(SERVICE_ACCOUNT_EMAIL) 
      .setServiceAccountScopes(Collections.singleton(CalendarScopes.CALENDAR)) 
      .setServiceAccountPrivateKeyFromP12File(file) 
      .build(); 
    Calendar client = new com.google.api.services.calendar.Calendar.Builder(
      httpTransport, JSON_FACTORY, credential) 
       .setApplicationName(APPLICATION_NAME).build(); 
    System.out.println("Client : "+client); 
    return client; 

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

} 

测试类:

import java.util.ArrayList; 
import java.util.Date; 

import com.google.api.client.util.DateTime; 
import com.google.api.services.calendar.Calendar; 
import com.google.api.services.calendar.model.Event; 
import com.google.api.services.calendar.model.EventAttendee; 
import com.google.api.services.calendar.model.EventDateTime; 
public class CalenderEventTest { 

    public static void main(String[] args) throws IOException { 
     // TODO Auto-generated method stub 
     Event event = new Event(); 
     Calendar service =null; 

     event.setSummary("Calendar Testing"); 
     event.setLocation("US"); 
     event.setDescription("Desired description"); 

     ArrayList<EventAttendee> attendees = new ArrayList<EventAttendee>(); 
     attendees.add(new EventAttendee().setEmail("[email protected]")); 
     // ... 
     event.setAttendees(attendees); 


     // set the number of days 
     java.util.Calendar startCal = java.util.Calendar.getInstance(); 
     startCal.set(java.util.Calendar.MONTH, 11); 
     startCal.set(java.util.Calendar.DATE, 26); 
     startCal.set(java.util.Calendar.HOUR_OF_DAY, 9); 
     startCal.set(java.util.Calendar.MINUTE, 0); 
     Date startDate = startCal.getTime(); 

     java.util.Calendar endCal = java.util.Calendar.getInstance(); 
     endCal.set(java.util.Calendar.MONTH, 11); 
     endCal.set(java.util.Calendar.DATE, 26); 
     endCal.set(java.util.Calendar.HOUR_OF_DAY, 18); 
     endCal.set(java.util.Calendar.MINUTE, 0); 
     Date endDate = endCal.getTime(); 


     DateTime start = new DateTime(startDate); 
     event.setStart(new EventDateTime().setDateTime(start)); 
     DateTime end = new DateTime(endDate); 
     event.setEnd(new EventDateTime().setDateTime(end)); 

     service = new CalendarService().configure(); 
     Event createdEvent = service.events().insert("primary", event).execute(); 

     System.out.println("Data is :"+createdEvent.getId()); 
    } 
} 

Maven的依赖关系:

<properties> 
     <google.version>1.19.0</google.version> 
    </properties> 
<dependencies> 
     <dependency> 
      <groupId>com.google.api-client</groupId> 
      <artifactId>google-api-client</artifactId> 
      <version>1.19.0</version> 
     </dependency> 
     <dependency> 
      <groupId>com.google.apis</groupId> 
      <artifactId>google-api-services-calendar</artifactId> 
      <version>v3-rev96-1.19.0</version> 
     </dependency> 
     <dependency> 
      <groupId>com.google.oauth-client</groupId> 
      <artifactId>google-oauth-client</artifactId> 
      <version>1.19.0</version> 
     </dependency> 
     <dependency> 
      <groupId>com.google.http-client</groupId> 
      <artifactId>google-http-client-jackson</artifactId> 
      <version>1.19.0</version> 
     </dependency> 

     <dependency> 
      <groupId>com.google.http-client</groupId> 
      <artifactId>google-http-client-jackson2</artifactId> 
      <version>1.19.0</version> 
     </dependency> 
    </dependencies> 

而且应该把ServiceApp-13c8dce63281.p12文件放在maven的resources文件夹中。
毫无疑问,它将起作用。
希望它能帮助有需要的人。

1

首先去Google开发者控制台,创建一个项目,获得一个服务帐户和私钥文件。 将日历分享到服务帐户电子邮件。

HttpTransport TRANSPORT = GoogleNetHttpTransport.newTrustedTransport(); 
JsonFactory JSON_FACTORY = new JacksonFactory(); 
GoogleCredential credential = new GoogleCredential.Builder().setTransport(TRANSPORT) 
      .setJsonFactory(JSON_FACTORY) 
      .setServiceAccountId(SERVICE_ACCOUNT) 
      .setServiceAccountScopes(Collections.singleton(CalendarScopes.CALENDAR)) 
      .setServiceAccountPrivateKeyFromP12File(new File(key.p12)) 
      .build(); 

    service = new Calendar.Builder(TRANSPORT, JSON_FACTORY, credential) 
     .build();