article-extractor
URLからブログ記事やチュートリアルなどのコンテンツを抽出し、広告やナビゲーションなどの不要な要素を除いたクリーンなテキストとして保存します。ユーザーが特定のURLの記事をすっきりした形で取得・保存したい場合に使用します。
description の原文を見る
Extract clean article content from URLs (blog posts, articles, tutorials) and save as readable text. Use when user wants to download, extract, or save an article/blog post from a URL without ads, navigation, or clutter.
SKILL.md 本文
記事抽出ツール
このスキルはウェブ記事やブログポストからメインコンテンツを抽出し、ナビゲーション、広告、ニュースレター登録、その他のクラッターを削除します。クリーンで読みやすいテキストを保存します。
このスキルを使用する場合
ユーザーが以下の場合に有効化します:
- 記事/ブログの URL を提供し、テキストコンテンツが欲しい
- 「この記事をダウンロード」と依頼
- 「[URL]からコンテンツを抽出」と希望
- 「このブログポストをテキストで保存」と希望
- 気を散らさないクリーンな記事テキストが必要
動作方法
優先順位:
- ツールのインストール確認 (reader または trafilatura)
- 利用可能な最適なツールを使用して記事をダウンロード・抽出
- コンテンツをクリーンアップ (余分な空白を削除、適切にフォーマット)
- ファイルに保存 (記事タイトルをファイル名として使用)
- 場所を確認 してプレビューを表示
インストール確認
この順序で記事抽出ツールを確認します:
オプション 1: reader (推奨 - Mozilla の Readability)
command -v reader
インストールされていない場合:
npm install -g @mozilla/readability-cli
# または
npm install -g reader-cli
オプション 2: trafilatura (Python ベース、非常に優秀)
command -v trafilatura
インストールされていない場合:
pip3 install trafilatura
オプション 3: フォールバック (curl + シンプルなパース)
利用可能なツールがない場合、基本的な curl + テキスト抽出を使用 (信頼性は低いが動作)
抽出方法
方法 1: reader を使用 (ほとんどの記事に最適)
# 記事を抽出
reader "URL" > article.txt
メリット:
- Mozilla の Readability アルゴリズムに基づく
- クラッター削除に優れている
- 記事の構造を保持
方法 2: trafilatura を使用 (ブログ/ニュースに最適)
# 記事を抽出
trafilatura --URL "URL" --output-format txt > article.txt
# または、より多くのオプション付き
trafilatura --URL "URL" --output-format txt --no-comments --no-tables > article.txt
メリット:
- 非常に正確な抽出
- 様々なサイト構造に対応
- 複数の言語に対応
オプション:
--no-comments: コメントセクションをスキップ--no-tables: データテーブルをスキップ--precision: 再現率よりも精度を優先--recall: より多くのコンテンツを抽出 (ノイズを含む可能性)
方法 3: フォールバック (curl + 基本的なパース)
# ダウンロード・基本的なコンテンツを抽出
curl -s "URL" | python3 -c "
from html.parser import HTMLParser
import sys
class ArticleExtractor(HTMLParser):
def __init__(self):
super().__init__()
self.in_content = False
self.content = []
self.skip_tags = {'script', 'style', 'nav', 'header', 'footer', 'aside'}
self.current_tag = None
def handle_starttag(self, tag, attrs):
if tag not in self.skip_tags:
if tag in {'p', 'article', 'main', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6'}:
self.in_content = True
self.current_tag = tag
def handle_data(self, data):
if self.in_content and data.strip():
self.content.append(data.strip())
def get_content(self):
return '\n\n'.join(self.content)
parser = ArticleExtractor()
parser.feed(sys.stdin.read())
print(parser.get_content())
" > article.txt
注: これは信頼性が低いですが、依存関係がなくても動作します。
記事タイトルの取得
ファイル名用にタイトルを抽出:
reader を使用:
# reader はマークダウンをタイトル付きで出力
TITLE=$(reader "URL" | head -n 1 | sed 's/^# //')
trafilatura を使用:
# メタデータ(タイトルを含む)を取得
TITLE=$(trafilatura --URL "URL" --json | python3 -c "import json, sys; print(json.load(sys.stdin)['title'])")
curl を使用 (フォールバック):
TITLE=$(curl -s "URL" | grep -oP '<title>\K[^<]+' | sed 's/ - .*//' | sed 's/ | .*//')
ファイル名の作成
ファイルシステム用にタイトルをクリーンアップ:
# タイトルを取得
TITLE="Article Title from Website"
# ファイルシステム用にクリーンアップ (特殊文字を削除、長さを制限)
FILENAME=$(echo "$TITLE" | tr '/' '-' | tr ':' '-' | tr '?' '' | tr '"' '' | tr '<' '' | tr '>' '' | tr '|' '-' | cut -c 1-100 | sed 's/ *$//')
# 拡張子を追加
FILENAME="${FILENAME}.txt"
完全なワークフロー
ARTICLE_URL="https://example.com/article"
# ツールを確認
if command -v reader &> /dev/null; then
TOOL="reader"
echo "Using reader (Mozilla Readability)"
elif command -v trafilatura &> /dev/null; then
TOOL="trafilatura"
echo "Using trafilatura"
else
TOOL="fallback"
echo "Using fallback method (may be less accurate)"
fi
# 記事を抽出
case $TOOL in
reader)
# コンテンツを取得
reader "$ARTICLE_URL" > temp_article.txt
# タイトルを取得 (マークダウンで # の後の最初の行)
TITLE=$(head -n 1 temp_article.txt | sed 's/^# //')
;;
trafilatura)
# メタデータからタイトルを取得
METADATA=$(trafilatura --URL "$ARTICLE_URL" --json)
TITLE=$(echo "$METADATA" | python3 -c "import json, sys; print(json.load(sys.stdin).get('title', 'Article'))")
# クリーンなコンテンツを取得
trafilatura --URL "$ARTICLE_URL" --output-format txt --no-comments > temp_article.txt
;;
fallback)
# タイトルを取得
TITLE=$(curl -s "$ARTICLE_URL" | grep -oP '<title>\K[^<]+' | head -n 1)
TITLE=${TITLE%% - *} # サイト名を削除
TITLE=${TITLE%% | *} # サイト名を削除 (代替)
# コンテンツを取得 (基本的な抽出)
curl -s "$ARTICLE_URL" | python3 -c "
from html.parser import HTMLParser
import sys
class ArticleExtractor(HTMLParser):
def __init__(self):
super().__init__()
self.in_content = False
self.content = []
self.skip_tags = {'script', 'style', 'nav', 'header', 'footer', 'aside', 'form'}
def handle_starttag(self, tag, attrs):
if tag not in self.skip_tags:
if tag in {'p', 'article', 'main'}:
self.in_content = True
if tag in {'h1', 'h2', 'h3'}:
self.content.append('\n')
def handle_data(self, data):
if self.in_content and data.strip():
self.content.append(data.strip())
def get_content(self):
return '\n\n'.join(self.content)
parser = ArticleExtractor()
parser.feed(sys.stdin.read())
print(parser.get_content())
" > temp_article.txt
;;
esac
# ファイル名をクリーンアップ
FILENAME=$(echo "$TITLE" | tr '/' '-' | tr ':' '-' | tr '?' '' | tr '"' '' | tr '<>' '' | tr '|' '-' | cut -c 1-80 | sed 's/ *$//' | sed 's/^ *//')
FILENAME="${FILENAME}.txt"
# 最終的なファイル名に移動
mv temp_article.txt "$FILENAME"
# 結果を表示
echo "✓ Extracted article: $TITLE"
echo "✓ Saved to: $FILENAME"
echo ""
echo "Preview (first 10 lines):"
head -n 10 "$FILENAME"
エラーハンドリング
よくある問題
1. ツールがインストールされていない
- 代替ツールを試す (reader → trafilatura → フォールバック)
- インストールを提案: 「reader をインストール: npm install -g reader-cli」
2. ペイウォール または ログイン必須
- 抽出ツールが失敗する可能性
- ユーザーに通知: 「この記事は認証が必須です。抽出できません。」
3. 無効な URL
- URL 形式を確認
- リダイレクト有無で試す
4. コンテンツが抽出されない
- サイトが JavaScript を多用している可能性
- フォールバック方法を試す
- 抽出失敗時はユーザーに通知
5. タイトルに特殊文字
- ファイルシステム用にタイトルをクリーンアップ
- 削除:
/,:,?,",<,>,| - または
-に置き換え
出力形式
保存されたファイルに含まれるもの:
- 記事タイトル (利用可能な場合)
- 著者 (ツールから利用可能な場合)
- メイン記事テキスト
- セクション見出し
- ナビゲーション、広告、クラッターなし
削除されるもの:
- ナビゲーションメニュー
- 広告とプロモーションコンテンツ
- ニュースレター登録フォーム
- 関連記事サイドバー
- コメントセクション (オプション)
- ソーシャルメディアボタン
- Cookie 通知
最適な結果のためのヒント
1. ほとんどの記事で reader を使用
- 最高のオールラウンドツール
- Firefox リーダービューに基づく
- ほとんどのニュースサイトとブログで動作
2. trafilatura を使用する対象:
- 学術論文
- ニュースサイト
- 複雑なレイアウトのブログ
- 英語以外のコンテンツ
3. フォールバック方法の制限:
- ノイズを含む可能性
- 段落検出の精度が低い
- シンプルなサイトよりは良い
4. 抽出品質を確認:
- 常にユーザーに抽出結果をプレビュー表示
- 正しく見えるか確認を依頼
- 必要に応じて異なるツールを試すことを提案
使用例
シンプルな抽出:
# ユーザー: 「https://example.com/article を抽出」
reader "https://example.com/article" > temp.txt
TITLE=$(head -n 1 temp.txt | sed 's/^# //')
FILENAME="$(echo "$TITLE" | tr '/' '-').txt"
mv temp.txt "$FILENAME"
echo "✓ Saved to: $FILENAME"
エラーハンドリング付き:
if ! reader "$URL" > temp.txt 2>/dev/null; then
if command -v trafilatura &> /dev/null; then
trafilatura --URL "$URL" --output-format txt > temp.txt
else
echo "Error: Could not extract article. Install reader or trafilatura."
exit 1
fi
fi
ベストプラクティス
- ✅ 抽出後、常にユーザーにプレビューを表示 (最初の 10 行)
- ✅ 保存前に抽出が成功したことを確認
- ✅ ファイルシステム互換性のためファイル名をクリーンアップ
- ✅ プライマリが失敗した場合はフォールバック方法を試す
- ✅ どのツールを使用したかをユーザーに通知
- ✅ ファイル名の長さを妥当に保つ (< 100 文字)
抽出後
ユーザーに表示:
- 「✓ 抽出完了: [記事タイトル]」
- 「✓ 保存先: [ファイル名]」
- プレビューを表示 (最初の 10-15 行)
- ファイルサイズと場所
必要に応じて確認:
- 「これからこの記事を使って Ship-Learn-Next プランを作成しましょうか?」(ship-learn-next スキルを使用する場合)
- 「別の記事も抽出しましょうか?」
ライセンス: MIT(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- michalparkola
- ライセンス
- MIT
- 最終更新
- 不明
Source: https://github.com/michalparkola/tapestry-skills-for-claude-code / ライセンス: MIT
関連スキル
superfluid
Superfluidプロトコルおよびそのエコシステムに関するナレッジベースです。Superfluidについて情報を検索する際は、ウェブ検索の前にこちらを参照してください。対応キーワード:Superfluid、CFA、GDA、Super App、Super Token、stream、flow rate、real-time balance、pool(member/distributor)、IDA、sentinels、liquidation、TOGA、@sfpro/sdk、semantic money、yellowpaper、whitepaper
civ-finish-quotes
実質的なタスクが真に完了した際に、文明風の儀式的な引用句を追加します。ユーザーやエージェントが機能追加、リファクタリング、分析、設計ドキュメント、プロセス改善、レポート、執筆タスクといった実際の成果物を完成させるときに、明示的な依頼がなくても使用します。短い返信や小さな修正、未完成の作業には適用しません。
nookplot
Base(Ethereum L2)上のAIエージェント向け分散型調整ネットワークです。エージェントがオンチェーンアイデンティティを登録する、コンテンツを公開する、他のエージェントにメッセージを送る、マーケットプレイスで専門家を雇う、バウンティを投稿・請求する、レピュテーションを構築する、共有プロジェクトで協業する、リサーチチャレンジを解くことでNOOKをマイニングする、キュレーションされたナレッジを備えたスタンドアロンオンチェーンエージェントをデプロイする、またはアグリーメントとリワードで収益を得る場合に利用できます。エージェントネットワーク、エージェント調整、分散型エージェント、NOOKトークン、マイニングチャレンジ、ナレッジバンドル、エージェントレピュテーション、エージェントマーケットプレイス、ERC-2771メタトランザクション、Prepare-Sign-Relay、AgentFactory、またはNookplotが言及された場合にトリガーされます。
web3-polymarket
Polygon上でのPolymarket予測市場取引統合です。認証機能(L1 EIP-712、L2 HMAC-SHA256、ビルダーヘッダー)、注文発注(GTC/GTD/FOK/FAK、バッチ、ポストオンリー、ハートビート)、市場データ(Gamma API、Data API、オーダーブック、サブグラフ)、WebSocketストリーミング(市場・ユーザー・スポーツチャネル)、CTF操作(分割、統合、償却、ネガティブリスク)、ブリッジ機能(入金、出金、マルチチェーン)、およびガスレスリレイトランザクションに対応しています。AIエージェント、自動マーケットメーカー、予測市場UI、またはPolygraph上のPolymarketと統合するアプリケーション構築時に活用できます。
ethskills
Ethereum、EVM、またはブロックチェーン関連のリクエストに対応します。スマートコントラクト、dApps、ウォレット、DeFiプロトコルの構築、監査、デプロイ、インタラクションに適用されます。Solidityの開発、コントラクトアドレス、トークン規格(ERC-20、ERC-721、ERC-4626など)、Layer 2ネットワーク(Base、Arbitrum、Optimism、zkSync、Polygon)、Uniswap、Aave、Curveなどのプロトコルとの統合をカバーします。ガスコスト、コントラクトのデシマル設定、オラクルセキュリティ、リエントランシー、MEV、ブリッジング、ウォレット管理、オンチェーンデータの取得、本番環境へのデプロイ、プロトコル進化(EIPライフサイクル、フォーク追跡、今後の変更予定)といったトピックを含みます。
xxyy-trade
このスキルは、ユーザーが「トークン購入」「トークン売却」「トークンスワップ」「暗号資産取引」「取引ステータス確認」「トランザクション照会」「トークンスキャン」「フィード」「チェーン監視」「トークン照会」「トークン詳細」「トークン安全性確認」「ウォレット一覧表示」「マイウォレット」「AIスキャン」「自動スキャン」「ツイートスキャン」「オンボーディング」「IP確認」「IPホワイトリスト」「トークン発行」「自動売却」「損切り」「利益確定」「トレーリングストップ」「保有者」「トップホルダー」「KOLホルダー」などをリクエストした場合、またはSolana/ETH/BSC/BaseチェーンでXXYYを経由した取引について言及した場合に使用します。XXYY Open APIを通じてオンチェーン取引とデータ照会を実現します。