2012年1月5日木曜日

Google Calendar API v3 でカレンダーに予定を登録する

前回の記事では GData API v2 を利用してカレンダーに予定を登録しました。ですが、v2 の API は 2014 年には廃止されることが決定しているため、できるだけ早期に v3 へと移行する必要があります。今回は v3 の API を利用して予定を登録してみます。

v3 の API はまだ GData API ライブラリとしては提供されていないため、Google APIs Client Library for .NET を利用します。v3 より認証方法が OAuth を利用する必要がありますので、前回までとは異なるロジックになります。

※データを参照するだけならば API Key を利用する方法も可能です。

OAuth で認証を行うためには事前準備としてプロジェクトを登録し、クライアント ID 等を取得しておく必要があります。

GoogleAPIConsole1

Google APIs Console にアクセスし、上記画面の青いボタンをクリックします。

ClientID0

このようなダイアログが表示されるので Project Names に適当なプロジェクト名を入力し、Next をクリックします。

ClientID1

続いてこのようなダイアログが表示されますので、アプリケーションの種別を Web アプリなのかクライアントアプリなのかを選択します。今回はクライアントアプリですので、下のラジオボタンを選択します。

ClientID2

選択するとダイアログが縮みますので、Create Client ID をクリックします。

APIConsole

クリックするとアプリケーション用のクライアント ID や秘密キーが作成されます。アプリケーションからアクセスする際に、これらの文言が必要になります。

続いてカレンダー API の利用ができるように設定します。

GoogleAPIConsole2

左側の Services タブをクリックすると API の一覧が表示されますので、Calendar API を選択、スイッチらしきところをクリックすると上記のように利用可能状態になります。ここまでが下準備となり、後はコードの実装です。

   1: Sub Main()
   2:     Const ClientID = "[クライアント ID]"
   3:     Const ClientSecret = "[クライアントシークレット]"
   4:     Const calendarID = "[カレンダーID]"
   5:  
   6:     '認証
   7:     Dim prov As New NativeApplicationClient(GoogleAuthenticationServer.Description) With {
   8:         .ClientIdentifier = ClientID,
   9:         .ClientSecret = ClientSecret
  10:     }
  11:  
  12:     Dim auth As New OAuth2Authenticator(Of NativeApplicationClient)(prov, Function(arg)
  13:                                                                               Dim state As New AuthorizationState({CalendarService.Scopes.Calendar.GetStringValue()})
  14:  
  15:                                                                               state.Callback = New Uri(NativeApplicationClient.OutOfBandCallbackUrl)
  16:                                                                               Dim authUri = arg.RequestUserAuthorization(state)
  17:  
  18:                                                                               Process.Start(authUri.ToString())
  19:                                                                               Dim authCode = Console.ReadLine()
  20:  
  21:                                                                               Return arg.ProcessUserAuthorization(authCode, state)
  22:                                                                           End Function)
  23:  
  24:     Dim cService As New CalendarService(auth)
  25:     Dim resultQuickEvent = cService.Events.QuickAdd(calendarID, "予定のタイトル").Fetch
  26:  
  27: End Sub

基本的なロジックは Developer’s Guide( v3 ) のものを参照しています。VB 用に少し書き直した程度です。また、本当であれば QuickAdd を利用した形ではなく、ちゃんとした形で予定登録できればよかったのですが、残念なことにまだ正常に登録できる実装が良くわかっていません。

QuickAdd を利用した場合、予定の日時は現在日時を利用するという制限がありますが、予定自体は登録されます。

なお、ロジック中ででてくるカレンダー ID ですが、各カレンダーごとに設定されています。値の確認方法は、ブラウザでカレンダーの設定を確認してもらうか、上記認証を行った後に cService.CalendarList.List.Fetch() と呼び出すことでカレンダー一覧が取得できます。その取得したエントリに ID プロパティがあるのでその値を参照することでも可能です。

   1: Dim cRes = cService.CalendarList.List.Fetch()
   2: For Each child In cRes.Items
   3:     Console.WriteLine(child.Summary + " : " + child.Id)
   4: Next

このような形でアプリケーションより Google カレンダーの操作を行う事ができます。GData API と比較するとやや認証回りが面倒になっていますが、認証後はクラス名の違いはあれどもそれほど大きくは変更していませんので、移行するにおいてもまだ楽なのではないでしょうか。

0 件のコメント:

コメントを投稿