はじめに
前に書いた記事を2か月ほど運用してみて、問題が見えてきました。
問題点
私用や会社休みなどの在宅時に、自動でSNSにアップされて自身の姿が母親に見られてしまう・・!
覚えてたら9時直後にすぐOFFするけど、やっぱり人間は忘れる生き物。5回以上見られるという悲惨さ
暇つぶしに猫は見ても良いけど、私は見られたくないの。無意識な様子を見られるのって、言いようのない気持ち悪さ
自動ONに条件追加しよう
平日朝9時頃に自動ONしているけど、事前にONさせない仕組みを作ることをようやく決心。
スマホから操作したいので、googleカレンダー機能を使うのがよさそう。その備忘録な記事です。
googleカレンダーの設定
webブラウザからアクセスして、「一般公開して誰でも利用できるようにする」のチェックを入れる。
APIキーの取得
GCPにログインして、Google Calendar API を有効にして、APIキーを取得する。
ソース
ChatGPTにもらったサンプルを調整して最終的にはこんな感じになった。
weather.py
import requests
import json
from datetime import datetime, timedelta
# Google Calendar API のエンドポイント
CALENDAR_API_ENDPOINT = "https://www.googleapis.com/calendar/v3/calendars/{calendarId}/events"
# カレンダーID
calendar_id = あなたのカレンダーID(デフォルトだとgmailアドレス?)
# API キー
api_key = あなたのAPIキー
# カレンダーのイベント情報を取得する関数
def get_calendar_events(api_key, calendar_id, start_time, end_time):
# エンドポイントのURLを構築
endpoint_url = CALENDAR_API_ENDPOINT.format(calendarId=calendar_id)
# パラメータを設定
params = {
"key": api_key,
"timeMin": start_time,
"timeMax": end_time,
}
try:
# API リクエストを送信
response = requests.get(endpoint_url, params=params)
# レスポンスを JSON 形式で取得
events_data = response.json()
# イベント情報をリストにして返却
events_list = []
for event in events_data.get("items", []):
event_info = {
"Summary": event.get("summary", "No Summary"),
"Start Time": event.get("start", {}).get("dateTime", "No Start Time"),
"End Time": event.get("end", {}).get("dateTime", "No End Time"),
}
events_list.append(event_info)
return events_list
except requests.exceptions.RequestException as e:
print("Error making API request:", e)
# 今日登録されているカレンダー情報に、カメラOFFで始まる件名が登録されているかどうか調べる
def sns_camera_judge():
# 本日の日付を取得
today = datetime.now().strftime("%Y-%m-%dT%H:%M:%SZ")
# 本日の日付から1日後を計算
tomorrow = (datetime.now() + timedelta(days=1)).strftime("%Y-%m-%dT%H:%M:%SZ")
# カレンダーのイベント情報を取得
infos = get_calendar_events(api_key, calendar_id, today, tomorrow)
for info in infos:
print(info)
if info['Summary'].upper().startswith('カメラOFF'):
print('今日はダメな日だ!!')
return True
return False
if __name__ == "__main__":
sns_camera_judge()
おわりに
これにてgoogleカレンダーに「カメラOFF ~~」と件名を入れれば、その日は自動ONされないことになり今回の目的は達成