Pixelaに飲酒記録するiOSショートカットに、24時を過ぎた飲酒も「今日」とする日付またぎ対応を入れた
ダメな大人なのでよくお酒を飲みます。
そこで、ちょっと前からPixelaを使って飲酒記録を取っています。
こんな感じ。
https://pixe.la/v1/users/watahari/graphs/sake.html
見てわかる通り、Pixelaは、日付単位の任意の数値データを記録し、GitHubの芝生風グラフを描画してくれる最高にイケてるサービスです。
なんでも可視化するのが好きなので、最近気に入っています。
土曜日の飲酒に気をつけたほうがよさそう、とか気付くことが出来ます。
さて、Pixelaは最高にイケてるので、記録するのにもAPIを叩く必要があります。PixelaUIというスマホアプリもあります。が、そもそも深酒してくると、curlもスマホもおぼつきません。
震える指と回る視界でも確実に記録するためのUIが、私には必要です。
そこで、スマホのアイコン1タップで記録をしようと思います。
PixelaのAPIはとても叩きやすいので、iPhoneの場合、iOSショートカットを使って簡単にできます。
Pixela への活動記録をスマホとNFCタグで自動化する(iOS / Android)
https://blog.a-know.me/entry/2020/07/19/221201
さすがサービス作者様の記事だけあって、きれいにまとまっています。
上記例では/stopwatchを使っていますが、他にも/incrementや/decrementが存在しますので、この辺は上述例を参考に簡単にセットアップ可能です。
問題:25時は今日か?
が、ここで問題があります。
それは、飲酒をするのは夜だということです。
24時を超えた飲酒が翌日分となるのは、データとしては正しいですが、感覚的には誤っています。その日どのくらいお酒を飲んだのか?という記録を意図しているのに、24時を過ぎたら翌日扱いになってしまうのであれば、根っからのお酒大好きっ子として「おっ24時すぎたぞ、こっからは明日分だから飲んでもいいなw」となってしまいます。NGです。飲みすぎ注意です。
※真面目にいうとMyFitnessPalとかfitbitとかのヘルスケア系データサービス、夜勤やシフト勤務等のユーザに不親切ではないでしょうか?Nintendo Switch フィットボクシングとかは日付変更時刻設定があってLGTMでした。Pixelaは違いますが、ヘルスケア用途のサービスはこの観点を頑張ってほしいなと切に思います。私は遅寝遅起きなだけですが。。
そこで、このようなiOSショートカットを組む必要があります。
ちょちょっとシェルスクリプト書くならともかく、スマホでこちゃこちゃショートカットをUIプログラミングするには面倒そう・・・。
実際、勘所がわかるまで結構作るのが面倒だったので、以下、作ったショートカットロジックを置いておきます。その後にポイントだけ解説させてください。
出来上がったショートカットの流れ
(ポイント1) iOSショートカットで、Pixelaのレスポンスを取り扱う
Pixel(グラフ上の任意の日のデータポイント)のGET APIでは、Jsonが返却されてきます。
https://docs.pixe.la/entry/get-pixel
このパース面倒だな・・・と思いきや、iOSショートカットの場合、簡単に取り扱えるようです。iOSショートカット内ではjsonは勝手にパースされ「辞書」として利用可能であり、アクションとしては「辞書の値を取得」で取得可能です(「スクリプティング」の一種)。
なので、 URLをcurl→変数に格納→JSONパースして特定項目を取り出す の流れは、下記の流れでOKです。分かってしまえば簡単でした。
(ポイント2) データ未設定PixelをGETするとエラー応答だが、0を設定したPixelはquantity:0が応答される。
{ “message":"Specified pixel not found.” “isSuccess":false }
{ “quantity":"0" }
(ポイント3) 日付型変数をカスタムフォーマットyyyyMMddで出力することで、簡単にPixelaのAPIの形式にあう
当然といえば当然ですが、あまり序盤に現在時刻をintやString的な変数に変形するとややこしくなります。iOSショートカットの仕組み的に、変数をtoStringして変数に入れても、代入された変数はStringではないみたいです。DateTimeっぽい変数です。
まとめ
ほか感想など
- 2回APIを叩いて申し訳ないので、/v1/users/<username>/graphs/<graphID>/<yyyyMMdd>/incrementが欲しい(けどちょっとマイナーそう)
- 本当に酔っていることを考えると、NFCステッカーをトリガーにしたい。
しかし、iPhoneXSが文鎮化してしまい、しょうがなくiPhone7を使っているので出来なかった(余ってるNFCステッカーあるのに・・・)。iPhone12早く発売されないかな。 - もっと酔っていることを考えると、Amazon Dash Buttonを使いたい。
- https://github.com/Nekmo/amazon-dash
- https://docs.nekmo.org/amazon-dash/readme.html
- "Amazon-dash is still alive"が強い意志を感じてかっこいい
- Pixelaさん無料で申し訳ないので、投げ銭(buymeacoffeeとか)いれてほしい。
(有料機能いまのところ使わなさそうだけど、仕方がないので月1$のPatreonにはなった、数ヶ月は寄付しようと思っている)
コメント