有馬総一郎のブログ

(彼氏の事情)

2021年02月17日 21:02:51 JST - 6 minute read - Linux

Googleカレンダーのコマンドラインインターフェース gcalcliを使ってみる

Google Calendarの良いクイアントアプリはないかなーと探していたら、 Muestra tu Google Calendar en el escritorio con Conky | Ubunlogなるページを見付けた。

インストールは簡単

おおー、conkyでGoogle Calendarを表示できるなんてお洒落じゃない!?と思って早速インストール。

sudo apt-get install gcalcli

しかし、その後の認証が大変だった。上記サイトでは gcalclirc

user:test@gmail.com
pw:googlepassword

みたいな感じでやれば宜しくやってくれるのかと思いきや、なにをやってもusageの画面ばかり出る1。情報が古かった。

$ gcalcli --noauth_local_webserver list
usage: gcalcli [-h] [--auth_host_name AUTH_HOST_NAME] [--noauth_local_webserver]
               [--auth_host_port [AUTH_HOST_PORT [AUTH_HOST_PORT ...]]]
               [--logging_level {DEBUG,INFO,WARNING,ERROR,CRITICAL}] [--version]
               [--client-id CLIENT_ID] [--client-secret CLIENT_SECRET]
               [--config-folder CONFIG_FOLDER] [--noincluderc] [--calendar CALENDAR]
               [--default-calendar DEFAULTCALENDAR] [--locale LOCALE] [--refresh]
               [--nocache] [--conky] [--nocolor] [--lineart {fancy,unicode,ascii}]
               {list,search,edit,delete,agenda,updates,calw,calm,quick,add,import,remind}
               ...
gcalcli: error: argument command: invalid choice: '[gcalcli]' (choose from 'list', 'search', 'edit', 'delete', 'agenda', 'updates', 'calw', 'calm', 'quick', 'add', 'import', 'remind')

まずは gcalclirc を削除して、作者のページ GitHub - insanum/gcalcli: Google Calendar Command Line Interface)をちゃんと見ることに。

そして、もっと分かりやすいのが gcalcli - Google Calendar CLI | IT notesのページだった。

認証手順

初回時に認証過程を経る必要があるので、適当に以下を実行。

$ gcalcli --noauth_local_webserver agenda
/usr/lib/python3/dist-packages/oauth2client/_helpers.py:255: UserWarning: Cannot access /home/arimasou16/.gcalcli_oauth: No such file or directory
  warnings.warn(_MISSING_FILE_MESSAGE.format(filename))

Go to the following link in your browser:

    https://accounts.google.com/o/oauth2/v2/auth?client_id=123456789012.apps.googleusercontent.com&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcalendar&access_type=offline&response_type=code

Enter verification code: 
Authentication has failed: invalid_requestMissing required parameter: code

分かったのが、

  • ~/.gcalcli_oauth がないという警告(勝手に自動生成してくれない)
  • 上記リンクに飛んでもこのアプリはブロックしますとなる
  • gcalcliを動かすための認証情報OAuth 2.0 クライアント IDを作る必要がある

ここでは、すっとばすが Google developer consoleに飛んで

  1. プロジェクト作成する
  2. Google Calendar APIを有効にする
  3. OAuth 同意画面でスコープ、テストユーザーを登録・編集する
  4. OAuth 2.0 クライアント IDの認証情報を作成する

すると client-idclient-secret が分かる

  1. touch ~/.gcalcli_oauthで認証トークンファイルを空で作っておく
  2. --client-id=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com client-id 指定オプション
  3. --client-secret=xxxxxxxxxxxxxxxxxxxxxxxx client-secret オプション
  4. gcalcli --noauth_local_webserver2 , 3 オプションと適当にコマンドをどれか’list’, ‘agenda’選んで、コマンドを実行する

2から4から出来たのが↓のコマンド gcalcli --noauth_local_webserver --client-id=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com --client-secret=xxxxxxxxxxxxxxxxxxxxxxxx agenda 実行。

正しくclient_idとclient_secretが指定されていれば、表示されたリンクに飛んでも、今度はブロックされずに、Googleアカウントの選択が表示される。

  1. アカウント選択

    gcalcli 認証
  2. 確認画面でcontinueをクリック

gcalcli 認証
  1. 権限の付与の許可
gcalcli 認証
  1. 選択内容の確認
gcalcli 認証
  1. verification codeのコピー
gcalcli 認証

で成功。

$ gcalcli --noauth_local_webserver --client-id=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com --client-secret=xxxxxxxxxxxxxxxxxxxxxxxx agenda

Go to the following link in your browser:

    https://accounts.google.com/o/oauth2/v2/auth?client_id=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fcalendar&access_type=offline&response_type=code

Enter verification code: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Authentication successful.

しかし、ここまでやっての結果は残酷なものだった…

gcalcli agenda

水  2月 17  7:00           XX記念日

木  2月 18         サイゾー発売日
                   LINE Pay シネマディ
                   KYOSUKE HIMURO since 1988発送

金  2月 19  21:00          エリア88試写会

土  2月 20         会社出勤日
                   氷室京介/60TH ANNIVERSARY「DOCUMENT OF KYOSUKE HIMURO“POSTSCRIPT”」Blu-ray BOX(完全受注生産)
            13:20          ABCDEFGH
            14:00          さしすせその会

日  2月 21  16:00          中東アジア

gcalcli list

$ gcalcli list
 Access  Title
 ------  -----
  owner  誰かのカレンダー
  owner  xxxxxxxxxx001@gmail.com
  owner  Todoist
 reader  日本の祝日
 reader  xxxxxxxxxx002@gmail.com
 reader  誕生日
 writer  友達
 writer  ファミリー

gcalcli calw 4

$ gcalcli calw 4
┌─────────────────────────┬─────────────────────────┬─────────────────────────┬─────────────────────────┬─────────────────────────┬─────────────────────────┬─────────────────────────┐
│日曜日                   │月曜日                   │火曜日                   │水曜日                   │木曜日                   │金曜日                   │土曜日                   │      
├─────────────────────────┼─────────────────────────┼─────────────────────────┼─────────────────────────┼─────────────────────────┼─────────────────────────┼─────────────────────────┤      
│31  1月                  │01  2月                  │02  2月                  │03  2月                  │04  2月                  │05  2月                  │06  2月                  │      
│                         │                         │                         │                         │                         │                         │                         │
│00:00                    │食材飲み物いろいろ買い替え│20:00                    │粗大ゴミ出す             │                         │09:30 XP終了             │09:00 歯医者に           │
│ちゃんの誕生日   │                         あいうえおかきくけこさリハー│                         │                         │                         │                         │
│                         │有馬雪野さんの誕生日     │サル                     │19:00 秋葉原 go          │                         │                         │13:20 houseclub          │
│aaaaaaaaaaaaaaa.com      │                         │                         │                         │                         │                         │                         │
│証明書延長               │00:10 進撃の巨人放送開始 │                         │                         │                         │                         │                         │
│                         │NHK                      │                         │                         │                         │                         │                         │
│09:30 司会               │                         │                         │                         │                         │                         │                         │
│                         │14:45 歯医者             │                         │                         │                         │                         │                         │
│10:00 第2回じゃんけん   │                         │                         │                         │                         │                         │                         │
│                         │                         │                         │                         │                         │                         │                         │
│18:30 手打ち蕎麦 くう   │                         │                         │                         │                         │                         │                         │
│                         │                         │                         │                         │                         │                         │                         │
│19:30 TEARS初の配信ライブ│                         │                         │                         │                         │                         │                         │
│                         │                         │                         │                         │                         │                         │                         │
└─────────────────────────┴─────────────────────────┴─────────────────────────┴─────────────────────────┴─────────────────────────┴─────────────────────────┴─────────────────────────┘

gcalcli –lineart fancy calm 1

gcalcli --lineart fancy calm 1

gcalcli –lineart ascii calm 1

gcalcli --lineart ascii calm 1

見てのとおり全角文字は、東アジアの曖昧な文字幅どころか、全く考慮されていない…agendaとかなら、使えるかな。あとgcalcli --lineart ascii calm 1だとかなり良いところまで行けてるのだけど、どうしてズレるのかな。

頑張った割に徒労に終わった。

かに思ったが いや徒労のままで終わった…以下、読む必要なし。

Linux コンソール上でGoogle カレンダーを管理出来る『gcalcli』 | 俺的備忘録 〜なんかいろいろ〜を見ると

ただ、今のままだとコマンド実行時に日本語の認識がされず、正常に動作しない。

とあり、貼られている画像は綺麗に表示されている。

このため、以下のようにコマンドを実行し、日本語を認識させるファイルを設置する。

の意味が分からなかったが、以下のページを見て、なるほど(ああ、そういうことね、完全に理解した)…

カスタマイズファイルの置き場所を確認

$ python
Python 3.8.5 (default, Jul 28 2020, 12:59:40) 
[GCC 9.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import site
>>> site.getsitepackages()
['/usr/local/lib/python3.8/dist-packages', '/usr/lib/python3/dist-packages', '/usr/lib/python3.8/dist-packages']
>>> site.getusersitepackages()
'/home/arimasou16/.local/lib/python3.8/site-packages'

カスタマイズファイル作成

~/.local/lib/python3.8/site-packages/sitecustomize.py

import sys
sys.setdefaultencoding('utf-8')

カスタマイズファイル確認

Error in usercustomize; set PYTHONVERBOSE for traceback:
AttributeError: module 'sys' has no attribute 'setdefaultencoding'

あれ…

python - Why should we NOT use sys.setdefaultencoding("utf-8") in a py script? - Stack Overflow

sys.setdefaultencodingはなくなったみたい

というか、

>>> import sys
>>> sys.getdefaultencoding()
'utf-8'

元から utf-8 だった。なら何故、綺麗に整形してくれないのか。


  1. 恐らく書かれたオプションをそのまま繋げるだけなので、ちゃんと指定しないと間違ったオプション指定されたということでusageが表示される ↩︎