HUBのハッピーアワーに200円でカクテルを飲むやつを支える技術(TUT Advent Calendar 2018 10日目)

これはTUT Advent Calendar 2018の10日目の記事です。 adventar.org

こんにちは、あしゅりーです。

今年ついにあのTUTアドベントカレンダーとTUTアドベントカレンダーが合体してTUTアドベントカレンダーが開催されることになりました!おめでとうございます!
その記念すべきAdCalに参加できることを嬉しく思います。

自己紹介

今回は2つのTUTが合体ということなので軽く自己紹介しておきます。 ボクは田舎の方のTUTのOBです。 東京の方のTUTの皆さんはさぞかし大都会で快適なキャンパスライフを送られているのでしょう。

専攻は無線通信ネットワークで、アドホックネットワークにおけるMACプロトコルの研究をしていました。IEEE802.11にスループットで勝てる手法を提案していましたが「ダメだった」と書くだけに50ページ使った論文を大学院に寄稿して修了しました。

好きな美少女キャラクターの名字と同じ地名に引っ越した

近況です。好きなアダルトゲームに登場するキャラクターの名字と同じ名前が付く地名に引っ越しました。

転職に伴い、名古屋から脱出を考えていた際、ナツユメナギサという猥褻なゲームに登場する美浜羊ちゃんという女性が好きなので、それと同じ名前が付く千葉県千葉市美浜区に引っ越しました。街選びのポイントは名前のみです。

千葉市美浜区は非常に住みよい街で、幕張メッセなどがあるところです。 街もきれいで治安もよく、富裕層も多く住んでいるためか石油王っぽい人とそれなりにすれ違います。

SlackでHUBのハッピーアワーとか取得するやつ

本題です。
皆さんSlack使ってますよね。
やっぱHUBのハッピーアワー返してくれるbot必要じゃないですかぁ(ここでは必要とします)(HUBっていう名前の酒出してくれる屋さんです)

今まで名古屋にいた時は伏見HUBが本拠地でした(2回しか行ったことない)が、前述の通り千葉に引っ越したので最寄りHUBのハッピーアワーがわからない!こまった!となり生活が崩壊しました。

ハッピーアワーの時間帯は酒が天文学的なレベルで安くなります。

できた

f:id:asyley13:20181208205809p:plain

特に技術的な共有ポイントは無い。
SlackBOTはPythonのslackbotライブラリを拝借してきており、
PythonのslackbotライブラリでSlackボットを作る - Qiita
あたりを見ながらシュッとやればとりあえず動くやつがシュッとできる。

あとは適当にコマンド形式で拾えるようにして、それに対する応答の内容を作っていく。

\info 幕張

とか

\hh あきば

とかしてやればその店の営業時間やハッピーアワーが返ってくる。
中でやってるのは単純で、例えば「幕張」と受け取ったらhttps://www.pub-hub.com/index.php/shop内の店舗からそれっぽい店名をシュッと探し出して各店舗ページから営業時間とかをスクレイピングして持ってくる。

「あきば」なんてガバガバな名前だと当然そんな店名は無いので情報取得できないが、ガバガバなオタクのために\learn機能などもある。

f:id:asyley13:20181208213127p:plain

これでHUBボット君に直接店番コードを調教でき、次回からはその名前でも店舗情報を引っ張ってこれるので、ボクのかんがえた最強のアレができた。

雨が降ると大変なことになる

HUBは雨が降るとハッピーアワーが1時間伸びる。ふざけるな

でもありがとう。
(この情報がこのエントリの一番有益な情報となる見込みである)
秋葉原HUBがそうだったが他は知らん。

ので、今現在雨が降ってるかHUBbotが調べられるようにしよう。

f:id:asyley13:20181208215313p:plain

今回はOpenWeatherMapが提供する気象APIを使った。
リクエストされた店舗が所在するエリア(東京?千葉?名古屋?その他田舎?等)を調べ、そのエリアの現在の天候ステータスをAPIから取得する。
とりあえず雨系のステータスなら警告を出すようにした。

herokuにブチ上げ

自分のマシンで動かしたくないのでherokuにデプロイしておわり。

heroku曰く、

If an app has a free web dyno, and that dyno receives no web traffic in a 30-minute period, it will sleep.

とのことであるが、いわゆる会話botのような運用であれば特に30分トラヒックが無かったからと言って応答が無かったり応答までにめちゃくちゃ時間がかかるということも無い。(オレオレ環境)

ただ、前述した\learn機能はユーザに教えられたやつをcsvファイルとして保持しており、ローカル環境であればそれで良かったが、heroku上にそのcsvもブチ上げるどうやら定期的にデプロイ時の状態にロールバックされるようである。
ので、\learnでガバガバ店名情報を教えてcsvを書き換えても時間が経てばcsvが初期状態に戻されるので別の方法が必要そうだ。(BAD END)

飽きた

飽きたのでここで終わりにします。良いお年を。

HUB a happy new year!(これが言いたかった)

蛇足

ドイツのトリというインターネットミームの世話をしています。
ドイツのトリ Advent Calendar 2018

adventar.org