sustainability-fulltext-fetch について
sustainability-fulltext-fetch は、関連する DOI 付き RSS レコードから抄録やウェブページ本文を取得し、別のデータベースに保存します。サステナビリティ研究のワークフローで、コンテンツを増分更新しながら再試行する用途に向いています。
主な機能
- 01関連する DOI レコードのコンテンツ取得
- 02OpenAlex、次に Semantic Scholar を利用
- 03API メタデータがない場合はページ本文を抽出
- 04DOI ごとにコンテンツを保存・更新
- 05増分同期と再試行に対応
活用シーン
- 01RSS エントリーへの抄録追加
- 02API メタデータがない場合の全文取得
- 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 優先の追加処理に置き換えるリクエストを受け取った場合。
- 重複行を作成せず、再試行に安全な増分更新が必要な場合。
ワークフロー
- 上流の 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"
- 増分同期を実行します(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
- 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"
- 保存されたコンテンツの状態を確認します。
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- 再試行用のフィールドとタイムスタンプ。
抽出の優先順位
- API メタデータ経路:
- DOI で OpenAlex を検索します。
- DOI で Semantic Scholar をフォールバックとして検索します。
- 条件を満たす場合(
--api-min-chars)、content_kind=abstractとして保存します。
- ウェブページのフォールバック経路:
canonical_url、次にurlを使用します。trafilaturaが利用可能な場合はそれを使用し、そうでない場合は組み込みの HTML パーサーで抽出します。content_kind=fulltextとして保存します。
更新の動作
- アップサートキー:
doi。 - 成功時:ステータスを
readyにし、再試行カウンターをリセットします。 - 既存の
ready行がある場合の失敗時:以前のコンテンツを保持し、最新のエラーを記録します。 ready行がない場合の失敗時:status=failedに設定し、再試行状態を更新します。
設定可能なパラメーター
--rss-db--content-dbSUSTAIN_RSS_DB_PATHSUSTAIN_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.mdreferences/fetch-rules.md
アセット
assets/config.example.json
スクリプト
scripts/fulltext_fetch.py
コメント
Markdown 対応