富士市(非公式な)ごみ分別カレンダーアプリのfuji.5374.jpですが、2020年の更新をやりました。
本来だと4月ごろ目標でしたが、今年はやっぱりいろいろあって7月にやりました。実はもうやらないと自分の部屋のゴミが片づけられなくなってまして、結構自分で用意したサービスに依存してます。
お待たせしてるかはアレですが、5374の富士市版の2020年度更新しました🙇
— Hiroshi Sano (@hrs_sano645) June 26, 2020
2020年4月から3か月になろうとしている中でようやく対応しました。今回はデータの更新とお問合せ用のフォームを用意しています。
自分としては、部屋に積まれた資源ごみをようやく出せます😅
https://t.co/2Y5GsPsAkk
富士市の5374更新をすっぽかした結果、部屋に大量の資源ごみが積まれ始めてる。
— Hiroshi Sano (@hrs_sano645) June 14, 2020
これはちゃんと更新しないと。。
当初は、もう手入力が嫌だったのでOCRを使って半自動を目論みましたが、COVID19方面でお手伝いしていたプロジェクトが忙しくなってしまったので、手動で力押ししました。考えずにやる時は単純な方法がやっぱり良いです。
あと今年はお問合せフォームを作りました。何かあればこちらからどうぞ~
更新自体はそれで終わりになりましたが、それだと学びもなかったので、もう少し突っ込んでicalファイルの生成をするPythonスクリプトも書きました。
富士市(非公式)ごみ分別カレンダーの5374に試験的にicalファイルを追加しました🎉
— Hiroshi Sano (@hrs_sano645) July 9, 2020
サイト内の「地区とパターン名一覧表」にリンクがあるので、そのURLをGoogleカレンダーなどで追加できます。
感想いただけると嬉しいです🙇https://t.co/2Y5GsPsAkk pic.twitter.com/vgiQDJ9pck
icalファイルは試験的な対応で、パターン名の意味がわかるエリアにリンクを貼ってあります。DLしてカレンダーアプリに読み込ませてもよし、GoogleカレンダーなどにicalファイルのURLを指定することで、最新のカレンダー情報へアクセスできます。
ちょうどPythonのコードを書く時間を増やしたくて、練習がてら自分も地域に対応したパターンのicalファイルをGoogleカレンダーに登録していて、とても便利に扱ってます。もう今年一番ためになるものを作った気がします。おかげで先週の資源ごみはちゃんと出せました。
ということで、富士市の5374はical対応にしてとても便利に使えるようになります。富士市在住の方々で、ごみ忘れてしまうなーとお困りの方は是非ともお試しください!
以降は技術的な話になります。(といってもメモレベル
5374とical
実は5374の情報をもとにicalファイルの生成するCal5374というサービスはあるのですが、車輪の再開発だったり、プロジェクトの中に入れておいた方がよいとも思ってつくりました。
ただ富士市版では生成できなかったので、いつかは自前で対応しようと思っていました。
Pythonとicalenderでical対応
icalファイルの生成はPythonスクリプトでやっています。もう作ってしまったので放置ですが、GitHub Actionsのワークフローを書いておけばCSVファイルの更新と同時にicalファイルの生成もできるようになるはずで、暇になったらワークフローも設定しておきます。
fuji-5374.github.io/convert_ical.py at master · fuji-5374/fuji-5374.github.io
5374.jpのゴミカテゴリに記載する日付のフォーマットにすべて対応しているわけではないので、どの5374でもすぐに使えるわけではないのですが、もし利用されたい方がいたらissueなど立てていただければ、可能な限り頑張ります。
まずicalファイルの生成するライブラリですが、これはライブラリの使い方より、icalファイルのフォーマットの理解に悩みました。マークアップ言語と言われていますが、カレンダーアプリの機能とフォーマットの対応がわかっていなかったので、RFCや日本語訳を見ながらやってました。
最終的にはGoogleカレンダーからicalファイルの生成をしたり、日本語で解説されているブログ記事に助けられました。
ライブラリ自体はオブジェクトの操作がしやすいと思います。昔からあるライブラリなので安定もしてると思います。
- ライブラリ: Internet Calendaring and Scheduling (iCalendar) for Python — icalendar 4.0.5.dev0 documentation
- RFC日本語訳: RFC 5545 - Internet Calendaring and Scheduling Core Object Specification (iCalendar) 日本語訳
- 日本語での解説記事: RRULEに関するメモ書き - 前人未踏の領域へ WEB・インフラ・プログラミング全般編
型アノテーションとかテストツールとか
型アノテーション、関数へのアノテーションや、typingライブラリをちゃんと使ったことがなかったので今回使いました。型を考えるのは久々だったりして明文化するときの手段に悩んでいたと思います。
typing --- 型ヒントのサポート — Python 3.8.4 ドキュメント
ジェネリクス型は使わなかったのですが、その辺全然分からなくなっていたのでなるほどーと思いながら書いてました。
あとdataclassも考えましたが、使うほどのものを書かないだろと踏んでいたので使わず。
@iwatobipenさんにpydanticというバリデーションライブラリも教えてもらいましたが、それもそこまではなあと思ってしまって諦めました。でも使った方が身になったなとちょっと後悔。
https://t.co/gjHbVmQXcf これ便利でしたー
— pen (@iwatobipen) July 7, 2020
ドキュメント見た感じだとAPIとかデータモデリングに使うなーと思ってたら、FastAPIで利用されているそうです。興味しかない👀