ADVENTAR の Bot を作る with Haskell
-
Upload
nobutada-matsubara -
Category
Technology
-
view
111 -
download
4
Transcript of ADVENTAR の Bot を作る with Haskell
![Page 1: ADVENTAR の Bot を作る with Haskell](https://reader033.fdocuments.net/reader033/viewer/2022042600/5a6e44777f8b9ac0678b5ab5/html5/thumbnails/1.jpg)
ADVENTAR の Bot を作るwith Haskell
ひげ
![Page 2: ADVENTAR の Bot を作る with Haskell](https://reader033.fdocuments.net/reader033/viewer/2022042600/5a6e44777f8b9ac0678b5ab5/html5/thumbnails/2.jpg)
$whoami名古屋の学生
研究テーマ: 型システムについて
好きなジャンル: 言語処理系
好きな言語: Haskell, 次点で Ruby
その他:
Haskell でバイトしてる
NGK2017b で Haskell × Elm × Kotlin でアプリを作った話について LT する予定
![Page 3: ADVENTAR の Bot を作る with Haskell](https://reader033.fdocuments.net/reader033/viewer/2022042600/5a6e44777f8b9ac0678b5ab5/html5/thumbnails/3.jpg)
本題
![Page 5: ADVENTAR の Bot を作る with Haskell](https://reader033.fdocuments.net/reader033/viewer/2022042600/5a6e44777f8b9ac0678b5ab5/html5/thumbnails/5.jpg)
悲しいことに...
〇iita と違い RSS のような機能が ADVENTAR には無い
![Page 6: ADVENTAR の Bot を作る with Haskell](https://reader033.fdocuments.net/reader033/viewer/2022042600/5a6e44777f8b9ac0678b5ab5/html5/thumbnails/6.jpg)
なので去年は作った
Google App Script でスクレイピング + Slack に通知(貧者なので GAS を使った)
![Page 7: ADVENTAR の Bot を作る with Haskell](https://reader033.fdocuments.net/reader033/viewer/2022042600/5a6e44777f8b9ac0678b5ab5/html5/thumbnails/7.jpg)
しかし
![Page 10: ADVENTAR の Bot を作る with Haskell](https://reader033.fdocuments.net/reader033/viewer/2022042600/5a6e44777f8b9ac0678b5ab5/html5/thumbnails/10.jpg)
React...だと...
![Page 11: ADVENTAR の Bot を作る with Haskell](https://reader033.fdocuments.net/reader033/viewer/2022042600/5a6e44777f8b9ac0678b5ab5/html5/thumbnails/11.jpg)
静的な DOM が生成されないので スクレイピングできない...
![Page 12: ADVENTAR の Bot を作る with Haskell](https://reader033.fdocuments.net/reader033/viewer/2022042600/5a6e44777f8b9ac0678b5ab5/html5/thumbnails/12.jpg)
そこで Headless Browser(e.g. Selenium, PhantomJS)
![Page 13: ADVENTAR の Bot を作る with Haskell](https://reader033.fdocuments.net/reader033/viewer/2022042600/5a6e44777f8b9ac0678b5ab5/html5/thumbnails/13.jpg)
この時点で GAS はもう...
困った...
![Page 14: ADVENTAR の Bot を作る with Haskell](https://reader033.fdocuments.net/reader033/viewer/2022042600/5a6e44777f8b9ac0678b5ab5/html5/thumbnails/14.jpg)
![Page 15: ADVENTAR の Bot を作る with Haskell](https://reader033.fdocuments.net/reader033/viewer/2022042600/5a6e44777f8b9ac0678b5ab5/html5/thumbnails/15.jpg)
CircleCI 2.0 で cron 追加されたしDocker イメージをプルすれば...
任意のプログラムを定期実行できる!
![Page 16: ADVENTAR の Bot を作る with Haskell](https://reader033.fdocuments.net/reader033/viewer/2022042600/5a6e44777f8b9ac0678b5ab5/html5/thumbnails/16.jpg)
プログラムの流れ
コレを Haskell でやる!(なぜ)
![Page 17: ADVENTAR の Bot を作る with Haskell](https://reader033.fdocuments.net/reader033/viewer/2022042600/5a6e44777f8b9ac0678b5ab5/html5/thumbnails/17.jpg)
各種 Haskell ライブラリ(ほぼおまけ)
webdriver: Headless Browser を操作できる
scalpel: 関数型パーサーっぽいスクレイパー
aeson: JSON デコーダー・エンコーダー
slack-api: Slack API を簡単に扱える
Headless Browser は Java のスタンドアローンなselenium-serverを使った
CircleCI のときは docker-compose でコレを使った
![Page 18: ADVENTAR の Bot を作る with Haskell](https://reader033.fdocuments.net/reader033/viewer/2022042600/5a6e44777f8b9ac0678b5ab5/html5/thumbnails/18.jpg)
cron で回す
![Page 19: ADVENTAR の Bot を作る with Haskell](https://reader033.fdocuments.net/reader033/viewer/2022042600/5a6e44777f8b9ac0678b5ab5/html5/thumbnails/19.jpg)
いい感じ
![Page 20: ADVENTAR の Bot を作る with Haskell](https://reader033.fdocuments.net/reader033/viewer/2022042600/5a6e44777f8b9ac0678b5ab5/html5/thumbnails/20.jpg)
いやいや...
![Page 21: ADVENTAR の Bot を作る with Haskell](https://reader033.fdocuments.net/reader033/viewer/2022042600/5a6e44777f8b9ac0678b5ab5/html5/thumbnails/21.jpg)
Bot ならこっちのメッセージからも動けや(?)
という強い圧力を感じた(適当)
![Page 22: ADVENTAR の Bot を作る with Haskell](https://reader033.fdocuments.net/reader033/viewer/2022042600/5a6e44777f8b9ac0678b5ab5/html5/thumbnails/22.jpg)
GAS から GitHub に commit すればいいんじゃね?
![Page 23: ADVENTAR の Bot を作る with Haskell](https://reader033.fdocuments.net/reader033/viewer/2022042600/5a6e44777f8b9ac0678b5ab5/html5/thumbnails/23.jpg)
いい感じ
![Page 24: ADVENTAR の Bot を作る with Haskell](https://reader033.fdocuments.net/reader033/viewer/2022042600/5a6e44777f8b9ac0678b5ab5/html5/thumbnails/24.jpg)
まとめ
![Page 25: ADVENTAR の Bot を作る with Haskell](https://reader033.fdocuments.net/reader033/viewer/2022042600/5a6e44777f8b9ac0678b5ab5/html5/thumbnails/25.jpg)
まとめReact系の Webページには Headless Browser
CircleCI + Docker で任意のプログラムを実行可
GAS から commit で好きなタイミングでも実行可
ただし無料枠は 1500 build min/month
Haskell でも作れるよ!
![Page 26: ADVENTAR の Bot を作る with Haskell](https://reader033.fdocuments.net/reader033/viewer/2022042600/5a6e44777f8b9ac0678b5ab5/html5/thumbnails/26.jpg)
おしまい