前回の記事では、Twitterで「新しくツイートがあったとき」のトリガーを利用して、電車の遅延情報を効率よく取得する方法を紹介しました。
早速今朝(1/16)遅延が発生して実動作の確認がとれたのですが・・・

おわかりでしょうか。このラグ。
@hrfmjp おおたさんに教えていただいたのですが、Twitterトリガーはなんと1時間に1回のポーリングだそうです。(Docsはこちら)

これは使えませんね。駅についたらもう駅がパンパンになっているなんてことになりかねません。実際私がそうでした。
定期実行で改良できる?
チェックしたいのは朝の通勤、駅に行く前くらいの時間に限られるので、そこに限定して、高頻度でポーリングできないかなと思っていたところ、 りなたむさん@rnakamuramartiny にスケジュールなら、特定の時間でだけFlowを定時実行できる旨教えてもらいました!ありがとう!!

今回は定期取得でさらに効率よく的確に遅延情報を取得する方法を紹介します。
定期取得で遅延情報をとるには?
考えかたは次のとおりです。
- 朝の時間(7,8時ころ)に10分間隔でFlowを定期起動
- 鉄道会社の運行情報ツイートの最新を1件取得
- そのツイートが今日のものかを判定(昨晩の情報を回避するため)
- 内容に「通常/平常」という文言がないか判定
- モバイルのプッシュ通知
- SharePointリストを参照して、今日1回目の通知かを確認
- 1回目ならTeamsに遅刻連絡&SharePointリストにアイテム登録 (これで2回目以降のポーリングは実質無視される)
これをAutomateで実現したものがこちらです。
基本的には数式も書かないのですが、ツイートの取得や、SharePointリストの取得が、どちらも配列で返ってくるので、少し補足します。

1. Convert time zone
ここではツイート取得した最初の1件のつぶやいた時間を日本時間に変換しています。
body('Get_user_timeline')?[0]?['CreatedAtIso']
Expressionにこれを入れてあげましょう。配列の0番目のCreatedAtIsoです。
2. Convert time zone 2
これは比較用に「いま」の時刻を取得しています。
utcNow()
UTCで今の時刻をとって、日本時間に変換しています。
3. Condition
鉄道会社のツイートの最新1件をとりますが、それが配列なので、0番目をとって、その内容を判定します。
body('Get_user_timeline')?[0]?['TweetText']
もう一つの条件は、[Convert time zone] is equal [Convert time zone 2]です。
4. Send me a mobile notification
通知のテキストは何でもいいのですが、ツイートの本文を送るようにしています。
3.と同様に body('Get_user_timeline')?[0]?['TweetText'] これをセットしています。
5. Condition 2
その前段処理でSharePointからTitle = 今日の日付(yyyy/MM/dd)に一致するアイテムを取得していますが、この配列の長さが0 (つまりアイテムなし) かどうかを判定します。
length(body('Get_items')?['value'])
以上でちょっとした数式(アイテム取得)は終了です。
結果
テストのために時間を変えていますが、見事定期的にツイートを取得できました!
このような感じで、少しだけ数式をかけば、自分の思ったような処理を実現できますので、ぜひ試してみてください!
※自動だから「あー、遅延で遅れるの報告しづらいなー」とかないですよね!

