7
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

fish起動時にサイゼリヤ1000円ガチャの結果を表示する

Last updated at Posted at 2019-05-10

背景

サイゼリヤ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

これを参考に、以下のように設定を行います。

~/.config/fish/config.fish
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円ガチャが表示されます。

結果1
 _________________________________________________ 
/ ティラミス(アイスケーキ)             \
| セットドリンクバー                     |
| 冷たいパンプキンスープ(季節限定) |
| チョコレートケーキ                     |
| 冷たいパンプキンスープ(季節限定) |
\ 計 986円 507kcal 塩分 2.0g              /
 ------------------------------------------------- 
        \   ^__^
         \  (oo)\_______
            (__)\       )\/\
                ||----w |
                ||     ||

デザートが多く嬉しいですが、メインが無いですね。もう一度やってみましょう。

結果2
 ____________________________________ 
/ リブステーキ                 \
\ 計 999円 621kcal 塩分 1.5g /
 ------------------------------------ 
  \            .    .     .   
   \      .  . .     `  ,     
    \    .; .  : .' :  :  : . 
     \   i..`: i` i.i.,i  i . 
      \   `,--.|i |i|ii|ii|i: 
           UooU\.'@@@@@@`.||' 
           \__/(@@@@@@@@@@)'  
                (@@@@@@@@)    
                `YY~~~~YY'    
                 ||    ||  

牛が燃えていますね。これがそのままステーキになりそうです。

結果3
 ____________________________________ 
/ プロシュート(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を送信するようになっています。

Man page of TIMEOUT

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を指定しています。

おまけ

結果4
 __________________________________________________ 
/ キャベツのペペロンチーノ(Wサイズ) \
| シチリア産レモンのソルベ             |
\ 計 969円 1499kcal 塩分 7.0g              /
 -------------------------------------------------- 
   \
    \              ....       
           ........    .      
          .            .      
         .             .      
.........              .......
..............................

Elephant inside ASCII snake

これが何なのか? もちろんウワバミに食べられた象だよ。

7
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?