mcpField
S
sustainability-fulltext-fetch

sustainability-fulltext-fetch

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

sustainability-fulltext-fetch について

sustainability-fulltext-fetch は、関連する DOI 付き RSS レコードから抄録やウェブページ本文を取得し、別のデータベースに保存します。サステナビリティ研究のワークフローで、コンテンツを増分更新しながら再試行する用途に向いています。

主な機能

  1. 01関連する DOI レコードのコンテンツ取得
  2. 02OpenAlex、次に Semantic Scholar を利用
  3. 03API メタデータがない場合はページ本文を抽出
  4. 04DOI ごとにコンテンツを保存・更新
  5. 05増分同期と再試行に対応

活用シーン

  1. 01RSS エントリーへの抄録追加
  2. 02API メタデータがない場合の全文取得
  3. 03DOI レコードを重複させずに取得を再試行

インストール

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

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

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

詳細

Sustainability 全文取得

主な目標

  • RSS メタデータ DB から関連する DOI エントリを読み取ります。
  • 取得したコンテンツを別の全文 DB に書き込みます。
  • 関連するエントリ(is_relevant=1)のみを処理します。
  • DOI による API メタデータ取得を優先します(まず OpenAlex、次に Semantic Scholar をフォールバックとして使用)。
  • API メタデータが利用できない場合は、ウェブページから全文を抽出します。
  • entry_content に DOI ごとに 1 件のコンテンツ行を保存します。

実行条件

  • 関連する DOI レコードに要約/全文コンテンツを追加するリクエストを受け取った場合。
  • ウェブページ優先のクロールを API 優先の追加処理に置き換えるリクエストを受け取った場合。
  • 重複行を作成せず、再試行に安全な増分更新が必要な場合。

ワークフロー

  1. 上流の DOI/関連性データが存在することを確認します。
export SUSTAIN_RSS_DB_PATH="/absolute/path/to/workspace-rss-bot/sustainability_rss.db"
export SUSTAIN_FULLTEXT_DB_PATH="/absolute/path/to/workspace-rss-bot/sustainability_fulltext.db"
python3 scripts/fulltext_fetch.py init-db --content-db "$SUSTAIN_FULLTEXT_DB_PATH"
  1. 増分同期を実行します(API を優先し、ウェブページをフォールバックとして使用します)。
python3 scripts/fulltext_fetch.py sync \
  --rss-db "$SUSTAIN_RSS_DB_PATH" \
  --content-db "$SUSTAIN_FULLTEXT_DB_PATH" \
  --limit 50 \
  --openalex-email "[email protected]" \
  --api-min-chars 80 \
  --min-chars 300
  1. DOI を 1 件、オンデマンドで取得します。
python3 scripts/fulltext_fetch.py fetch-entry \
  --rss-db "$SUSTAIN_RSS_DB_PATH" \
  --content-db "$SUSTAIN_FULLTEXT_DB_PATH" \
  --doi "10.1038/nature12373"
  1. 保存されたコンテンツの状態を確認します。
python3 scripts/fulltext_fetch.py list-content \
  --rss-db "$SUSTAIN_RSS_DB_PATH" \
  --content-db "$SUSTAIN_FULLTEXT_DB_PATH" \
  --status ready \
  --limit 100

データ仕様

  • RSS DB の entries から読み取ります:
    • doi、doi_is_surrogate、is_relevant、canonical_url、url、title。
  • 全文 DB の entry_content(主キー doi)に書き込みます:
    • ソース URL/ステータス/抽出器
    • content_kind(abstract または fulltext)
    • content_text、content_hash、content_length
    • 再試行用のフィールドとタイムスタンプ。

抽出の優先順位

  1. API メタデータ経路:
  • DOI で OpenAlex を検索します。
  • DOI で Semantic Scholar をフォールバックとして検索します。
  • 条件を満たす場合(--api-min-chars)、content_kind=abstract として保存します。
  1. ウェブページのフォールバック経路:
  • canonical_url、次に url を使用します。
  • trafilatura が利用可能な場合はそれを使用し、そうでない場合は組み込みの HTML パーサーで抽出します。
  • content_kind=fulltext として保存します。

更新の動作

  • アップサートキー:doi。
  • 成功時:ステータスを ready にし、再試行カウンターをリセットします。
  • 既存の ready 行がある場合の失敗時:以前のコンテンツを保持し、最新のエラーを記録します。
  • ready 行がない場合の失敗時:status=failed に設定し、再試行状態を更新します。

設定可能なパラメーター

  • --rss-db
  • --content-db
  • SUSTAIN_RSS_DB_PATH
  • SUSTAIN_FULLTEXT_DB_PATH
  • --limit
  • --force
  • --only-failed
  • --refetch-days
  • --timeout
  • --max-bytes
  • --min-chars
  • --openalex-email / OPENALEX_EMAIL
  • --s2-api-key / S2_API_KEY
  • --api-timeout
  • --api-min-chars
  • --disable-api-metadata
  • --max-retries
  • --retry-backoff-minutes
  • --user-agent
  • --disable-trafilatura
  • --fail-on-errors

エラー処理

  • DOI をキーとする entries テーブルがない場合:対処方法を示すメッセージを表示して停止します。
  • RSS DB と全文 DB のパスが衝突する場合:処理を即座に失敗させ、別々のファイルを使用するよう求めます。
  • API/ネットワーク/HTTP エラー:エラーを記録し、キューの処理を続行します。
  • ウェブページのコンテンツがテキストでない場合:該当する DOI を失敗としてマークします。
  • 抽出結果が短すぎる場合:品質の低いコンテンツを避けるため、しきい値に基づいて失敗とします。

参考資料

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

アセット

  • assets/config.example.json

スクリプト

  • scripts/fulltext_fetch.py

コメント