テックブログ(91サイト)の新着記事を毎朝チェックして通知するシステム。 設計の詳細は docs/design.md を参照。
python3 -m venv .venv
.venv/bin/pip install -r requirements.txt.venv/bin/python check.py # 通常実行
.venv/bin/python check.py --dry-run # state/レポートを書き込まずに試す- 新着があれば
reports/YYYY-MM-DD.mdを生成し、ダイジェストを標準出力に表示する - 既読URLは
state/seen.jsonに記録される(初回実行は全記事を既読登録して通知ゼロで開始) - 取得に失敗したブログがあると標準エラーに
FAILED <ブログ名>: <理由>を出力し、終了コード1で終わる(成功したブログの処理は継続される)
blogs.yaml に1エントリ追記するだけ:
- name: ブログ名
url: https://example.com/blog/
feed: https://example.com/blog/feedフィードURLの見つけ方(docs/design.md §5 参照):
- ページHTMLの
<link rel="alternate" type="application/(rss|atom)+xml">を見る - なければ
/feed/rss/rss.xml/atom.xml/index.xml/feed.xml等の定番パスを試す - それでもなければ
adapters/にスクレイプアダプタを書き、feed:の代わりにadapter: <モジュール名>を指定する
| パス | 役割 |
|---|---|
blogs.yaml |
ブログ登録簿 |
check.py |
チェッカー本体(既読URL差分で新着判定) |
adapters/ |
フィードがない/特殊なサイト用アダプタ(wantedly / google_ja / anthropic_news / claude_blog / cursor_blog / notion_tech / discord_engineering / shopify / twitch / uber / bytedance_seed / figma_engineering / cybozu_frontend_web_standards / manager_dev) |
state/seen.json |
既読記事URL(実行のたびに commit して永続化、180日で刈り込み) |
reports/ |
日次ダイジェスト(Markdown)。アダプタが body(記事本文)を返すブログ(個別記事URLを持たない常時更新ページ、例: Google Cloud Release Notes)は中身を <details> ブロックとして同じレポート内に直接埋め込む |
毎日 08:00 JST に以下を実行する:
python check.pyを実行する- 新着があればダイジェストを通知する
state/seen.jsonとreports/の変更を commit & push する- 終了コードが1(取得失敗あり)の場合、原因を調査して
blogs.yamlやアダプタを修正して commit する(自己修復)