ニュース収集、Claude Code に任せてみた
Claude Code の練習がてら、ニュース収集ツールを作ってみました。
なぜ作ったか
毎朝ニュースをチェックしてたわけじゃなくて。 X(Twitter)の投稿ネタが欲しくて、ゲーム・AI系のニュースを自動で拾ってこれたら便利かなと思って作りました。
作ったもの
毎時サーバーで自動起動
↓
RSSフィードからニュースを収集
↓
スコア順に各カテゴリ TOP3 を選定
↓
Notion のデイリーニュースページに追記
サーバーのcronで動かしているので、PCを起動してなくても勝手に動きます。
収集しているニュース
自分の興味にあわせて4カテゴリ設定しました。
- ゲーム — LoL・ポケモン・スト6・ゼンゼロ(4Gamer・IGN Japanなど)
- AI — Claude・OpenAI・Geminiまわり(TechCrunch・MIT Technology Reviewなど)
- 投資・資産運用 — NHK経済・Reutersなど
- AdSense・ブログ収益化 — Google AdSenseブログなど
キーワードフィルタがついていて、関係ない記事は自動で除外されます。各カテゴリ最大3件。
Notion API との連携
ここが一番こだわったところ。
Notion に「デイリーニュース」という親ページを用意しておいて、その配下に 日付ごとの子ページを自動で作る 仕組みにしました。
📰 デイリーニュース(親ページ)
├── 2026-04-13 ニュース ← 毎日自動で作られる
├── 2026-04-12 ニュース
├── 2026-04-11 ニュース
└── ...
子ページの自動作成
スクリプトを動かすと、まず「今日のページがあるか?」を Notion API の検索で確認します。
- ある → そのページに追記
- ない → 新規でページを作成
検索キーは 2026-04-13 ニュース のように日付+固定文字列。これで重複作成を防いでます。
「最新が上」を実現するセンチネル方式
これが面白かったポイント。
Notion API でブロックを追加すると、デフォルトでは ページの末尾 に追加されます。でも、ニュース収集ツールとしては 最新の取得結果を一番上 に出したかった。
そこで使ったのが センチネル方式。ページ作成時に先頭に「空の段落ブロック」を1つ置いておき、追記する時はその直後(after パラメータ)に挿入します。
# センチネル(不可視の空ブロック)を先頭に配置
sentinel = {"object": "block", "type": "paragraph",
"paragraph": {"rich_text": []}}
# 追記時はセンチネルの直後に挿入することで「最新が上」になる
requests.patch(
f"https://api.notion.com/v1/blocks/{page_id}/children",
json={"children": new_blocks, "after": sentinel_id}
)
これで 8:00 取得 → 9:00 取得 の順で追記しても、ページ上では 9:00 → 8:00 の順で表示されるようになりました。
ブロック構造
1回の取得結果は、こんな階層で書き込んでます。
🕐 8:00 取得(10件) ← heading_3
├── 🎮 ゲーム ← bulleted_list(太字)
│ ├── [4Gamer] 記事タイトル ← リンク付き
│ │ └── サマリー200字 ← グレー文字
│ ├── ...
├── 🤖 AI
│ └── ...
───────────────── ← divider
bulleted_list_item の children にネストできるので、カテゴリ → 記事 → サマリーを階層化できます。
スコアリングと選定ロジック
「とりあえず最新3件」だと微妙な記事も混ざるので、シンプルなスコアリングを入れました。
| 要素 | スコア |
|---|---|
| キーワードがタイトルに含まれる | +3 |
| キーワードがサマリーに含まれる | +1 |
| はてなブックマーク数 | ×10倍(日本語記事のみ) |
はてブの重み付けが効いてて、話題になってる記事が自然と上位に来ます。各カテゴリでスコア順にソートして、TOP3を選定。
3時間以内に公開された記事だけを対象にしているので、毎時の cron で叩いてもダブり収集はなし。さらに daily_cache.json で 収集済み URL を1日単位で管理 していて、同じ記事を2回拾わないようにしてます。
Geminiは一旦やめた
最初はGeminiでツイート文も自動生成しようとしていました。 ただ、使おうとしたモデルが有料だったので一旦やめています。 とりあえず収集だけしてNotionに貯めておいて、投稿文は自分で書いてます。
実際どうか
Notionを開けばネタが並んでいる状態になりました。 ゼロから探すよりずっと楽です。

完成まで半日くらい。 RSSまわりとNotion APIは初めてだったけど、Claude Codeに「こういうの作りたい」と言い続けたら動くものができました。
特に Notion API のセンチネル方式は、自分では絶対思いつかなかったやり方。「最新を上に出したい」って投げただけで提案してくれたのは助かりました。
ツイート自動生成はそのうち再挑戦する予定です。
X(@kanalyzelab)でも発信してるので、気が向いたらフォローしてもらえると嬉しいです。
この記事が役に立ったらシェア