背景
サイゼリヤ1000円ガチャが昨日(2019/05/09)から話題になっています。
サイゼリヤ1000円ガチャをつくってみた(Heroku + Flask + LINEbot) - Qiita
このガチャ結果をfish shell起動時のウェルカムメッセージに設定することで、起動する度にガチャを引けるようにしてみます。
fish起動時のウェルカムメッセージを変更するには?
fish起動時には、デフォルトだと Welcome to fish, the friendly interactive shell
というメッセージが表示されます。これは、 config.fish
の中で fish_greeting
という値を設定、または関数を作成することで変更できます。
Q. How do I change the greeting message?
A. Change the value of the variable fish_greeting or create a fish_greeting function.
fish: Frequently asked questions
これを参考に、以下のように設定を行います。
function fish_greeting
timeout --preserve-status --signal=KILL 1 curl --silent 'https://saizeriya-1000yen.herokuapp.com/get' | pup 'div.box > h2 text{}' | cowsay -n -f (cowsay -l | tail -n +2 | tr ' ' '\n' | sort -R | head -1)
end
これで、以下のようにfishを起動する度にサイゼリヤ1000円ガチャが表示されます。
_________________________________________________
/ ティラミス(アイスケーキ) \
| セットドリンクバー |
| 冷たいパンプキンスープ(季節限定) |
| チョコレートケーキ |
| 冷たいパンプキンスープ(季節限定) |
\ 計 986円 507kcal 塩分 2.0g /
-------------------------------------------------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
デザートが多く嬉しいですが、メインが無いですね。もう一度やってみましょう。
____________________________________
/ リブステーキ \
\ 計 999円 621kcal 塩分 1.5g /
------------------------------------
\ . . .
\ . . . ` ,
\ .; . : .' : : : .
\ i..`: i` i.i.,i i .
\ `,--.|i |i|ii|ii|i:
UooU\.'@@@@@@`.||'
\__/(@@@@@@@@@@)'
(@@@@@@@@)
`YY~~~~YY'
|| ||
牛が燃えていますね。これがそのままステーキになりそうです。
____________________________________
/ プロシュート(Wサイズ) \
| セットドリンクバー |
\ 計 988円 324kcal 塩分 3.6g /
------------------------------------
\ ^__^
\ (oo)\_______ ________
(__)\ )\/\ |Super |
||----W | |Milker|
|| UDDDDDDDDD|______|
搾乳されています。ドリンクバー用でしょうか。ところで牛乳が飲めるドリンクバーってなぜ無いんでしょうか。
さて、このようにウェルカムメッセージをランダムなものにすることで、シェルを起動する度に楽しくなることができます。よかったですね。
追記2019-05-10T20:20:22+09:00
bashやzshでは以下のようなワンライナーを実行することで同様の表示ができます。シェルを起動する際に表示したい場合、 .bashrc
や .zshrc
に記載してください。
timeout --preserve-status --signal=KILL 1 curl --silent 'https://saizeriya-1000yen.herokuapp.com/get' | pup 'div.box > h2 text{}' | cowsay -n -f "$(cowsay -l | tail -n +2 | tr ' ' '\n' | sort -R | head -1)"
蛇足:使っている各コマンドの説明
timeout
curl
のレスポンスが遅く、シェルが起動出来ないと困るためタイムアウトを設定しています。上記では、1秒以上時間がかかった場合にSIGKILLを送信するようになっています。
curl
サイゼリヤ1000円ガチャのエンドポイントを叩いて結果を取得します。結果はHTMLで返ってくるため、 pup
に渡してパースします。
1000円サイゼリヤガチャ
サイゼリヤ1000円ガチャをつくってみた(Heroku + Flask + LINEbot) - Qiita
pup
HTMLをパースし、CSSセレクタを利用して項目を表示するツールです。今回は各メニューと合計価格などを表示しています。
go get github.com/ericchiang/pup
でインストールすることができます。
ericchiang/pup: Parsing HTML at the command line
cowsay
標準入力から受け取った内容を牛に喋らせるコマンドです。
echo 'Hello, World' | cowsay
とすることで、以下のような出力が得られます。牛が喋っていますね。
______________
< Hello, World >
--------------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
また、牛以外を喋らせることが可能です。そこで、cowfileの一覧を cowsay -l
で出力できますが、やや人間可読でないため以下のようにして一覧をパースしています。
cowsay -l | tail -n +2 | tr ' ' '\n' | sort -R | head -1
最初の1行が不要なメッセージなので tail
で読み飛ばし、スペースで区切られているので tr
で改行に変換し、 sort
でシャッフルして head
で一つ選んでいます。
そして、その結果を cowsay
に渡しています。
cowsay -n -f (cowsay -l | tail -n +2 | tr ' ' '\n' | sort -R | head -1)
-n
で改行をそのまま取り扱い、 -f
で利用するcowfileを指定しています。
おまけ
__________________________________________________
/ キャベツのペペロンチーノ(Wサイズ) \
| シチリア産レモンのソルベ |
\ 計 969円 1499kcal 塩分 7.0g /
--------------------------------------------------
\
\ ....
........ .
. .
. .
......... .......
..............................
Elephant inside ASCII snake