あっきぃ日誌

鉄道ブログのような技術系ブログのようななにか

rpilocatorの日本版っぽいやつをつくってみた

Raspberry Piの認定リセーラーの在庫を監視するrpilocatorというサイトがあります。

rpilocator.com

世界のリセーラーの在庫状況が見られますし、個人的にはPimoroniの在庫チェックに使えるため、便利なサイトです。個人運営ながら、Ebenのサプライチェーン近況報告記事で度々触れられており、お墨付きのようなツールです。

www.raspberrypi.com

ただ、rpilocatorは日本のリセーラーであるKSYさんとスイッチサイエンスさんは監視対象にはなっていません。スイッチサイエンスさんは一時期対象でしたが、メンテナンスできないと判断されたのかリストから外れています。

というわけで、日本のショップの入荷状況は通知を受け取るか、人力ウォッチくらいしかない状況でしたが、いつかやりたいことリスト消化ということで、自力で日本版rpilocatorてきなものを作ってみました。

shrimp.marokun.net

ちゃんと動けば、1日2回クロールして在庫状況をウォッチしてくれるはずです。その間隔で間に合わない入荷と完売はご愛嬌ですかね。

実装

Webスクレイピングにはpyppeteerという、PuppeteerのPython実装を使用しています。

pptr.dev

github.com

って書きながらURLを貼ってたら、pyppeteerがもうメンテされてなくてplaywright-pythonを使えって書かれているのに今気づいて泣いちゃった……。そのうち置き換えるかぁ。

Attention: This repo is unmaintained and has been outside of minor changes for a long time. Please consider playwright-python as an alternative.

スクリプトはFlaskで適当なREST APIサーバーになっていて、クロール用のURLをGETすると全体クロールや個別クロールができます。スクレイピングした結果は、DataTablesで読むためのJSONに出力され、これもGETで取得できます。

スクリプトはDockerコンテナとして動かして、JSONのURLだけWebサーバーからリバースプロキシでアクセスできるようにしています。

Web側はDataTablesでテーブルを作って、JSONを読み込ませています。本家rpilocatorではフィルターとかが色々と充実していますが、こちらは2社分しか見ないので、標準のフィルターでも特に問題ないでしょう。

まとめ

これを書きなぐりながら、cronで雑にセットした全体クロールがたぶん完走したのを確認できたのでまあ一応動いていそうです。もうちょっとエラーハンドリングとかクロールの失敗通知とかは充実させてみても良いかなあと思っています。その前にライブラリ置き換えを初っ端からやらないかん……ブログを書かなければ気づかずに済んだものを!

コードの公開も、そもそもやるつもりがあまりないですが、やるとしたらライブラリを入れ替えてからかしらん。

雑サービスなので安定性の保証はできませんし、両社からやめちくりーと言われれば終わりますし、こんなのでチャックしなくても買えるようになれば必要なくなるので、それまでのゆるいツールだと思って見てもらえれば〜。

コード出した

github.com