年始計画にPythonを使ってクリップボードからのGoogleカレンダー入力システムを構築した筆者であったが(記事)、その後エイリアスgoocalで呼び出すGoogleカレンダーにシンプルなカスタマイズを加えた。
○シンプルGoogleカレンダー表示Pythonスクリプト

前回、連載(ゼロからはじめるPython Googleカレンダーの予定を読み込んでカウントダウンしよう(上)カレンダー編)を元に現在の状況に合わせたカレンダー期日へのカウントダウンを表示するPythonコードを作成しているが、これとは別にシンプルにカレンダー表示をコマンドラインで表示させるものが欲しかったためだ。
CALENDAR_IDSを加えて共有カレンダーも追加できるようにした。

import datetime
from googleapiclient.discovery import build
from google.oauth2 import service_account

# クレデンシャルファイルのパス
CREDENTIALS_PATH = "credentials.json"

# カレンダーID一覧
CALENDAR_IDS = [
"●●●●●@gmail.com",
"●●●●●a286f4397703efe79513971f470a@group.calendar.google.com",
]

# スコープ
SCOPES = ["https://www.googleapis.com/auth/calendar.readonly"]

# クレデンシャルの読み込み
credentials = service_account.Credentials.from_service_account_file(
CREDENTIALS_PATH, scopes=SCOPES
)

# APIクライアント作成
service = build("calendar", "v3", credentials=credentials)

# 期間指定
now = datetime.datetime.now(datetime.UTC)
start_date = now.isoformat()
end_date = (now + datetime.timedelta(days=120)).isoformat()

# イベント取得
for calendar_id in CALENDAR_IDS:
events_result = service.events().list(
calendarId=calendar_id,
timeMin=start_date,
timeMax=end_date,
singleEvents=True,
maxResults=30,
orderBy="startTime",
).execute()

events = events_result.get("items", [])
print(f"\n=== カレンダー: {calendar_id} ===")

# 表示
if not events:
print("イベントは見つかりませんでした。")
else:
for event in events:
start = event["start"]

# 時刻あり
if "dateTime" in start:
event_date = start["dateTime"][:10] # YYYY-MM-DD
# 終日イベント
else:
event_date = start["date"]

print(f"{event_date} - {event['summary']}")

○ワークエリアからも閲覧するためにRaspberry Pi Connectを活用する

メールを想定するとイメージしやすいが、業務上関わる相手のやりとりにプライベートな情報が入ってしまうことは往々にしてある。同様に純然たる業務用カレンダーとプライベート用カレンダーの中間地点もあるわけだが、ワークエリアではpipでのGoogleライブラリインストールができない。

実行環境の構築は、ワークエリアの方針があるため自由にできないのは仕方がない。しかし、スキル向上モチベーションやアジャイルな躍動が萎縮する方向になることもあるだろう。

ソースコードの実行確認は、業務上必須であるため放棄することはできない。筆者は何十年にわたり、コードの動作確認に複数の端末をリュックに入れて足を運んでいる。Apache自宅サーバーやレンタルサーバで運用したりとインストールを敢行してきたが、ここに新ツールが加わった。Raspberry Pi Connectである。

Raspberry Pi Connectは、Raspberry Piに加わるデバイス遠隔操作システムで、インストール時に設定しておけば、スクリーン共有やリモートシェルを遠隔で実行できる。ブラウザを通して、https://connect.raspberrypi.com/devicesにアクセスすることで簡単に部屋に放置してあるRaspberry Piを遠隔操作できるというわけだ。


サーバーを立てずに実行環境を立てられるためワークエリアでもブラウザを通じて、フリーな環境で思う存分pipできる。ここでシンプルGoogleカレンダー表示Pythonスクリプトを実行させてみよう。

設定も遠隔操作で行う。上記Pythonスクリプトと動作に必要なcredentials.jsonをメールで送信する。それをConnect Via>Screen Sharingのリモートデスクトップのブラウザで受信し、実行するフォルダに配置する。あとはターミナルでの実行なので、Connect Via>Remote shellでコマンド画面を立ち上げる。

GoogleのPythonライブラリがデフォルトのPython環境では通らないので、仮想Python環境envをpython3 -m venv envで構築。source env/bin/activateで有効化し

pip install google-api-python-client

でインストールする。あとはPythonを実行するだけだ。

無事、遠隔コマンド実行でカレンダー確認できた。Python仮想環境の無効化はdeactivateだ。実行のために前回同様にエイリアスを活用しておくとよい。
筆者の場合、alias envon="source ~/env/bin/activate"でenvonを割り当てた(echo 'alias envon="source ~/env/bin/activate"' >> ~/.bashr)。こうしておけばenvonで実行環境が整う。

そこまでしなくても、ブラウザでアクセスすれば良いではないか?そういう意見もあるかもしれない。しかし、コンソールでの情報表示は視認性が良く、カスタムが自在であるという利点がある。

また、こちらの連載にあるようにrpicam-stillコマンドを入力すれば、遠隔で溢れるゴミ箱の状況も把握できる(ゴミ袋を購入しなければ!)し、こちらのレポートにあるような監視カメラを構築し、怪しげな訪問者への録画対応といったことも手のひらサイズのラズベリーパイでは手軽に構築できる。
編集部おすすめ