BLOG

ブログ

【ラズパイ】デジタルサイネージに自分のスケジュールを出してみた

こちらはゆるWeb勉強会@札幌 2022年アドベントカレンダー」の20日目の記事です。

こんにちは、タロウです。
先日作成したデジタルサイネージにカレンダーアプリのTimeTreeで管理している予定を表示してみました!
過去の様子はこちらからどうぞ!

(TimeTreeヘビーユーザーなので、使えなくなると予定していたもの全部すっぽかしてしまいそうです🙄)

いきなり完成

時計、天気予報は前回実装しましたが、
取得したスケジュールを時計下に出してみました。

予定はスマホアプリから入れています。

やりたいこと

大層な図にしようと思いましたが、やってることこれだけでした。

週刊の天気予報は天気予報API、今日の予定はTimeTree APIから取得します。

TimeTree APIで予定を取得した

公式のドキュメントがとてもわかりやすいです。
やっぱり左に目次、右に内容が1番見やすいです。

アプリ登録する

今回は個人開発になるのでPersonal access tokenで登録しました。

すでに利用している方はログイン、新規で試す方はアカウント登録をしてアプリ登録画面へ進みます。

Personal Access Tokensからトークンの作成を行います。

予定を取得するためにカレンダーIDが必要になるので、カレンダーと予定の読み取りを有効にします。

APIを叩いてみる

取得したトークンをheaderへ設定して叩くとカレンダーリストを取得できました。

予定を取得するのにカレンダーIDが必要になるので、
まずは自分が見ることのできるカレンダーリストを取得します。

カレンダーリストのレスポンスにカレンダーIDが入っているので、
予定リスト取得APIにカレンダーIDを指定して予定リストを取得します。

パラメータのdaysを変えることで当日だけ、3日分など必要な分だけ予定を取得できそうです。
ここのドキュメントはこちら

デジタルサイネージで表示する

定期的に外部データを取得する仕組みは入れていないので、
サイネージ起動時にAPIを叩いて予定リストを取得します。

# TimeTreeのトークンを設定
headers = {'Authorization': 'Bearer [画面から発行したトークンを設定]',
            'accept':'application/vnd.timetree.v1+json'}
# 実行した日の予定を取得
calendars_response = requests.get("https://timetreeapis.com/calendars/[カレンダーID]/upcoming_events?days=1",headers=headers)
calendar_data = calendars_response.json()

起動時にデータを取得しておき、
描画時は取得したデータを加工して表示します。

def screen_calendar():
    ### 予定表示 ###
    num = 0
    for data in calendar_data["data"]:
        # 予定詳細情報を取得
        attributes = data["attributes"]

        # タイトルを設定
        title = text_font.render(attributes["title"],True, (255,255,255))
        screen.blit(title, (150,400+num))

        # 開始時間を設定
        if attributes["all_day"] == True:
            time = text_font.render("終日",True, (255,255,255))
            screen.blit(time, (60,400+num))
        else:
            # 日付を取得して時間部分だけスライスする
            time = text_font.render(attributes["start_at"][11:16],True, (255,255,255))
            screen.blit(time, (60,400+num))
        
        # 表示位置をずらすためにカウントアップ
        num += 40

取得した予定一覧から予定詳細を取得して、開始時間をタイトルを表示しています。
最後に表示位置をずらすためheightを追加します。

表示のイメージ

ひとまず出してみるで実装したのでもっとシンプルに書けそうです。
また、Pythonのリポジトリパターン、Pygameへの適用あたりをより深く知りたくなりました!

さいごに

もう何年も使っているカレンダーアプリでしたが、
ほぼ毎日予定をチェックするので目に入りやすいデジタルサイネージに出ているととても便利です。

TimeTreeからはSDKも提供されているので、
Webアプリだとなおさら使い勝手が良さそうです!

次はこの画面に、リアルタイムなカメラ映像を出すことを目標に進めてみたいと思います!

RELATED ARTICLE

  • この記事を書いた人
  • 最新の記事

Ohno Shintaro

ディレクターも、サーバ構築も、ゴリゴリ開発もやります。 オールマイティ担当。 スパイスも甘いものも大好き。