2014-09-11 37 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();