見出し画像

Pythonで「ふもとっぱら」キャンプ場へ行き放題Botをつくってみた

さいきん、とあるきっかけから 「バイク × キャンプ」に目覚めてしまい、いろいろギアを買い揃えては、キャンプ場へ足しげく通っている今日このごろ。

特に静岡県にある「ふもとっぱら」というキャンプ場がお気に入りなのですが、ここはキャンパーの聖地らしく(キャンプアニメ「ゆるキャン△」の舞台にもなっています)

画像4
「ゆるキャン△」のポスター、夜景の表現がすてき


ただ、聖地ゆえにWEB予約が激混みで、もはや年内週末は予約が取れない、、、というレベル。(キャンプブーム恐るべし…)

キャンセル空きが出た瞬間に予約を入れないと、またたく間に埋まってしまい予約が取れないという「課題」に対して、プログラム(Python)で自動巡回させることで「解決」できたよ、というお話です。

こんな感じでズバッとLINE通知してくれます、ありがたい…🙏 

画像1
LINE通知なので、空きの瞬間を見逃さない

どんなアプリなの?


つくったアプリケーションは以下。無料で作れるのがありがたい。。😀

▼つくったもの
・「ふもとっぱら」キャンプ予約ページ上に「空き」が出たら、LINE通知してくれるアプリ
・10分おきに予約サイトをクローリングしてくれる
・無料でつくれる…!(このくらいの処理であれば)


実際の予約ページはこんな感じ、なるほど週末は埋まっておる・・・

スクリーンショット 2021-09-17 12.38.34
ふもっとぱらキャンプ場の予約ページ(特に土日は激戦区)


使った技術は以下。
Seleniumでブラウザ操作 → BeautifulSoupで空き状況を取得 → LINE Notifyで通知 、というPythonスクリプトを Heroku で定期実行する、というシンプルな構成です。

▼使った技術など
・言語:Python
・Seleniumのwebdriver(ブラウザ画面を自動操作できる)
・BeautifulSoup(HTML要素を指定して、ほしい情報を取得できる)
・LINE Notify(空きが出たことをトリガーにLINE通知してくれるサービス)
・Heroku(空き状況の確認&通知するスクリプトを定期実行してくれるPaaS)
・【番外編】Chrome のディベロッパーツール(予約サイト内の取得したい箇所のCSSセレクタを確認しまくる)

全体像はこんな感じ

スクリーンショット 2021-09-16 13.34.58
アプリケーションの全体像


かかった時間は10時間ほど。
Herokuの設定は今回で理解できたので、次回以降はもう少し短縮できそう。

▼かかった時間
・解決方法や実装技術の検討:2時間
・予約ページのソースコードをみて、空き情報取得するためのコーディング:4時間
・LINE通知まわりの設定:1時間
・Herokuでの定期実行の設定:4時間 ※ けっこう詰まった…


実際のコード

実際にHerokuへデプロイしているコードはこちら。
冗長でキレイなコードではないですが、コメントなど頂けるとうれしいです。


つまずいたポイント 

ここからは、つまずいたポイントと助かった記事をご紹介します。
同じような実装をされる方の参考になれば幸いです😀

① SeleniumとBeautifulSoupの使い分けが分からなかった

スクレイピング初心者だったので、名前はよく聞く2ライブラリを実際どう使えばよいの??という感じでした。こちらの記事が、全体像が簡潔に書かれていて分かりやすかったです。

Selenium:Web ブラウザの操作を自動化するためのフレームワーク
BeautifulSoup:HTML/XMLから狙ったデータを抽出するためのライブラリ


② LINE Notify の設定

以下記事をみながらLINE Notify ページで実際にやっていけば、意外とかんたんに出来ました。LINE Notify自体がシンプルな作りになっているので、助かりました!


③ Heroku へのデプロイ&定期実行

ここが一番苦労しました…。とはいえ、メジャーなサービスなのでググればいろいろ出てきました。詰まったポイントと助けてもらった記事は以下。

▼ Heroku 詰まったポイント
・デプロイのやり方(GitHubとの連携&自動デプロイ)
・ローカルだと動くのに、Heroku上でChromeDriverを動かすとバグる
・スケジューラーの設定(Heroku Scheduler)
・環境変数の設定(LINE Token)
・ライブラリのバージョン設定(requirement.txtでセットする)
・ちゃんと動いているかの検証(Log確認)
・そもそも、Herokuというサービスについて(ex.どこまでが無料?)


そもそもHeroku とは?(↓)


外部ライブラリの使用(requirements.txtの作成)やheroku schedulerの使用方法など、詰まるポイントをエラーメッセージ付きで説明してくれています。(↓)


chromedriverの設定でバグったときにお世話になりました。Heroku側でBuildpackをインストールしておく必要があるようです。(↓)


さいごに

Pythonは普段データ分析まわりで活用しているのですが、こうやってモノづくりに使ってみると、自分の作ったものがちゃんと動いて役に立つ、という新しい感動があり、とても新鮮でした。

また、ソフトウェアサービスの奥深さを少しですが体験することができ、世の中の動いてるサービスすごい、、と少し違った目線を持つこともできました。

また、ちょこちょことつくってnoteへ載せていこうと思います。


さいごになりますが、

「バイク × キャンプ」はいいぞ〜〜

スクリーンショット 2021-09-17 11.53.57
ふもとっぱらでの早朝の様子、富士山がドーンと見えて気持ちいい


【番外編①】このnoteを参考にしていただけました!

このnoteを参考に、同じようなBotをつくられた方の記事(うれしい)
自分のnoteでは端折ってしまった技術的なつまりポイントも、丁寧に書いてくださっているので、実際にBotをつくる際はこちらも参考にするとスムーズに作れると思います😀


【番外編②】YouTubeでも予約困難なキャンプ場として紹介されていました

こちらのYouTubeでも、「ふもとっぱら」キャンプ場が予約困難なキャンプ場5選に入っていました(見ていると行きたくなる・・・)

ちなみに5選のラインナップは以下でした(納得)

①浩庵キャンプ場 
②ふもとっぱら
③西湖自由キャンプ場
④陣馬形山キャンプ場
⑤ほったらかしキャンプ場 ※日本一予約が取りにくいと紹介(たしかに…)


この記事が参加している募集

つくってみた

この記事が気に入ったらサポートをしてみませんか?