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に飛んで
- プロジェクト作成する
- Google Calendar APIを有効にする
- OAuth 同意画面でスコープ、テストユーザーを登録・編集する
- OAuth 2.0 クライアント IDの認証情報を作成する
すると client-id 、 client-secret が分かる
touch ~/.gcalcli_oauth
で認証トークンファイルを空で作っておく--client-id=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com
client-id 指定オプション--client-secret=xxxxxxxxxxxxxxxxxxxxxxxx
client-secret オプションgcalcli --noauth_local_webserver
と 2 , 3 オプションと適当にコマンドをどれか’list’, ‘agenda’選んで、コマンドを実行する
2から4から出来たのが↓のコマンド
gcalcli --noauth_local_webserver --client-id=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.apps.googleusercontent.com --client-secret=xxxxxxxxxxxxxxxxxxxxxxxx agenda
実行。
正しくclient_idとclient_secretが指定されていれば、表示されたリンクに飛んでも、今度はブロックされずに、Googleアカウントの選択が表示される。
-
アカウント選択
-
確認画面でcontinueをクリック
- 権限の付与の許可
- 選択内容の確認
- verification codeのコピー
で成功。
$ 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 ascii calm 1
見てのとおり全角文字は、東アジアの曖昧な文字幅どころか、全く考慮されていない…agenda
とかなら、使えるかな。あとgcalcli --lineart ascii calm 1
だとかなり良いところまで行けてるのだけど、どうしてズレるのかな。
頑張った割に徒労に終わった。
かに思ったが いや徒労のままで終わった…以下、読む必要なし。
Linux コンソール上でGoogle カレンダーを管理出来る『gcalcli』 | 俺的備忘録 〜なんかいろいろ〜を見ると
ただ、今のままだとコマンド実行時に日本語の認識がされず、正常に動作しない。
とあり、貼られている画像は綺麗に表示されている。
このため、以下のようにコマンドを実行し、日本語を認識させるファイルを設置する。
の意味が分からなかったが、以下のページを見て、なるほど(ああ、そういうことね、完全に理解した)…
- Python実行時のカスタマイズ[sitecustomize,usercustomize] - Qiita
- sitecustomize.py を使わず usercustomize.py を使おうね - Qiita
カスタマイズファイルの置き場所を確認
$ 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 だった。なら何故、綺麗に整形してくれないのか。
-
恐らく書かれたオプションをそのまま繋げるだけなので、ちゃんと指定しないと間違ったオプション指定されたということで
usage
が表示される ↩︎