mcpField
C
content-collector

content-collector

github.com/vigorx777生産性24254 回インストール30 週間前に更新
リポジトリ

content-collector について

content-collectorは、ソーシャルメディアのコンテンツを収集してFeishu Bitableに保存するスキルです。プラットフォームごとに抽出方法を選び、重複確認、要約とタグ生成、スクリプトによる原文の保存を行います。

主な機能

  1. 01プラットフォーム判定と抽出スキルの振り分け
  2. 02URL重複キャッシュの確認と更新
  3. 03要約と定型構成の5つのタグ生成
  4. 04スクリプトによるレコード保存と原文アップロード
  5. 05OCRによるスクリーンショットからのURL抽出

活用シーン

  1. 01X/Twitterの投稿やWeChat記事の収集
  2. 02Webコンテンツを要約・分類してFeishuに保存
  3. 03スクリーンショットからURLを特定して収集

インストール

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

$npx skills add https://github.com/vigorx777/content-collector-skill --skill content-collector

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

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

.gitignore
.env.example
README.md
OPTIMIZATION.md
test_main_flow.py
references/
platforms.md
feishu_config.md
tagging_spec.md
scripts/
append_to_feishu.py
collect_and_save.sh
deduplicate.py
extract_content.py
generate_tags.py
ocr_image.py
save_to_bitable.py

詳細

コンテンツコレクター

ソーシャルメディアのコンテンツを自動収集 → AI で要約 → Feishu bitable に保存します。

クイックリファレンス

トリガーアクション
X/Twitter のリンクx-tweet-fetcher スキル
WeChat の記事web-content-fetcher(Scrapling)
その他のプラットフォームdefuddle → 失敗時は baoyu-url-to-markdown
スクリーンショットOCR → URL を抽出 → 収集

ワークフロー

Link/Screenshot → Platform Detect → Dedupe → Extract → Summarize → Save to Bitable
ステップ 1:プラットフォームの検出
python3 scripts/extract_content.py "<url>"

戻り値:platform_id、使用する skill、fallback_skills、CSS selectors。

プラットフォームの全マッピングについては、references/platforms.md を参照してください。

ステップ 2:重複排除
python3 scripts/deduplicate.py "<url>"           # Check if exists
python3 scripts/deduplicate.py --add "<url>"     # Add to cache after saving
ステップ 3:コンテンツの抽出

ステップ 1 で返されたスキルを呼び出します。

  • X/Twitter:x-tweet-fetcher スキルを使用します
  • WeChat:web-content-fetcher スキル(Scrapling)を使用します
  • その他:defuddle スキルを使用します
ステップ 4:AI による要約+独立したタグ生成(v2.0)

2026-03-21 更新:独立生成方式を採用し、過去のタグプールへの依存をなくしました。

基本原則:

  • 独立生成:現在の記事の内容だけに基づいてタグを生成し、過去のタグは参照しません
  • 固定構成:対象(2)+シーン(1)+種類(1)+手法(1)=5 個のタグ
  • 形式規則:英語は小文字とハイフンで連結し、中国語は簡潔なフレーズにします

4.1 記事の内容を抽出

ステップ 3 で取得した記事の内容(タイトル、本文、出典など)を使用します。


4.2 モデルを呼び出して 5 個のタグを生成

プロンプトテンプレート:

请阅读以下内容,并严格按照"对象、场景、类型、方法"四类标签体系输出 5 个标签。

【标签体系】
- 对象(2个):内容涉及的核心主体/技术/工具,如 openclaude、agent、mcp、prompt、浏览器自动化、记忆系统、量化交易、学习资源、实战案例、产品思考
- 场景(1个):内容应用的实际场景/用途,如 投资分析、自动化测试、知识管理、代码生成
- 类型(1个):内容的表现形式,如 技术教程、实战案例、产品分析、工具推荐、观点分享
- 方法(1个):内容涉及的方法论/技巧,如 工作流、评测、prompt优化、架构设计

【规则】
1. 对象 2 个,场景 1 个,类型 1 个,方法 1 个,共 5 个
2. 不参考历史标签,只根据当前文章内容生成
3. 英文标签小写,多个单词用 `-` 连接(如 claude-code)
4. 中文标签使用简洁固定短语(如 投资分析、技术教程)
5. 不输出空泛标签,如 AI、工具、技术、效率
6. 只输出 JSON,不输出解释

【输出格式】
{
  "tags": {
    "对象": ["标签1", "标签2"],
    "场景": ["标签3"],
    "类型": ["标签4"],
    "方法": ["标签5"]
  }
}

【内容】
{文章内容}

4.3 タグの正規化

モデルの出力したタグを正規化します。

def normalize_tag(tag):
    # 1. 去掉首尾空格
    tag = tag.strip()
    
    # 2. 英文转小写
    tag = tag.lower()
    
    # 3. 英文多个单词用 `-` 连接
    # 如 "Claude Code" -> "claude-code"
    if ' ' in tag and tag.replace(' ', '').isalpha():
        tag = '-'.join(tag.split())
    
    # 4. 去重(同一类别内)
    return tag

4.4 タグの検証

正規化したタグの構成を検証します。

def validate_tags(tags):
    """
    校验规则:
    - 对象恰好 2 个
    - 场景恰好 1 个
    - 类型恰好 1 个
    - 方法恰好 1 个
    - 总数恰好 5 个
    - 标签无重复(跨类别也检查)
    """
    errors = []
    
    # 检查各类别数量
    if len(tags.get("对象", [])) != 2:
        errors.append(f"对象需要 2 个,当前 {len(tags.get('对象', []))} 个")
    if len(tags.get("场景", [])) != 1:
        errors.append(f"场景需要 1 个,当前 {len(tags.get('场景', []))} 个")
    if len(tags.get("类型", [])) != 1:
        errors.append(f"类型需要 1 个,当前 {len(tags.get('类型', []))} 个")
    if len(tags.get("方法", [])) != 1:
        errors.append(f"方法需要 1 个,当前 {len(tags.get('方法', []))} 个")
    
    # 检查总数
    total = sum(len(v) for v in tags.values())
    if total != 5:
        errors.append(f"标签总数需要 5 个,当前 {total} 个")
    
    # 检查重复(跨类别)
    all_tags = []
    for v in tags.values():
        all_tags.extend(v)
    if len(all_tags) != len(set(all_tags)):
        errors.append("存在重复标签")
    
    return errors

再試行の仕組み:検証に失敗した場合、モデルは 1 回だけ再試行できます。


4.5 Feishu への書き込み

最終的な 5 個のタグを Feishu の多次元テーブルに書き込みます(文字列配列にフラット化)。

feishu_bitable_app_table_record(
  action="create",
  app_token="ND8ObCuSya5Dv3sREZYc03Ilngh",
  table_id="tblaHDM5kjtikIl9",
  fields={
    "标签": ["openclaude", "agent", "投资分析", "实战案例", "工作流"]
  }
)

全体の流れ(v2.0)
1. 提取文章内容(Step 3)
      ↓
2. 调用模型生成 5 个标签(固定结构)
      ↓
3. 规范化标签(小写、去空格、连字符)
      ↓
4. 校验标签结构(对象2 + 场景1 + 类型1 + 方法1)
      ↓
5. 写入飞书

4.6 タグ体系の参考情報(モデルの参考用のみ。マッチングには使用しません)
カテゴリタグの例
対象openclaude, agent, mcp, prompt, ブラウザー自動化, メモリシステム, クオンツ取引, claude-code, ワークフロー, 評価
シーン投資分析, 自動テスト, ナレッジ管理, コード生成, データ処理, 対話システム, コンテンツ作成
種類技術チュートリアル, 実践事例, 製品分析, ツールのおすすめ, 意見の共有, 業界動向
手法ワークフロー, 評価, prompt の最適化, アーキテクチャ設計, パフォーマンス最適化, セキュリティ強化

注意:この方式では、過去のタグプールは使用せず、あいまいマッチング、意味的に近いタグとのマッチング、旧タグへの紐付けも行いません。

  • 数量 ≤ 5
  • 既存プール内のタグを使用しているか、自動作成済みである
ステップ 5:Feishu Bitable に保存

必須フィールド:

  • 标题 - 記事のタイトル
  • 来源 - プラットフォーム(X/Twitter、WeChat 公式アカウントなど)
  • 分类 - コンテンツのカテゴリ(🔧ツールのおすすめ/📖技術チュートリアル/🛠️実践事例/💡製品アイデア)
  • 摘要内容 - AI が生成したコンテンツの要約
  • 原文链接 - 元の URL(URL 型)
  • 原文文件 - Feishu クラウドストレージのファイルリンク(URL 型)
  • 标签 - 5 個のタグの配列

全体の流れ(v2.2 - スクリプトの使用を必須化):

⚠️ 重要:書き込みには必ず save_to_bitable.py スクリプトを使用してください。feishu_bitable_app_table_record を直接呼び出すことは禁止です。

  1. プラットフォーム固有のスキル(x-tweet-fetcher、web-content-fetcher など)を使用してコンテンツを抽出します。

  2. 要約を生成します - AI でコンテンツを要約します。

  3. タグを生成します - 5 個のタグ(対象 2 個+シーン 1 個+種類 1 個+手法 1 個)。

  4. ローカルの .md ファイルとして保存します - 全文を /tmp/content.md に保持します。

  5. スクリプトを必ず使用して書き込みます - ツールを直接呼び出すことは禁止です。

    python3 scripts/save_to_bitable.py \
        --title "文章标题" \
        --source "X/Twitter" \
        --category "🛠️实战案例" \
        --url "https://x.com/i/status/..." \
        --content-file /tmp/content.md
    

    スクリプトが自動で実行する処理:

    • ファイルを Feishu クラウドストレージにアップロードします
    • 実際の file_token を取得します
    • 「原文文件」フィールドに書き込みます(アップロード成功時のみ)
    • 「原文链接」フィールドに書き込みます
    • レコード ID を返します
  6. 重複排除キャッシュを更新

    python3 scripts/deduplicate.py --add "<url>"
    

🚫 禁止事項:

  • 「原文文件」への書き込みに feishu_bitable_app_table_record を直接呼び出すことは禁止です
  • プレースホルダー URL(http://查看完整内容、http://推文链接 など)の使用は禁止です
  • ファイルをアップロードしていない状態で、ファイルリンクがあるものと見なすことは禁止です

✅ 必須チェック:

  • スクリプトがファイルのアップロード状態を検証します
  • upload_success=True の場合のみ、「原文文件」に書き込みます
  • アップロードに失敗するとエラーが報告され、偽のデータは書き込まれません

重要:必ず 原文链接(元の URL)と 原文文件(Feishu Drive のバックアップ)の両方を保存してください。これにより、元のリンクが利用できなくなった場合でも、コンテンツにアクセスできます。

変更履歴 v2.2(2026-03-31):

  • ✅ スクリプトの使用を必須化:書き込みには必ず save_to_bitable.py を使用し、feishu_bitable_app_table_record の直接呼び出しは禁止です
  • ✅ URL 形式の検証:http://查看完整内容 などのプレースホルダーを自動的にブロックします
  • ✅ アップロードの検証:実際にアップロードが成功した場合のみ、「原文文件」に書き込みます

変更履歴 v2.1(2026-03-29):

  • ✅ 修正:アップロード失敗時に偽の URL が書き込まれないようにし、原文文件 フィールドに実在するファイルのみが設定されるようにしました
  • ✅ 追加:アップロード状態の検証を追加しました。失敗時にはエラーログを記録し、プレースホルダーは書き込みません
  • ✅ 改善:フィールドへの書き込み条件を厳格化し、テストデータや偽のリンクがテーブルに入るのを防ぎます

変更履歴 v2.0(2026-03-29):

  • ✅ 修正:save_to_bitable.py はレコード作成前にファイルを Feishu Drive にアップロードするようになりました
  • ✅ 追加:upload_file_to_feishu() 関数を追加し、適切な multipart/form-data を使用したファイルのアップロードに対応しました
  • ✅ 変更:レコードにはインラインコンテンツの代わりに、クラウドストレージの URL を含む 原文文件 フィールドが設定されるようになりました
  • ⚠️ 注意:以前のバージョンではアップロード処理が抜けており、その結果、原文文件 フィールドが空になっていました

Bitable の設定:references/feishu_config.md を参照するか、環境変数を使用してください。

  • FEISHU_BITABLE_APP_TOKEN
  • FEISHU_BITABLE_TABLE_ID

スクリプト

スクリプト用途
scripts/extract_content.pyプラットフォームの検出とスキルへの振り分け
scripts/deduplicate.pyURL の重複排除(キャッシュ+ドキュメントの確認)
scripts/append_to_feishu.pyFeishu ドキュメント用にコンテンツをフォーマット(バックアップ)
scripts/ocr_image.pyスクリーンショットの OCR(任意)

依存関係

必須スキル
  • feishu-doc / feishu-bitable - Feishu の読み書き
  • defuddle - 汎用的なウェブ抽出
プラットフォーム固有(必要に応じてインストール)
  • x-tweet-fetcher - X/Twitter
  • web-content-fetcher - WeChat(Scrapling)
  • baoyu-url-to-markdown - フォールバック
任意
  • pytesseract + tesseract-ocr - ローカル OCR

設定

環境変数で設定するか、references/feishu_config.md を参照してください。

export FEISHU_BITABLE_APP_TOKEN="your_app_token"
export FEISHU_BITABLE_TABLE_ID="your_table_id"

参考資料

  • references/platforms.md - プラットフォームの完全なマッピングとセレクター
  • references/feishu_config.md - Feishu bitable の設定
  • references/tagging_spec.md - ⚠️ 使用停止済み(Step 4 v2.0 を参照)

コメント