🌤️

【iphoneショートカット】毎日天気予報をLINEに通知させるオートメーションを作り、QOLが上がった話

に公開

はじめに

  • 朝起きてすぐ天気予報を確認する...
  • 昼間外出するときに天気が気になる...
  • 洗濯物を干したいけどここ数時間の天気が気になる...など、

天気予報を決まった時間にチェックするというルーティーンは、多くの人が普段行っていることではないでしょうか?
そんな日常のルーティーンを自動化し、QOLを上げることができた実体験を記事にしてみました!

なぜこのテーマを選んだのか

近年、Switchbotやアレクサなど、スマホ1台で生活のQOLを上げることが容易になった今、さらに自身の生活の質を向上させたいと思っていました。

そんな中、毎日繰り返す作業を効率化できるiPhoneのショートカットアプリについて興味を持ちました。

詳細に調査していたところ、iPhoneからSlackやDiscordに天気を通知させる記事を見つけました。自分は天気によって気分が左右されるタイプなため、これを参考に自分なりに改変してみたら実用的なのではないかと考えました!🧑‍🎓

iPhoneのショートカットの可能性を紹介できたらいいなと思っています!
(Androidユーザーの方はゴメンナサイ🙏)

全体の設計図

まずは大枠の構成です!
全体の設計図

ショートカット側の設定

  • 最終目標として、以下のテキストを送信したいと思っています!
    送りたいテキスト
    最近見たアニメ🐙の影響で文章が染められているがよしとして欲しい..

ということで以下のショートカットのスクリプトで情報を取得していきます!🌤️💻

大枠の設定

項目ごとに番号を振って解説していきます💡
Script1

①現在地の天気予報を取得できる。

  • 配列のようなまとまりで現在時刻を含めた24時間分の情報が一気に返ってくる
    • (この住所をあえて職場等に固定したりするという使い方もあり)
取得できた24時間分の天気 (取得できてる証明)
24時間分の天気 ちゃんと取得できてるよっていう証明

②今の時刻の天気情報を取り出す

  • 項目の一番最初にくる項目は必ず現在時刻なので1つ目を取り出すようにしています。

③降水確率を取り出す

  • ②で取得した現在時刻の情報の中から降水確率を取り出しています。

④1時間後の天気情報を取り出す

  • 次に配列の2番目の要素から1時間後の天気情報を取得
  • 降水確率は小数点形式(0.06等)で返ってくるため、パーセント表示に変換しています。

Tips

quicklook

メッセージの出しわけ

(※ここは自分基準の条件に設定してしまっています、そもそも細かい天気も表示させるので出しわけもしなくていいかもしれない・・・・:;(∩´﹏`∩);:)

雨のテキスト

ここまでを実際に動かしてみると・・・・

結果テキスト
晴れの予報なので上記のテキストが生成されます↑↑

残りはこれをLINEに送る機構を作ります!🤖

公式LINEの準備

1. LINE公式アカウントを作成

以下を参考にLINE公式アカウントを作り、チャンネルアクセストークンを発行して控えておきます
https://developers.line.biz/ja/docs/messaging-api/getting-started/
LINEkousiki

2. 送りたい友だちorグループIDを取得

ほぼAIにコード書かせたのは秘密ですが下記のようなことをしました。

❶ローカルにWebhookを受け取るサーバーを立て、それをngrokで外部公開

from flask import Flask, request

app = Flask(__name__)

@app.route("/webhook", methods=["POST"])
def webhook():
    data = request.json
    print("Webhook event received:")
    print(data)  # ここにuserIdやgroupIdが含まれています
    return "OK", 200

if __name__ == "__main__":
    app.run(port=3000)

https://zenn.dev/manase/articles/03df0e18c93755

❷LINE DevelopersでWebhook URLを入力する

上記のWebhook URLをLINE Developersにて設定する
https://developers.line.biz/ja/docs/messaging-api/building-bot/#setting-webhook-url

❸先ほど作成したLINE公式アカウントを追加し、通知をさせたい友だちのトーク(グループ)でメッセージを送信する

こうすることでメッセージを送付した友だちとそのグループのUserIdとGroupIdを特定することができる

これで必要な情報は取得できました!

3. ショートカットでLINEに送信する準備

以下のJsonをiphoneで準備し、LINE Push APIに対してPOSTする

POST https://api.line.me/v2/bot/message/push
Authorization: Bearer {チャンネルアクセストークン}
Content-Type: application/json

{
  "to": "ユーザーID or グループID",
  "messages":[
    {
      "type":"text",
      "text":"送りたいメッセージ"
    }
  ]
}

ここから再度iphone側の操作です

アクションの「URLの内容を取得」を利用する

以下のようにヘッダーと送り先であるtoを設定します
LINEJSON

messagesの配列部分はショートカットでは辞書というアクションで表現できる
つまり、

"messages":[
    {
     $辞書
    }
  ]
$辞書 ={
      "type":"text",
      "text":"送りたいメッセージ"
    }

のような表現になる

typeの値にはtext、textの値には[if文の結果]のテキストが入ってくるようになる↓

messages
実際の設定

4. 実際に動かしてみる

実際に動かすとこのように通知が飛びました🥳
LINEmessage
見やすいテキストにするにはセンスも大事だなぁとおもいます・・

ちなみにLINEのMessagingAPIの無料枠は

  • 1ヶ月200通
  • グループ人数が二人の場合に1通送ると2通分消費する
    ので注意が必要です

おまけ

最後にこの記事を書きながら並行してやっていたことがあります
実は4.実際に動かしてみるセクションで最後の行に低気圧の警戒度情報も表示していました
これは頭痛ーるという天気痛などを予測、管理するアプリのAPIを叩いて実装しています
teikiatsu
個人的にはこちらの方がとても実装して良かったな!と思ったりもしています(低気圧に弱い🌀)

最後に

このオートメーションを作ってから、かなり重宝しています!やって良かった!
コードを書くよりも手軽に実装できる一方で、参考資料が少なく、プログラミングとは異なる難しさがありました。
(夜に作業を始めて気づいたら朝になっていました...)

この経験をきっかけに、ショートカットアプリを日常的に活用するようになりました🧑‍💻
今後、ショートカットの利用者が増えて、コミュニティが活性化することを願っています!👩‍🦲

参考

https://zenn.dev/manase/articles/03df0e18c93755
https://zenn.dev/lexiko/articles/1e2e02c687d6544a2e57
https://zenn.dev/aromarious/articles/post-weather-info-to-discord

Discussion