Google Calendar API の予定の登録を Google OAuth 2.0 を使って、curl コマンドから実行してみる

Google Calendar への予定登録を [curl](https://curl.se/) を使って試した時の備忘録です。

まず、下記の公式サイトにアクセスします。
このページは、Google Calendar APIを使っての予定の登録はこのページを参考にしてという内容が書いてあります。
https://developers.google.com/calendar/v3/reference/events/insert

アクセスするとこのような画面になるので、右側の「Try it!」というボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/640981/ea1a751b-4781-6514-dd51-746e7d93539e.png)

次に右側の拡大ボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/640981/e461783a-a4ac-7a9d-f8bf-88c277351a2f.png)

すると、Request parameters と Request body を入力する画面が表示されるので、必要な個所を入力していきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/640981/33c5cf0b-857f-5545-1d60-0d13a9e45e97.png)

##必須項目
[公式サイト](https://developers.google.com/calendar/v3/reference/events/insert)を読むと
Request parameters には、calendarId が必須、
Request body には、end と start が必須
と記載されていました。
なので、そこの部分を埋めていきます。

##入力
今回は、下記のようにしてみます。せっかくなので、summaryも追加して、予定名も付けました。
__Request parameters__
calendarId :　primary

__Request body__
{
  "end": {
    "dateTime": "2021-01-11T23:00:00+09:00"
  },
  "start": {
    "dateTime": "2021-01-11T21:00:00+09:00"
  },
  "summary": "Google Calendar API テスト"
}

入力したら、画面下の「EXECUTE」ボタンをクリックします。（API key のチェックは外しています。）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/640981/fbb5e610-edef-f038-2bfa-b1243dfc7b5a.png)

下記のように、緑の中が200となっていたら成功です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/640981/6eb189c5-a174-dcb2-0fd5-3a263779a850.png)

Google Calendar を開いてみると、正しく登録できているのが確認できました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/640981/531fec0e-394f-01d1-1599-3278b4325d86.png)

##本題のcurlコマンドを使って予定の登録を行っていきます。
まず、画面のcURLタブのコマンドをコピーします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/640981/04cd153b-ca1f-2a09-3761-0ba8674a06d6.png)

コピーしたコマンドが Linux 環境向けだったので、[Git Bash](https://gitforwindows.org/)を開いて貼り付けました。
※access_toeknは事前に取得していたアクセストークンを張り付けています。

```bash
$ curl --request POST \
>   'https://www.googleapis.com/calendar/v3/calendars/primary/events' \
>   --header 'Authorization: Bearer ya29.a0AfH6SMCWXNZ5EAu6vv4QLbKyy_eq_ZeNFFxsS--djodFSFoAUjX_6jHa-CTGyVM4I2UH8jHSTlmByfwVXbCc4BQJBcRKTLhnD3vYNunDwhXt8FGTgx9Ek627Rf7RVOfNvrjua4NkSYkse-5yYxdhsTMuoOT6po5suyxhR9l6ptc' \
>   --header 'Accept: application/json' \
>   --header 'Content-Type: application/json' \
>   --data '{"end":{"dateTime":"2021-01-11T23:00:00+09:00"},"start":{"dateTime":"2021-01-11T21:00:00+09:00"},"summary":"Google Calendar API TEST"}' \
>   --compressed
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   871  100   737  100   134    471     85  0:00:01  0:00:01 --:--:--   557{
 "kind": "calendar#event",
 "etag": "\"3219531517408000\"",
 "id": "bkt13a929n6tsqjd5b2otnapi8",
 "status": "confirmed",
 "htmlLink": "https://www.google.com/calendar/event?eid=Ymt0MTNhOTI5bjZ0c3FqZDViMm90bmFwaTggZ3V5Lm5pY2VndXkxMjM0NUBt",
 "created": "2021-01-04T13:09:18.000Z",
 "updated": "2021-01-04T13:09:18.704Z",
 "summary": "Google Calendar API TEST",
 "creator": {
  "email": "guy.niceguy12345@gmail.com",
  "self": true
 },
 "organizer": {
  "email": "guy.niceguy12345@gmail.com",
  "self": true
 },
 "start": {
  "dateTime": "2021-01-11T21:00:00+09:00"
 },
 "end": {
  "dateTime": "2021-01-11T23:00:00+09:00"
 },
 "iCalUID": "bkt13a929n6tsqjd5b2otnapi8@google.com",
 "sequence": 0,
 "reminders": {
  "useDefault": true
 }
}
```
Response の中身を見てもわかる通り、正しく予定を登録することができました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/640981/365e7696-2b35-2dee-9bf2-f6fdce4cbe53.png)

#苦労したことメモ
・RFC3339 でのJST の指定の仕方が分からなかった。
　→「YYYY-MM-DDTHH:MM:SS+09:00」と打てばよい。
　例）2021-01-11T21:00:00+09:00
・Git bash でcurlコマンドから予定を登録するときに、summaryに日本語文字を使うと文字化けして登録される。
　「chcp.exe 65001」、「chcp.exe 932」を実行して文字コードを変えてみても、どちらもうまくいかなかった。
　→未解決です。