content-collector について
content-collectorは、ソーシャルメディアのコンテンツを収集してFeishu Bitableに保存するスキルです。プラットフォームごとに抽出方法を選び、重複確認、要約とタグ生成、スクリプトによる原文の保存を行います。
主な機能
- 01プラットフォーム判定と抽出スキルの振り分け
- 02URL重複キャッシュの確認と更新
- 03要約と定型構成の5つのタグ生成
- 04スクリプトによるレコード保存と原文アップロード
- 05OCRによるスクリーンショットからのURL抽出
活用シーン
- 01X/Twitterの投稿やWeChat記事の収集
- 02Webコンテンツを要約・分類してFeishuに保存
- 03スクリーンショットからURLを特定して収集
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ vigorx777/ content-collector-skill --skill content-collectorインストール後、Claude Code で/content-collectorを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
.gitignore.env.exampleREADME.mdOPTIMIZATION.mdtest_main_flow.pyreferences/platforms.mdfeishu_config.mdtagging_spec.mdscripts/append_to_feishu.pycollect_and_save.shdeduplicate.pyextract_content.pygenerate_tags.pyocr_image.pysave_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を直接呼び出すことは禁止です。
-
プラットフォーム固有のスキル(x-tweet-fetcher、web-content-fetcher など)を使用してコンテンツを抽出します。
-
要約を生成します - AI でコンテンツを要約します。
-
タグを生成します - 5 個のタグ(対象 2 個+シーン 1 個+種類 1 個+手法 1 個)。
-
ローカルの
.mdファイルとして保存します - 全文を/tmp/content.mdに保持します。 -
スクリプトを必ず使用して書き込みます - ツールを直接呼び出すことは禁止です。
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 を返します
-
重複排除キャッシュを更新
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_TOKENFEISHU_BITABLE_TABLE_ID
スクリプト
| スクリプト | 用途 |
|---|---|
scripts/extract_content.py | プラットフォームの検出とスキルへの振り分け |
scripts/deduplicate.py | URL の重複排除(キャッシュ+ドキュメントの確認) |
scripts/append_to_feishu.py | Feishu ドキュメント用にコンテンツをフォーマット(バックアップ) |
scripts/ocr_image.py | スクリーンショットの OCR(任意) |
依存関係
必須スキル
feishu-doc/feishu-bitable- Feishu の読み書きdefuddle- 汎用的なウェブ抽出
プラットフォーム固有(必要に応じてインストール)
x-tweet-fetcher- X/Twitterweb-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 を参照)