editorial-collector

新聞社の社説を、無料公開分だけ自動で集める。
研究・比較・定点観測にそのまま使える収集基盤です。

v0.1.2MIT Licensemarimo / CLI / Web

できること

社説を自動収集 朝日・毎日・読売・日経・産経など主要8社の社説一覧と無料公開部分を取得します。
JSON / CSV で保存 タイトル・掲載日・URL・変更検知の状態を構造化データとして保存します。
Word Cloud で可視化 収集したタイトルからキーワードを抽出し、SVG ワードクラウドを生成します。
定期実行に対応 GitHub Actions で毎朝自動収集。Worker・CLI・marimo からも実行できます。

こんな人向け

使い方

Step 1 — デモで動作を確認

このページの Web-UI で「デモデータ生成」を押すだけ。全8社分のサンプル社説が投入され、ダッシュボードとエクスポートを試せます。

Step 2 — 実データを取得する場合

Worker プロキシを設定すると、実際の新聞サイトからデータを取得できます。

Step 3 — 定期収集をセットアップ

GitHub Actions で毎朝自動収集。CLI / marimo でローカル運用も可能です。

Step 4 — 結果を活用

JSON / CSV をエクスポートし、分析や可視化に利用します。

出力例

収集データの構造

title — 社説タイトル
publish_date — 掲載日
source — 新聞社名
url — 記事URL
status — active / changed / deleted
keywords — 抽出キーワード

定期収集データ(GitHub Actions 自動生成)

毎朝(JST)に Actions が全社分を収集し、このページに反映します。

HTMLレポートを見る Word Cloud (SVG)

特長

無料公開分のみ取得 ペイウォール内の全文は取得しません。公開されている一覧情報と無料部分だけを対象とします。
軽量で導入しやすい 重いインフラは不要。CLI 一つ、またはこのページの Web-UI から始められます。
複数の実行方法に対応 Cloudflare Worker・CLI・marimo・GitHub Actions から実行できます。
継続運用しやすい 変更検知機能で、掲載日の変化や記事の追加・削除を検出します。

注意点

  • 取得対象は各サイトの無料公開部分のみです
  • サイト側の仕様変更でセレクタ調整が必要な場合があります
  • 利用時は各サイトの利用条件に従ってください
  • 低頻度での利用を推奨します

収集対象と取得方式

取得方式対象備考
直接HTTP(静的HTML)読売 / 産経 / 北海道 / 東京追加設定なしで動作
Cloudflare Browser Rendering朝日 / 毎日 / 日経 / 熊本日日JS描画ページ。APIキーが必要(CLI/marimo版)

セットアップ詳細

STEP 1 — デモモードで触ってみる(設定不要)

下の Web-UI を開き、「デモデータ生成」を押すだけです。全8社分のサンプル社説が投入され、ダッシュボードとエクスポートを試せます。

STEP 2 — Worker プロキシを用意する(実データ取得する場合)

新聞サイトは他オリジンからの fetch を CORS で拒否するため、Cloudflare Worker を中継させます。

// worker.js — 指定 URL の HTML を返す最小構成(悪用防止のため allowlist 推奨)
const ALLOW = ["asahi.com","mainichi.jp","yomiuri.co.jp","sankei.com",
               "hokkaido-np.co.jp","tokyo-np.co.jp","kumanichi.com"];
export default {
  async fetch(request) {
    const target = new URL(request.url).searchParams.get("url");
    if (!target || !ALLOW.some(h => target.endsWith(h)))
      return new Response("forbidden", { status: 403 });
    const res = await fetch(target, { headers: { "User-Agent": "editorial-collector/0.1.2" } });
    return new Response(res.body, {
      status: res.status,
      headers: { "Content-Type": res.headers.get("Content-Type") ?? "text/html",
                 "Access-Control-Allow-Origin": "*" },
    });
  },
};
npx wrangler deploy   # デプロイ後、https://xxx.workers.dev/?url=... 形式のURLを下の設定欄へ

STEP 3 — ローカル版(CLI / marimo)で本格運用

git clone https://github.com/watanabe3tipapa/editorial-collector
cd editorial-collector && uv sync
uv run editorial-collector collect --all        # 収集
uv run editorial-collector report               # HTMLレポート出力
uv run marimo run notebook.py                   # GUI起動

# JS描画対応社(朝日等)は .env に認証情報を設定
cp .env.example .env   # CF_ACCOUNT_ID / CF_API_TOKEN を記入

Web-UI(Pyodide)

Pyodide を読み込んでいます…
掲載日新聞社状態タイトル

Word Cloud

収集済みタイトルからキーワードを抽出して SVG 描画します(辞書不要の簡易トークナイザ)。

最大語数
ログ
— 起動しました —