目的
ユーザーがフォーム(面談予約や日程登録など)で送信した段階でGoogleCalendarに
日時が設定されるコードを作りたい。
下記コードをご覧ください。
CalendarAlignment.java
Java
1package googleCalendar; 2 3import java.io.FileInputStream; 4import java.io.IOException; 5import java.security.GeneralSecurityException; 6import java.util.Collections; 7 8import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport; 9import com.google.api.client.http.javanet.NetHttpTransport; 10import com.google.api.client.json.gson.GsonFactory; 11import com.google.api.client.util.DateTime; 12import com.google.api.services.calendar.Calendar; 13import com.google.api.services.calendar.CalendarScopes; 14import com.google.api.services.calendar.model.Event; 15import com.google.api.services.calendar.model.EventDateTime; 16import com.google.auth.Credentials; 17import com.google.auth.appengine.AppEngineCredentials; 18import com.google.auth.http.HttpCredentialsAdapter; 19 20public class CalendarAlignment { 21 22 private String date; 23 private String time; 24 private String detail; 25 26 public CalendarAlignment(String date,String time,String detail) { 27 this.date = date; 28 this.time = time; 29 this.detail = detail; 30 } 31 32 public void calendar() throws IOException,GeneralSecurityException{ 33 final NetHttpTransport HTTP_TRANSPORT = GoogleNetHttpTransport.newTrustedTransport(); 34 Credentials credentials = AppEngineCredentials.fromStream(new FileInputStream("C:/GoogleCloudPlatform/superb-joy-342901-9a12b53f05c2.json")) 35 .createScoped(Collections.singleton(CalendarScopes.CALENDAR_EVENTS)); 36 Calendar service = new Calendar.Builder(HTTP_TRANSPORT,GsonFactory.getDefaultInstance(), new HttpCredentialsAdapter(credentials)) 37 .setApplicationName("Calendar") 38 .build(); 39 40 StringBuilder dataString = new StringBuilder(); 41 dataString.append(this.date); 42 dataString.append("T"); 43 dataString.append(this.time); 44 dataString.append(":00.000+09:00"); 45 46 EventDateTime startDataTime = new EventDateTime().setDateTime(new DateTime(dataString.toString())); 47 EventDateTime endDataTime = new EventDateTime().setDateTime(new DateTime(dataString.toString())); 48 49 String detail = this.detail; 50 Event event = new Event() 51 .setDescription(detail) 52 .setStart(startDataTime) 53 .setEnd(endDataTime); 54 55 event = service.events().insert("flnd90ighkv4ef5vp57rugmcbc@group.calendar.google.com", event).execute(); 56 } 57}
CalendarController.java
Java
1package googleCalendar; 2 3import java.io.IOException; 4import java.security.GeneralSecurityException; 5 6import javax.servlet.RequestDispatcher; 7import javax.servlet.ServletException; 8import javax.servlet.annotation.WebServlet; 9import javax.servlet.http.HttpServlet; 10import javax.servlet.http.HttpServletRequest; 11import javax.servlet.http.HttpServletResponse; 12/** 13 * Servlet implementation class GoogleCalendarController 14 */ 15@WebServlet("/CalendarController") 16public class CalendarController extends HttpServlet { 17 private static final long serialVersionUID = 1L; 18 19 /** 20 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 21 */ 22 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 23 RequestDispatcher dispatcher = request.getRequestDispatcher("jsp/index.jsp"); 24 dispatcher.forward(request, response); 25 26 } 27 28 /** 29 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 30 */ 31 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 32 request.setCharacterEncoding("UTF-8"); 33 String date = request.getParameter("date"); 34 String time = request.getParameter("time"); 35 String detail = request.getParameter("detail"); 36 37 UserData userData = new UserData(date,time,detail); 38 CalendarAlignment alignment = new CalendarAlignment(userData.getDate(),userData.getTime(),userData.getDetail()); 39 40 try { 41 alignment.calendar(); 42 } catch (IOException | GeneralSecurityException e) { 43 // TODO 自動生成された catch ブロック 44 e.printStackTrace(); 45 } 46 47 } 48 49}
UserData.java
Java
1package googleCalendar; 2 3public class UserData { 4 private String date; 5 private String time; 6 private String detail; 7 8 public UserData() {} 9 10 public UserData(String date,String time,String detail) { 11 this.date = date; 12 this.time = time; 13 this.detail = detail; 14 } 15 16 public String getDate() { 17 return this.date; 18 } 19 public String getTime() { 20 return this.time; 21 } 22 public String getDetail() { 23 return this.detail; 24 } 25} 26
全対象を大まかに説明すると、jspで入力したパラメーターをPostで受け取り、UserDataの引数に設定。
CalendarAlignmentの引数では、userDataからgetを用いてデータを取得。
CalendarAlignmentにて、パラメーターをフィールドに代入しています。
フィールドを各セットして、CalendarControllerでcalendarメソッドを呼び出しました。
結果的にGoogleCalendarを確認すると値が設定されていました。
しかし疑問に感じていることが一つあります。
疑問点
・本来insertの引数に設定してあるカレンダーidはユーザーによって変わります。
私の場合、下記カレンダーidでしたが個々のカレンダーによってidは異なる。
Java
1event = service.events().insert("flnd90ighkv4ef5vp57rugmcbc@group.calendar.google.com", event).execute();
知りたいこと
・カレンダーidが不明でもGoogleCalendarに日時を登録できるのか。
カレンダーidが必要な場合はどのような方法で他人のカレンダーidを取得するのか?
・OAuth2.0を用いれば、個々のユーザーのGoogleCalendarに日時を登録できるのか。
(参考資料など何個かあれば嬉しいです)
※補足
その他、何かコードでおかしな点があれば教えていただけると嬉しいです。
あなたの回答
tips
プレビュー