2020年11月11日水曜日

小児科予約を自動化しました(python + selenium + GoogleCloudPlatform + LINEmessagingAPI)

event_note11月 11, 2020 editBy itthiatthi forumNo comments

 


前回のブログ更新から、1か月以上たってしまいました。


 


別にブログに飽きたわけでも、家事育児を何もしていなかったわけでもありません。

 

小児科予約を自動すべく夜な夜な頑張っていて、ブログを書く余裕がなかったからです。


私はプログラマーではないので、詳細はよくわからないし、いちいち調べながらなのでとても時間がかかりました。

 


背景


うちのかかりつけの小児科は、予約をWebからすることができます。ブラウザでぽちぽちと、診察券番号とかを入力したり、ボタンをクリックしたりして予約できます。


予約可能な時間帯は決まっているので、予約開始時間ピッタリに高速入力、高速クリックすることが早い順番を予約するには重要です。


 


目標


LINEで作成したグループに予約したいよ~と投稿すると、なんかいい感じに予約開始時間になったらプログラムが起動して、予約してくれて、予約結果も教えてくれる。


LINEグループに投稿するだけなので、私でも妻でも簡単に予約できる。


そんなシステムになったらいいな。


 


概要


今回、GoogleCloudPlatform上で使用したAPIは以下の3つです。



  • Cloud Functions

  • Cloud Pub/Sub

  • Cloud Run


LINEで作成したグループに、予約したいよ~と投稿すると、LINEmessagingAPIでCloud Functionsをwebhookで立ち上がります。外部との認証はここぐらい。


Cloud FunctionsはCloud Pub/Subにメッセージを投稿します。


Cloud Pub/Subはメッセージが投稿されると、Cloud Runを起動します。


Cloud Runは予約時間になると、小児科予約のサイトに行って、自動で予約します。


自動予約自体は、seleniumとhead-less chromeで行っています。


そのあとは、予約結果をLINEグループに投稿していく感じです。


流れは以下の図参照。全部、pythonで書いてます。



f:id:itthiatthi:20200208224203p:plain


予約システム概要


 


詳細


私はプログラマーじゃないので、詳細は勘弁してください。


ソースコードなんかも公開しません。git(?)のアカウントとか持ってないし。


Cloud FunctionsやCloud Pub/Subがなくても、Cloud Runだけで実現できそうですが


なんとなく組み合わせてみました。将来、二人目の予約や、ほかの病院の予約なんかをさせるときのVerUpが何となくやりやすそうかな、と思って。(疎結合ってやつ?)


 


参考にしたページ(の一部)


Cloud Functions (Python3)入門用に LINE BOTを作ってみる - Qiita


GitHub - line/line-bot-sdk-python: LINE Messaging API SDK for Python


メッセージのパブリッシュ  |  Cloud Pub/Sub  |  Google Cloud


ABEJA Platform + Cloud Functions + LINE Botで機械学習アプリをつくる - Qiita


botを作りたいけどサーバ管理したくない...そうだ!Cloud Runでサーバレスにしようぜ! - Qiita


Cloud Pub/Subのpushリクエストを認証したい - Qiita


【超便利】PythonとSeleniumでブラウザを自動操作する方法まとめ | たぬハック


Using Headless Chrome with Cloud Run - DEV Community 👩‍💻👨‍💻


 


実際


予約はできているんですが、予約結果を返すところがうまくいっていません。


seleniumの待機処理あたりがうまくいってないのかな?


よくわかりませんが、引き続き修正していきたいです。


 


※追記 予約結果が帰ってこない原因は、予約サイト側のHTMLが間違っているからでした。


とりあえず予約できてるからいっか、と諦め中です。


 


感想


日曜大工ならぬ、日曜プログラマー的に、DIYするのも楽しいですね。


こういった形で、育児に貢献することも父親っぽくていいかも!?


ただ、予約の自動化って、倫理的によろしいことなのかどうか、少し気になっています。


背に腹はかえられぬのだけれども。



0 comments:

コメントを投稿