LoginSignup
2
3

More than 3 years have passed since last update.

Google Calendar APIを使用してみる #3

Last updated at Posted at 2020-02-27

シリーズ

Google Calendar APIを使用してみる #1
Google Calendar APIを使用してみる #2

環境

IDE:VisualStudio2019
アプリケーション:コンソールアプリ
フレームワーク:.NET Core 3.1

カレンダーの予定を更新

前回追加した予定を更新してみます。

メソッドは以下のUpdateを使用すれば良さそう。
Google.Apis.Calendar.v3.EventsResource.Update
image.png

今回は、前回の記事のインサートメソッドで追加したイベントを返却するようにし、そのイベント情報を用いて更新するようにします。

        /// <summary>
        /// カレンダーイベントを追加
        /// </summary>
        /// <param name="calendarId">カレンダーID</param>
        /// <returns>イベント</returns>
        public Event InsertEvent(string calendarId)
        {
            var newEvent = new Event()
            {
                Summary = "Google I/O 2020",
                Location = "神奈川県横浜市",
                Description = "テスト備考",
                Start = new EventDateTime()
                {
                    DateTime = DateTime.Parse("2020/02/28 9:00:00"),
                    TimeZone = "Asia/Tokyo",
                },
                End = new EventDateTime()
                {
                    DateTime = DateTime.Parse("2020/02/28 17:00:00"),
                    TimeZone = "Asia/Tokyo",
                },

                //以下があるとエラーになるので・・・
                //Recurrence = new string[] { "RRULE:FREQ=DAILY;COUNT=2" },
                //Attendees = new EventAttendee[] {
                //    new EventAttendee() { Email = "lpage@example.com" },
                //    new EventAttendee() { Email = "sbrin@example.com" },
                //},
                //Reminders = new Event.RemindersData()
                //{
                //    UseDefault = false,
                //    Overrides = new EventReminder[] {
                //        new EventReminder() { Method = "email", Minutes = 24 * 60 },
                //        new EventReminder() { Method = "sms", Minutes = 10 },
                //    }
                //}
            };

            var request = this.Serive.Events.Insert(newEvent, calendarId);
            var createdEvent = request.Execute();
            Console.WriteLine("Event created: {0}", createdEvent.HtmlLink);

            return createdEvent;
        }

        /// <summary>
        /// イベント更新
        /// </summary>
        /// <param name="calendarId">カレンダーID</param>
        /// <param name="evt">更新対象イベント</param>
        /// <returns>更新後のイベント</returns>
        public Event UpdateEvent(string calendarId, Event evt)
        {
            evt.Summary = "Google I/O 2020 update";
            evt.Location = "東京都八王子市";
            evt.Start.DateTime = DateTime.Parse("2020/02/28 12:00:00");
            evt.End.DateTime = DateTime.Parse("2020/02/28 21:00:00");

            var request = this.Serive.Events.Update(evt, calendarId, evt.Id);

            return request.Execute();
        }

メインエントリ側

using GoogleAPITest.Calendar;
using System;

namespace GoogleAPITest
{
    /// <summary>
    /// メインクラス
    /// </summary>
    public class Program
    {
        /// <summary>
        /// メインエントリ
        /// </summary>
        /// <param name="args">実行時引数</param>
        public static void Main(string[] args)
        {
            try
            {
                // カレンダーID
                var calendarId = "カレンダーID";

                // Googleカレンダーテストクラスインスタンス化
                var calApi = new CalendarAPITest(@"C:\job\TestProject\GoogleAPITest\testproject-269217-813bf9be17a5.json");

                // イベント読み取り
                calApi.ReadEvents(calendarId);

                // イベント追加
                var evt = calApi.InsertEvent(calendarId);

                // イベント更新
                calApi.UpdateEvent(calendarId, evt);
            }
            catch (Exception err)
            {
                Console.WriteLine(err.Message);
            }
            finally
            {
                Console.Read();
            }
        }
    }
}

動作確認

一度クリアしておいたほうがわかりやすいです。
image.png

実行結果
image.png
ちょっとわかりにくいですね
デバッグ実行して1ステップずつ動かしながら、カレンダーを見るとわかりやすいです。

予定の削除

削除もついでにやってみます。

        /// <summary>
        /// イベント削除
        /// </summary>
        /// <param name="calendarId">カレンダーID</param>
        /// <param name="eventId">イベントID</param>
        public void DeleteEvent(string calendarId, string eventId)
        {
            var request = this.Serive.Events.Delete(calendarId, eventId);
            request.Execute();
        }

メインエントリ

using GoogleAPITest.Calendar;
using System;

namespace GoogleAPITest
{
    /// <summary>
    /// メインクラス
    /// </summary>
    public class Program
    {
        /// <summary>
        /// メインエントリ
        /// </summary>
        /// <param name="args">実行時引数</param>
        public static void Main(string[] args)
        {
            try
            {
                // カレンダーID
                var calendarId = "カレンダーID";

                // Googleカレンダーテストクラスインスタンス化
                var calApi = new CalendarAPITest(@"C:\job\TestProject\GoogleAPITest\testproject-269217-813bf9be17a5.json");

                // イベント読み取り
                calApi.ReadEvents(calendarId);

                // イベント追加
                var evt = calApi.InsertEvent(calendarId);

                // イベント更新
                evt = calApi.UpdateEvent(calendarId, evt);

                // イベント削除
                calApi.DeleteEvent(calendarId, evt.Id);
            }
            catch (Exception err)
            {
                Console.WriteLine(err.Message);
            }
            finally
            {
                Console.Read();
            }
        }
    }
}

実行結果
image.png
※こちらもわかりにくいので、ステップ実行して1行ずつ確認したほうがいいです。
※削除処理で呼び出されるDeleteRequest.Executeはstringを戻り値で返すんですが、削除したイベントIDかと思いきや空文字でした・・・なので、DeleteEventメソッドはvoidにしてます。

おわりに

公式のサンプルでCRUDの基本は学べました。案件まだまにあうなら受けようかな・・・(クラウドソーシング)
GoogleCalendarAPIのお試しはとりあえずここまでにしようと思います。
次のネタがもうない・・・dockerの不明点調べないと・・・

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3