coniva-bouldering / bouldering-gym-notifier

ボルダリングジムの更新を知らせるボット
MIT License
2 stars 0 forks source link

bouldering-gym-notifier

ボルダリングジムの更新を知らせるボット

ディレクトリ構成

モノレポで行う


bouldering-gym-notifier
├── notifier Cronでスクレイピングと通知を定期実行
├── webhook HonoでLINEからのWebhookを受け取り、送信先グループIDなどを受け取る
└── short-url スクレイピングした記事の短縮URLを生成する

シーケンス

スクレイピング

sequenceDiagram
    autonumber
    participant cron as Cron Triggers
    participant worker as Cloudflare Workers
    participant web as ボルダリングジムのWebサイト
    participant db as Cloudflare D1

    cron->>cron: 毎朝9時にWorkerを起動するようにする
    cron->>worker: Worker起動リクエストを送る
    worker->>web: お知らせのURLを3件取得する
    web-->>worker: URL
    worker->>db: URLが登録済であるか検索する
    db-->>worker: 検索結果
    opt 登録済み
        worker-->worker: 何もせずWorkerを終了
    end
    worker->>db: URLをInsert
    db-->>worker: 成功

お知らせを LINE グループに投稿

sequenceDiagram
    autonumber
    participant cron as Cron Triggers
    participant worker as Cloudflare Workers
    participant db as Cloudflare D1
    participant line as LINE API

    cron->>cron: 毎週木曜日~土曜日にWorkerを起動するようにする
    cron->>worker: Worker起動リクエストを送る
    worker->>db: 未投稿のURLが存在するか検索する
    worker->db: 送信先LINEグループIDを取得
    db-->>worker: 検索結果
    opt 未投稿もしくは送信先なし
        worker-->worker: 何もせずWorkerを終了
    end
    worker->>line: LINEグループIDを使いLINEbotにURLを投稿させる
    line-->>worker: 投稿成功
    worker->>db: postedをtrueに変更
    db-->>worker: 成功

インフラ構成

flowchart TD
    subgraph Cloudflare
        cron[Cron Triggers] --> worker[Cloudflare Workers]
        worker --> db[(Cloudflare D1)]
    end
    subgraph LINE
        worker --> line[LINEbot]
        line --> u[我々のLINEグループ]
    end