先日行なった『まい水位計』の改良について、メモをアップしようと思って途中まで書いて忘れておりました。
既に記憶がかなり揮発してしまっていてやばいです。
この記事は、誰も興味がないと思いますが、120%自分のために書いています。
仕事と違って設計書も仕様書もないですから、コードの中のコメントだけが頼りなのですが、仕事と違って、読むのは自分だけだし、その場が解決したらもうそれでいいってなってコメントもあまり入っていません。
しかし、なにより自分しか読まないからという、その【自分】の記憶力が急激に劣化しているのです。悲しい。
バージョンアップ概要
観測所の登録方法をURLの貼り付けから検索方式に変更
フォントサイズ、色見、など細かい点いくつか
観測所の登録方法変更について
これは前から気になっていました。
前のバージョンは、水分水質データベースのリアルタイム水位のURLを、観測所毎にコピーして貼り付ける必要があったのですが、パソコンならともかく、スマホだと余りにも手間が掛かります。
いつか何とか出来たらと思っていました。
基本設計
実現するための方法としてイメージしたのは(出来るかどうかはともかくとして・・・)、登録画面を作ってフレームの中で水分水質データべースを操作して、目当てのページに辿り着いたら「まい水位計にURLをコピーする」みたいなボタンを押してもらう案。
JavaScript素人な自分にはハードルがかなり高そうだし、そもそも、「クロスドメイン制約」とかによって、そういう事が可能なのかもよくわかりません。
もう一つの案が今回採用したものです。
「まい水位計」の登録画面で観測所を検索して、候補から選択して登録するというものです。
これが出来れば登録のストレスは一気に解消します。
観測所一覧データの取得
観測所のリストを用意するには、「水分水質データベース」から、水位、雨量、ダムに関するリアルタイム観測所一覧データを、全てダウンロードする必要があります。
まずは「水系単位の観測所一括検索」のページで見ると、水系を選択して検索すると一覧が表示されます。選択できる水系は185。
手動で取得しても3時間もあればデータが取れそうですが、将来観測所が増えたり減ったりなど、取得し直すことも考えて自動化することにしました。
ここからは試行錯誤の記録です。
「水系単位の観測所一括検索」のhtmlソースを見ると、検索実行でサーバー上のプログラムを動かしているっぽい感じです。
どの水系を選んでも、検索結果ページのURLは同じです。
こうなると、動的にサイトを操作して取得するしかないだろう(たぶん)ということで、「 selenium (pythonのモジュール)」を使う事にしました。
PCにpythonをインストールした後、seleniumとchromedriverをインストールします。
「水系を選択したら検索実行を押してcsv出力」というのを水系の数だけ行います。
pythonは素人なので3日も掛かってデータを取得。
出来上がったデータをデータベースに入れて、気分良くなったところで気づきます。
「ダムがない」
そう、「水系単位の観測所一括検索」で取れるのは、水位、雨量、流量のみ。ダムは取れないのです。
よくよく見ればわかる事ですが、ボーっとしていました。チコちゃんに叱られるレベルです。
ここで振り出しに戻ります。
気落ちしつつも気を取り直して水分水質データベースを見てみると「観測所諸元からの検索」という検索方法があります。
いじってみると、ここは条件指定なしの検索実行一発で全データが取れるのですが、なんと1ページ10件の表示。
次へボタンを押さないといけないタイプです。
ただ、URLだけで指定が可能。URL内にページ番号が含まれていて、そこを指定すれば、取りたいページのデータが取れます。ページ番号をカウントアップしながらアクセスすれば全データ取得できそうです。
URLだけで指定が可能なら、seleniumよりrequestsを使う方がカンタンかなと、ツールを変更して再スタート。
pythonにも慣れてきたので1日で取れました。
それで取得したデータを少しいじっていたら、リアルタイム水位のページが見つからない現象が発生しました。
テレメータ水位計=リアルタイム情報あり。だと勝手に思っていたのですが、どうやら違う様なのです。
なんか加齢とともに勝手に思い込む率が上がっているんです。チコちゃんも呆れるレベル。悲しい。
水位計一覧に表示されている情報からは、リアルタイム情報の有無は判断できない事がわかりました。
こうなると、各観測所毎の「水文水質観測所情報」にアクセスしてそこに「リアルタイム●●」のボタンがあるかどうかをチェックする必要があります。
8,306件の観測所毎に、水文水質観測所情報のページにアクセスして、リアルタイムへのリンクがあるかどうかをチェックするようにしました。
「水文水質データベース」に負担を掛けてはいけないので、一回ごとにsleepを入れながら処理をさせるため、1時間以上掛かります。
これで漸く、リアルタイム観測所の一覧が取得できました。
水位計リストの検索方法(観測所リストをどこに持たせるか)
これは結果的に、想像していたよりもはるかに簡単でした。
はじめは、データをレンタルサーバー上のデータベースに配置して(実際にここまではやりました)、「まい水位計」から検索文字列を入力するとPHPかcgiでデータベースを検索し、候補の観測所のリストを表示して選択してもらうというのを考えていました。
ページ内に全てのリストを持たせることが出来れば、DBアクセスはなくなるし、開発コストはだいぶ減りますが、データは数千件になると思われましたから、ページを開くのにも時間が掛るだろうし、検索して候補を表示するのももっさりするだろうと思っていました。
ところが、まずは試しにページ内に全データを持たせてやってみると何の問題もなくサクサク動きます。
私のスマホは2円のGalaxy A21。もう何をするにもイライラするスペックなのですが、それでさえサクサク動くので割と上流階級の多いパドラー・カヌーイストの方たちが持っている高級スマホならなんの問題もない筈です。
面倒に思っていた部分があっさり解決しました。
今後の展望や懸念
元々は、「水分水質データベース」ではなく「川の防災情報」からデータを取得していました。ところが、2021年に「川の防災情報」がリニューアルされた際に、簡単にデータを抜き出せない様になったのです。不可能ではないのですが、アクセスするのに大変に時間がかかり現実的な選択肢ではありませんでした。
それで仕方なく、「川の防災情報」を諦めて、「水分水質データベース」から取得するように変更しました。
しかし、「川の防災情報」の方が観測所数が断然多いので、いつか、「川の防災情報」から取得できるようにできれはと考えています。
その一方で、将来的に「水分水質データベース」がリニューアルされて、「川の防災情報」同様、簡単にデータが取れなくなる可能性があります。
そうなった時は、おそらく当サイトの水位表示や「まい水位計」の機能は閉鎖することになると思います。
また、もう一つの懸念としては、そもそも、「まい水位計」は勝手に「水分水質データベース」からデータを取得しています。
データを使うこと自体は、「水分水質データベース」にも問題ないと書いてあるのですが、同時に、人がブラウザを操作する通常の操作方法以外でアクセスして欲しくないとも書いています。
今のところ、海部郡山川町のアクセス数は微々たるものですから、現実的に迷惑にはならないと思いますが、将来的に、やめてくれと直接言われる可能性もゼロではありません。
そうなった場合も、やはり、この機能は閉鎖することになると思います。
コメント