0
0

Googleカレンダー情報を取得する

Last updated at Posted at 2024-02-06

はじめに

前に書いた記事を2か月ほど運用してみて、問題が見えてきました。

問題点

私用や会社休みなどの在宅時に、自動でSNSにアップされて自身の姿が母親に見られてしまう・・!
覚えてたら9時直後にすぐOFFするけど、やっぱり人間は忘れる生き物。5回以上見られるという悲惨さ
暇つぶしに猫は見ても良いけど、私は見られたくないの。無意識な様子を見られるのって、言いようのない気持ち悪さ

自動ONに条件追加しよう

平日朝9時頃に自動ONしているけど、事前にONさせない仕組みを作ることをようやく決心。
スマホから操作したいので、googleカレンダー機能を使うのがよさそう。その備忘録な記事です。

googleカレンダーの設定

webブラウザからアクセスして、「一般公開して誰でも利用できるようにする」のチェックを入れる。

image.png

APIキーの取得

GCPにログインして、Google Calendar API を有効にして、APIキーを取得する。
image.png

ソース

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されないことになり今回の目的は達成

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0