SyntaxHighlighter

2012年3月22日木曜日

Google Calendar API v3 DLL開発メモ

Google Calendar API v3を使用したGoogleカレンダー予定関連の関数DLL作成のメモ

DLLはC#(VS2010)にて作成
.NET Frameworkは「4」を使用(サンプルコードが「2」だと動かなかった)
Developer’s Guide( v3 )が英語なので、エキサイト先生にご登場願いながら作成

・いろいろわかったこと
API使用のアクセスに回数制限(10k/day)
Get、Insert関数を行うと1回カウントされる
関数実行前に↓を実行しないとダメっぽい
「Calendar calendar = service.Calendars.Get("primary").Fetch();」←これも1回カウント
なので、Get、Insert関数実行には「1+1=2」カウント必要
大量アクセスが必要な場合は要注意か

予定の削除はデータ自体を消さずに、削除フラグを立てている
Eventの「status」が"cancelled"になってるだけなので、Get関数で取得できてしまう
何か方法があると思うが、自作が必要?( ゚皿゚)キーッ!!

予定の日時の形式と格納場所が終日時とそうでないときで違う
終日時
 形式:「yyyy-MM-dd」形式
 格納場所:開始「Start.Date」、終了「End.Date」
通常時
 形式:「RFC3339」形式でないとダメ(↓で変換できた)
 「System.Xml.XmlConvert.ToString([日時], System.Xml.XmlDateTimeSerializationMode.Local)」
 TimeZoneが関係するので、日本の場合は「~+09:00」にする
 格納場所:開始「Start.DateTime」、終了「End.DateTime」

予定が終日時の日付設定の注意
なぜか終了時は1日足す必要がある(Googleカレンダーで見ると1日足されていない)
例:2012年3月22日の終日予定を設定する場合
 ×「Start.Date=”2012-03-22”」「End.Date=”2012-03-22”」
 ↓
 ○「Start.Date=”2012-03-22”」「End.Date=”2012-03-23”」( ゚皿゚)キーッ!!

予定の更新はEventをNewで作ってUpdateするとエラー
Insertと同じようにNewでEventを作ってUpdateするとエラーになったが
Getで取得したEventを使って内容を書き換えると可能( ゚皿゚)キーッ!!

-----以下DLL内容の概要メモ------

・必要なDLL一覧(Google APIs Client Library for .NETを使用)
DotNetOpenAuth.dll
Google.Apis.dll
Google.Apis.Authentication.OAuth2.dll
Google.Apis.Calendar.v3.dll
※log4net.dll
※Newtonsoft.Json.Net35.dll
※:参照設定はしないが、動作させるのに必要(リビルドするとコピーされてた)

・自作プロパティ(IDとかを設定、取得に使用)
ClientId:Google APIs Console-Client ID
ClientSecret:Google APIs Console-Client secret
AuthorizationCode:アクセス許可した後に表示される認証コード
RefreshToken:AuthorizationCodeを使用して取得するRefreshToken Code
CalendarID:GoogleカレンダーID

・自作関数(Google APIs Consoleでの設定が必要)
public static bool TryGetRefreshToken()
Googleカレンダーへの認証Webページ表示→認証コードを貼り付けてRefreshTokenを取得、戻り値は成功の可否
認証コード を「AuthorizationCode」、取得したRefreshTokenを「RefreshToken」に設定
※「ClientId」「ClientSecret」を実行前に設定しておくこと

public static bool TryRefreshTokenAccess()
GoogleカレンダーへのRefreshTokeによる認証、戻り値は成功の可否
↓3項目が正しいかどうかのチェックに使用
※「ClientId」「ClientSecret」「RefreshToken」を実行前に設定しておくこと

public static string GetCalenderTitle()
public static bool TryGetCalenderTitle(out string result)
Googleカレンダーのタイトルを取得
Try~は戻り値を成功の可否にして、outに取得値を格納
TryGetCalenderTitleはGoogleカレンダーの存在チェックにつかえるかも
※「ClientId」「ClientSecret」「RefreshToken」「CalendarID」を実行前に設定しておくこと

public static Event GetEvent(string eventId)
public static bool TryGetEvent(string eventId, out Event result)
指定したイベントIDのGoogleカレンダー予定の取得、戻り値は取得したEvent
Try~は戻り値を成功の可否にして、outに取得値を格納
削除した予定も「取得できる」スグレモノ?
Eventの「status」が"cancelled"でも取得してしまうもよう
元のGet関数の仕様っぽいので、自前で除くか検討
↑たぶんGoogleカレンダー予定は削除しても消されずにEventの「status」が"cancelled"になってるだけ
※「ClientId」「ClientSecret」「RefreshToken」「CalendarID」を実行前に設定しておくこと

public static void DeleteEvent(string eventId)
public static bool TryDeleteEvent(string eventId)
指定したイベントIDのGoogleカレンダー予定の削除
Try~は戻り値を成功の可否
※「ClientId」「ClientSecret」「RefreshToken」「CalendarID」を実行前に設定しておくこと

public static Event InsertEvent(string summary, bool allday, DateTime start, DateTime end, string location, string description)
public static bool TryInsertEvent(string summary, bool allday, DateTime start, DateTime end, string location, string description, out Event result)
Googleカレンダー予定の追加、戻り値は追加したEvent
Try~は戻り値を成功の可否にして、outに取得値を格納
日付は文字列入力のほうが良い?なので、変更するかも
※「ClientId」「ClientSecret」「RefreshToken」「CalendarID」を実行前に設定しておくこと

public static Event UpdateEvent(string eventId, string summary, bool allday, DateTime start, DateTime end, string location, string description)
public static bool TryUpdateEvent(string eventId, string summary, bool allday, DateTime start, DateTime end, string location, string description, out Event result)
Googleカレンダー予定の更新、戻り値は更新したEvent
Try~は戻り値を成功の可否にして、outに取得値を格納
UpdateはGetで取得したEventを使わないとエラーになる
※「ClientId」「ClientSecret」「RefreshToken」「CalendarID」を実行前に設定しておくこと

0 件のコメント:

コメントを投稿