mcpField
A
ai-tech-fulltext-fetch

ai-tech-fulltext-fetch

github.com/tiangong-aiデータ・データベース1158 回インストール1 週間前に更新
リポジトリ

ai-tech-fulltext-fetch について

ai-tech-rss-fetchが使うSQLiteデータベースからRSS記事の本文を取得するスキルです。RSSメタデータ同期後の、増分実行と再試行に対応した全文取得処理に適しています。

主な機能

  1. 01既存のRSS記事から本文を取得
  2. 02canonical URLを優先
  3. 03HTMLパーサーにフォールバック
  4. 04記事ごとに抽出結果を保存
  5. 05増分同期と再試行に対応

活用シーン

  1. 01既存RSS記事に全文を追加
  2. 02記事本文を個別に取得
  3. 03本文の抽出状態を確認
  4. 04分割、インデックス化、要約用のテキストを準備

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/tiangong-ai/agent-skills --skill ai-tech-fulltext-fetch

インストール後、Claude Code で/ai-tech-fulltext-fetchを入力して読み込まれたか確認します。

詳細

AI Tech 全文取得

主な目的

  • ai-tech-rss-fetch がデータを登録したものと同じ SQLite データベースを再利用します。
  • 各 RSS エントリーの URL から記事本文を取得します。
  • 抽出ステータスと本文を、関連テーブル(entry_content)に保存します。
  • 重複する全文レコードを作成せずに、差分実行と安全な再試行をサポートします。

実行条件

  • ai_rss.db にすでに存在するエントリーの記事本文/全文を取得するようにリクエストされた場合。
  • RSS メタデータの同期後に、第 2 段階のパイプラインを構築するようにリクエストされた場合。
  • 既存の entries 行を対象に、安定して再開可能なキューが必要な場合。
  • チャンク化、インデックス作成、要約の前に、URL を基準に全文を保存する必要がある場合。

ワークフロー

  1. 最初にメタデータテーブルが存在することを確認します。
  • このスキルを使う前に ai-tech-rss-fetch を実行し、SQLite の entries にデータを登録します。
  • このスキルには entries テーブルが必要です。
  • 複数エージェントのランタイムでは、ai-tech-rss-fetch で使用したものと同じ絶対パスを DB に指定します。
export AI_RSS_DB_PATH="/absolute/path/to/workspace-rss-bot/ai_rss.db"
  1. 全文テーブルを初期化します。
python3 scripts/fulltext_fetch.py init-db --db "$AI_RSS_DB_PATH"
  1. 全文の差分同期を実行します。
  • デフォルトでは、全文がない行、または現在失敗している行を取得します。
python3 scripts/fulltext_fetch.py sync \
  --db "$AI_RSS_DB_PATH" \
  --limit 50 \
  --timeout 20 \
  --min-chars 300
  1. 必要に応じて、1 件のエントリーを取得します。
python3 scripts/fulltext_fetch.py fetch-entry \
  --db "$AI_RSS_DB_PATH" \
  --entry-id 1234
  1. 抽出されたコンテンツの状態を確認します。
python3 scripts/fulltext_fetch.py list-content \
  --db "$AI_RSS_DB_PATH" \
  --status ready \
  --limit 100

データ仕様

  • 既存の entries テーブルから読み取る項目:
    • id、canonical_url、url、title。
  • entry_content テーブルに書き込む項目:
    • entry_id(一意で、エントリーごとに 1 行)
    • source_url、final_url、http_status
    • extractor(trafilatura、html-parser、または none)
    • content_text、content_hash、content_length
    • status(ready または failed)
    • retry_count、last_error、タイムスタンプ。

抽出と更新のルール

  • URL の優先順位:まず canonical_url を使用し、ない場合は url を使用します。
  • 依存関係が利用可能な場合は trafilatura による抽出を試み、失敗した場合は組み込みの HTML パーサーを使用します。
  • entry_id を基準に Upsert します。
    • 成功時:全文を書き込み/更新し、retry_count を 0 にリセットします。
    • 失敗し、既存の ready コンテンツがある場合:古いテキストを保持し、ステータスを ready のままにして、last_error を記録します。
    • 失敗し、ready のコンテンツがない場合:ステータスを failed にし、retry_count を増やして、next_retry_at を設定します。
  • 失敗時の再試行は --max-retries(デフォルトは 3)で制限され、--retry-backoff-minutes に従って間隔を空けて行われます。
  • --force を指定すると、すでに ready の行も再取得できます。
  • --refetch-days N を指定すると、N 日より前の行を更新できます。

設定可能なパラメーター

  • --db
  • AI_RSS_DB_PATH(複数エージェントのランタイムでは絶対パスを推奨)
  • --limit
  • --force
  • --only-failed
  • --refetch-days
  • --oldest-first
  • --timeout
  • --max-bytes
  • --min-chars
  • --max-retries
  • --retry-backoff-minutes
  • --user-agent
  • --disable-trafilatura
  • --fail-on-errors

エラー処理

  • entries テーブルがない場合:具体的な対処方法を示すエラーを返し、停止します。
  • ネットワーク/HTTP/解析エラーの場合:失敗状態を保存し、ほかのエントリーの処理を続行します。
  • テキスト以外のコンテンツタイプ(PDF/画像/音声/動画/zip)の場合:該当エントリーを失敗として記録します。
  • 抽出結果が短すぎる場合(--min-chars):品質の低い本文を避けるため、失敗として扱います。

参照

  • references/schema.md
  • references/fetch-rules.md

アセット

  • assets/config.example.json

スクリプト

  • scripts/fulltext_fetch.py

コメント