年々加熱する私立中学への進学熱。
知り合いから「私立中学の入試説明会に申し込もうとしたら、すぐに満員になって取れなかったんけど、何とか取る方法ない?」と訊かれ、「申し込みページを監視して、空いたらすぐに知らせてくれるシステム作ってみる?」と提案した。
速攻で作って運用してみたら、なんと2日間で「空き」(キャンセル)を自動検知して、無事、申し込みを完了することができた。
今回はその具体的な方法を公開しようと思う。
まとめ
概要は以下の通り。
- Slackでアカウントを作る
- Go言語でプログラムを作る
- crontabで2分に1度自動監視する
- Slackに通知が来たら、すぐに申し込む
相談が来た背景
実は、その知り合いは直接、志望する中学校に電話を掛けたそうだ。
「入試説明会に申し込もうとしたら満員だったのですが、何とかキャンセル待ちの枠とかに入れて頂けませんでしょうか?」と。
すると担当者は「申し込みサイトでは、キャンセルする人が出たら受付中になるので、その時に申し込んで頂くしかないですね」と答えたようだ。
だが、実際に申し込みページをスマホから毎時間、毎分、リロードして確認し続けるのは、相当に大変である。
実際、その知人は数日間それをやってみたが、結局、一度も「受付中」表示にはならなかったそうだ。
それで、私(弊社代表)に相談が来たという訳である。
Slackでアカウントを作る
監視結果をどう通知するか検討したところ、Slackというコミュニケーションツールが良さそうという結果になった。
無料でアカウントが作れるし、スマホにアプリを入れておけば、24時間どこでも通知を受け取ることができる。
今どき、メールでの通知は気が付きにくいし、SMS送信だと送信料がかかる場合もあるので使いにくい。
サインアップは以下から可能。
Go言語でプログラムを作る
開発言語を検討したところ、弊社で実績のあるGo言語を採用することにした。
便利なライブラリ(パッケージ)が多く公開されており、開発効率がとても高い。
最新版のダウンロードはこちらから可能。
作成したプログラムは、200行程度の小規模なもの。
今回、オープンソースとしてGitHub上に公開した(下記)ので、ダウンロードして利用して頂ければと思う。
なお、Slackにプログラムから投稿するためには、OAuthトークンと呼ばれるものを取得してプログラム中に設定することと、該当チャンネルへのアプリの追加操作が必要だ。
具体的な方法は、こちらのページが詳しいので、参考にしたら良いかと思われる。
crontabで2分に1度自動監視する
ビルドしたバイナリを、さくらのレンタルサーバにアップロードし、crontabの設定を行って、2分間隔で自動実行するようにした。
なお、さくらのレンタルサーバにおいては、最短の実行間隔は2分である。
もっと短くしたければ、ローカルPCで動かすか、他のサービスを利用する必要がある。
しかし、いろいろ試したところ、2分ですぐに空き枠が埋まることはないので、十分だと思われる。
Slack通知が来たら、すぐに申し込む
設定してから2日後、「×」(バツ印)が「受付中」になったとスマホに通知が来た!
早速ページを開いて申し込んだところ、無事に席を確保することができた!
キャンセル待ちの秘訣
なお、いろいろ観察した結果、空き枠が出るのは特に土日などの週末が多い。
また、説明会の1-2日前になると、キャンセルが入る確率が急に増えるようだ。
この知人が申し込もうとしていた説明会は、定員が500名のものだったが、2週間の間、自動監視を続けて「空き」を検出したのは10回程度だったので、全部で10-20人程度のキャンセルが出た(1回の空きで1-2人の欠員なので)ことになるが、これは全体の2-4%という割合であり、かなりシビアである。
もし、システムを組むのが大変であれば、このように受付期間の終了直前に申し込みページを頻繁に確認するのも手かもしれない。
なお、空きが出てから埋まってしまうまでの時間は、10分というシビアなこともあるが、30分間とか、1時間とかの間、埋まらないこともあるので、手動の場合でも諦めずにトライしたら良いのではないかと思う。
その他の参考事項
なお、この種のプログラムの運用は、完全自動というわけにはいかないことが多い。
たとえば、申込み先のサイトは、アクセスの負荷が高まると「2分待ちです」というようなページが出て、受付状況が表示されなくなることがある。
当然、このような場合にも通知が飛んできてしまう(実は1日に数回ある)ので、このようなノイズを避けて、本当のキャンセル待ちの瞬間を判別しなければいけなかった。
もちろん、プログラムを改良すればできなくはないが、それは今後の課題と考えている。
コメント