ちょっとWebアプリからGoogleカレンダーに予定を追加したいなと思ったのでその手順をメモっておきます。
準備
Goolge Cloud Consoleにてプロジェクト及びアプリケーションを登録する。
以下、ポイント
- プロジェクトの作成
公式ドキュメントはこの辺にまとめてある=> Google Calendar API
コードの取得
以下のURLにアクセス(Get)する
https://accounts.google.com/o/oauth2/auth?client_id={0}&response_type=code&redirect_uri={1}&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcalendar
すると、Googleの認証画面が表示されるので認証する。
認証が終わると、redirect_uriで指定したURLへリダイレクトするが、この時URLにcodeがパラメータとして渡されてくる。
access_tokenの取得
取得したコードと事前に発行された client_id,client_secret を使用して access_token を取得する。
以下の様に https://accounts.google.com/o/oauth2/token 宛にPOSTを行う。
var cl = new WebClient(); cl.Encoding = Encoding.UTF8; cl.Headers["content-type"] = "application/x-www-form-urlencoded"; var query = String.Format( "code={0}&client_id={1}&client_secret={2}&redirect_uri={3}&grant_type={4}", code, client_id, client_secret, "http://localhost:50808/", "authorization_code" ); result = cl.UploadString("https://accounts.google.com/o/oauth2/token", "POST", query); var account = DynamicJson.Parse(result); Session.Add("access_token", account.access_token);
予定の登録
access_tokenを使用して予定を登録する。
var cl = new WebClient(); cl.Encoding = Encoding.UTF8; cl.Headers.Add("Authorization", "Bearer " + accessToken); cl.Headers.Add("content-type", "application/json"); var query = DynamicJson.Serialize( new { start = new { date = "2013-10-22" }, end = new { date = "2013-10-22" }, summary = "TEST" }); var result = cl.UploadString("https://www.googleapis.com/calendar/v3/calendars/{calendarId}/events", "POST", query);
細かい仕様は下記公式ドキュメントを参照
ちょろっとJsonを扱いたいときにDynamicJsonがあると便利ですね。