Google CalendarにC#からアクセスしてみました。最新版はv3というようですね。結構古い記事が多くAPIもだいぶ違うので手間取りました。OAuthも突破できます。
環境
Windows 7 Professional
Visual Studio 2013 Express
まずはじめに
Write your First App: Prerequisitesを読んでください。めんどいという方は下記を参考にカレンダーを読み取るための準備をしましょう。
- Google Developers Console.
- プロジェクトを選ぶ
- 左メニューの「APIs & auth」を選び、Google Calendar APIがON担っていることを確認
- 「Credentials」を選んで「Create Client ID」を押して、「Installed Application」を選択。クライアントID及びシークレットIDを作成
- 元の画面に戻ったらクライアントIDなどが生成される。「Download json」ボタンでjsonファイルを落として置く。
NuGet
NuGetというVisual Studioのパッケージマネージャをインストールします。Visual Studio 2013用のパッケージをダウンロードしてインストールしましょう。インストール後、Visual Studioの【ツール】メニューにNuGetのパッケージマネージャが入っています。【パッケージマネージャコンソール】を押すとコンソールから色々とパッケージをインスコできます。
Visual Studioで新規プロジェクトを作成
C#の空のコンソールアプリケーションを作成しましょう。そして先ほど入れたNuGetのパッケージマネージャコンソールを開いてライブラリをインストールしていきます。問題なければインストールされました、といったログがでます。
PM> Install-Package Google.Apis.Calendar.v3
またダウンロードした.jsonファイルもbin/Debugなどに置いてパスを通しておきましょう。ビルドしないとこのフォルダはできないかも。
カレンダー取得のコード
ひとまず道通レベルのコードを書きました。ドキュメントを参考に色々とカレンダー情報を取得してみてください。正直あまり使いやすくなさそうです。
またクライアントシークレットは.jsonにして置いたほうがコードに秘密情報を書かなくてよいので安全ですね。カレンダーIDはわかりにくいですが、Google Calendarの【設定】-> 【カレンダータブ】-> カレンダーのリンク-> 【カレンダーのアドレス】のことです。デフォルトはGoogleアカウントだと思いますが、複数カレンダーがあると長いIDのアドレスが生成されているかと思います。
using System; using System.IO; using System.Threading; using System.Threading.Tasks; using System.Collections.Generic; using Google; using Google.Apis.Calendar.v3; using Google.Apis.Calendar.v3.Data; using Google.Apis.Auth.OAuth2; using Google.Apis.Services; using Google.Apis.Util.Store; namespace Calendar.Sample { class Program { [STAThread] static void Main(string[] args) { Console.WriteLine("Calendar API Sample: "); Console.WriteLine("================================"); try { new Program().Run().Wait(); } catch (AggregateException ex) { foreach (var e in ex.InnerExceptions) { Console.WriteLine("ERROR: " + e.Message); } } Console.WriteLine("Press any key to continue..."); Console.ReadKey(); } private async Task Run() { UserCredential credential; using (var stream = new FileStream("client_secrets.json", FileMode.Open, FileAccess.Read)) { credential = await GoogleWebAuthorizationBroker.AuthorizeAsync( GoogleClientSecrets.Load(stream).Secrets, //new ClientSecrets{ // ClientId = s_ClientID, // ClientSecret = s_ClientSecret, //}, new[] { CalendarService.Scope.Calendar }, "user", CancellationToken.None); } // Create the service. var service = new CalendarService(new BaseClientService.Initializer() { HttpClientInitializer = credential, ApplicationName = "Calendar API Sample", }); // 取得出来たカレンダーをすべて表示 CalendarList calendarList = service.CalendarList.List().Execute(); foreach(CalendarListEntry entry in calendarList.Items){ Console.WriteLine("Calendar Title: " + entry.Summary);// + ", " + entry.Description); } // 特定のCalendarIdを取得 //Console.WriteLine(service.Calendars.Get("YOUR_CALENDAR_ID").Execute().Description); // 特定のCalendarIdの予定を表示 foreach (Event eventItem in service.Events.List("YOUR_CALENDAR_ID").Execute().Items) { Console.WriteLine(eventItem.Summary); } } } }
動かない場合
自分の場合、下記のエラーに遭遇したのでコメントにあるリンクからMicrosoft Async 1.0.166-betaをパッケージマネージャで入れなおしたらエラーが取れました。参考にしてみてください。
http://stackoverflow.com/questions/21057052/asp-net-app-crashes-could-not-load-file-or-assembly-microsoft-threading-tasks
ASP.net app crashes - Could not load file or assembly 'Microsoft.Threading.Tasks.Extensions.Desktop'