何かやってみるブログ

興味をもったこと、趣味のこと、技術について色々書きます。

東京都の猟銃等講習会(初心者)の仮予約を勝ち取る技術

課題

猟銃等講習会(初心者)とは銃砲等所持許可を得るためにクリアしないといけない一番最初のステップになっていて一般人が銃で狩猟したいとなると避けては通れない。

ome.hunting-club.jp

そして東京都の猟銃等講習会(初心者)を予約するには警視庁の予約サイトから申し込み仮予約を勝ち取りその後に本予約をするということをする必要がある。この仮予約というのが厄介で毎回募集が開始された直後には、少なくとも募集開始1時間30分後には埋まってしまうみたいな状況でなかなか申し込みができない。

私は1回受講して考査に落ちてしまい、再度チャレンジするためにまた仮予約をとる必要があったのだが新しい募集が始まっていると気づいたときには枠は埋まってしまって困っていた。 前回の仮予約は運良くキャンセルがでてそこに潜り込めたという経緯だったので、募集直後も継続して狙っていくとともにキャンセル枠もなにかしらの手段で監視して狙っていこうと決めた。

キャンセル枠を検知するための対策

さくらのVPSでセルフホストにしているn8nというワークフローツールを有効活用できてなかったこともあり、n8nを使ってキャンセル枠がでたら個人のSlackに通知するというワークフローを組んだ。

n8n.io

ワークフローは以下の図のような感じ。

img

ステップを雑に説明すると以下のようになっている。

  1. scheduleTriggerで5分に1回起動*1
  2. 予約サイトにGETリクエストを飛ばす
  3. レスポンスをAI Agentに投げる
  4. AI AgentがOpen AI ChatGPT APIを叩いて予約可能か予約不可か返す
  5. もし予約可能であればSlackに通知

プロンプトは以下のように雑になげてしまった。*2

{{ $json.data }}の/html/body/form/main/div/div[2]/div[4]/div[2]/div[2]/tableを見て予約可能になっている日時があれば"予約可能"と日時が無ければ"予約不可"とだけ返してください。

結果

運良く2時間の監視で枠が空いているのを検知し仮予約をすることができた。

img

img

次は考査に落ちないようにしっかり勉強していきたい。

*1:予約サイトへの負荷を考慮し、かつキャンセル枠を見逃さないバランスを考えて5分間隔に設定

*2:Auto rechargeは無効だしCredit balanceもそんなになかったのでとりあえず動かして使い切ってしまったらプロンプトを工夫してトークンを減らすか...と考えていた。