Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

ADVENTAR の Bot を作る with Haskell

179 views

Published on

ADVENTAR と言うサイトのアドベントカレンダーのページをスクレイピングして更新を通知する Slack Bot を作った with Haskell の話
repository: https://github.com/IGGG/adventar-bot

Published in: Technology
  • Be the first to comment

  • Be the first to like this

ADVENTAR の Bot を作る with Haskell

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

×