適材適所

PowerShellやVBAなどのプログラミングに関すること、キャリア、子育ての3本で書いていきます

PowerShellでGoogleカレンダーを操作する その4~予定を簡単に追加する~

PowerShell×Google APIシリーズ

PowerShellでGoogleカレンダーを操作する - 適材適所

PowerShellでGoogleカレンダーを操作する その2~予定を追加する~ - 適材適所

https://www.tekizai.net/entry/googlecalendar_powershell_3

PowerShellでGoogleカレンダーに簡単に予定を追加

ちららの記事では、PowerShellを使って、Googleカレンダーに予定を追加するオーソドックスな方法を紹介しました。

#dllのロード、OAuth認証は省略

##Create Google Calendar API service.
$baseClient=New-Object Google.Apis.Services.BaseClientService+Initializer
$baseClient.HttpClientInitializer =$credential
$baseClient.ApplicationName=$ApplicationName
$service=New-Object Google.Apis.Calendar.v3.CalendarService($baseClient)

#新しいイベントを作成します
$newEvent=New-Object Google.Apis.Calendar.v3.Data.Event
$newEvent.Summary="Google Api Test"$newEvent.Location="東京都中央区"
$newEvent.Description="meeting"

#開始日$start=New-Object Google.Apis.Calendar.v3.Data.EventDateTime
$start.DateTime=[System.DateTime]::Parse("2020/7/1 10:00:00")
$start.TimeZone="Asia/Tokyo"

#終了日$end=New-Object Google.Apis.Calendar.v3.Data.EventDateTime
$end.DateTime=[System.DateTime]::Parse("2020/7/1 12:00:00")
$end.TimeZone="Asia/Tokyo"

$newEvent.Start=$start
$newEvent.End=$end

$calendarId="primary"
$request=$service.Events.Insert($newEvent,$calendarId)
$createdEvent=$request.Execute()

この方法だと、開始日やサマリー以外にも他の参加者や、予定の繰り返しなどの詳細も設定できますが、

開始日と終了日、サマリーくらいしか登録しない!!ということもあるかと思います。

今回紹介するのは、そのような場合に役立つ方法です。

QuickAdd

EventsオブジェクトのQuickAddメソッドを使うことで、簡単に予定を追加することができます。

公式リファレンスに

Creates an event based on a simple text string

とあるように、こちらのQuickAddメソッドは、簡単な文字列からEventを追加することができます。

リンクの公式リファレンスには、.NETの例はありませんが、他の言語のサンプルから、なんとなく雰囲気がわかってもらえるかなぁと思います。

ちなみに.NETのQuickAddの構文はこうなっています。

OverloadDefinitions
-------------------
Google.Apis.Calendar.v3.EventsResource+QuickAddRequest QuickAdd(string calendarId, string text)

これを踏まえて、PowerShell(.NET)でQuickAddを使って予定を追加してみます。

#dllのロード、OAuth認証は省略

##Create Google Calendar API service.
$baseClient=New-Object Google.Apis.Services.BaseClientService+Initializer
$baseClient.HttpClientInitializer =$credential
$baseClient.ApplicationName=$ApplicationName
$service=New-Object Google.Apis.Calendar.v3.CalendarService($baseClient)
$service.Events.QuickAdd("primary",'2020年6月3日 10am-10:25am 約束').execute()

先ほどのInsertの場合と比べると、追加の処理が1行で済んでおり、とても簡単に予定を追加できることがわかってもらえるかと思います。

ただし引数のTextに注意

引数のTextについては、公式リファレンスにはあまり詳しく書いておりません。

公式リファレンスでは、Textについて、

The text describing the event to be created.

とだけ書かれています。

ちょっと素っ気ない気がしますが・・・。

もう少し、どんな風に書いたらいいか等の説明が欲しいところですね・・・。

ということで、日本語ではどんなケースは登録できて、どんなケースが登録できないのか、少し実験してみました。

Version

Google.Apis.Calendar.v3 1.46.0.1986

これはOK

2020/6/3 10am-10:25am 約束 2020年6月3日 10am-10:25am 約束

これはNG

6月3日 10am-10:25am 約束
⇒「6月3日約束」という名前で、明日(コマンドを実行した日の次の日)の日付で登録されてしまいました。

2020年6月3日 10:00-10:25 約束
⇒「約束」という名前で、6月4日の終日の予定として登録されてしまいました。

2020年6月3日 午前10時-午前10時25分 約束
⇒「約束」という名前で、6月4日の終日の予定として登録されてしまいました。

2020年6月3日 約束 東京にて
⇒「約束 東京にて」という名前で6月4日の終日の予定として登録されてしまいました。

2020年6月3日 約束 at 東京
⇒「約束 at 東京」という名前で6月4日の終日の予定として登録されてしまいました。

ここから言えること

・日付はyyyy/M/dでも、yyyy年M月d日のどちらでも大丈夫 ・時間指定は、「10am-10:25am」の書式に従う必要があること ・時間指定の書式が正しくなかったり、指定しないと指定した日の翌日になってしまう? ・場所の指定はできない?

⇒どうも本当に簡単な予定(開始日、終了日、サマリーくらい)しか登録できなさそうです。

終わりに

PowerShellでGoogle Calendarに簡単に予定を追加する方法を紹介しました。

確かに簡単に予定を追加することができますが、通常の方法と比べ、限定された項目しか設定できないこと、

また、どんなテキストを与えれば正しく追加できるか、若干クセがあること等を念頭に置いて使い分けが必要ですね。

APIのVersionも日々上がっていますので、きっとどんどん精巧になっていくことでしょう。

以上、ここまでお読みいただき、ありがとうございました。