コンテンツ制作 · dontbesilent2025/dbskill

dbs-video-extract

抖音(Douyin)、小紅書(RED)、WeChat チャンネルなどのショート動画リンクや共有テキストを受け取り、投稿・アカウントデータを取得して音声書き起こしを抽出し、投稿者およびタイトルごとに Markdown としてアーカイブします。ショート動画を完全に解析してデータや文字起こしを取得したいユーザー向けです。実行前に TikHub と軽抖(Qingdou)の利用認証情報を確認し、不足している場合は初心者にも分かりやすい手順でサービスの購入と安全な設定を案内します。

L5 厳格管理 · 隔離環境と厳格な監査V2 人間監査済認証情報/セッションコマンド実行ネットワーク通信ファイル書き込みDual-pass Audit
Author dontbesilent2025GitHub dontbesilent2025/dbskill ↗Stars 10121License CC BY-NC 4.0(非商业授权):仓库根 LICENSE 为 Attribution-NonCommercial 4.0 International (CC BY-NC 4.0),Copyright (c) 2026 dontbesilent;GitHub API license.spdx_id = NOASSERTION (CC BY-NC 4.0 非 SPDX 标准文本,GitHub 无法自动识别),不得用于商业用途Commit 8b8e33f1ec
管理レベルは Skill の能力と推奨統制措置を示すものであり、品質や安全性の認証、利用可否の判定ではありません。使用の可否はユーザーおよび管理者が決定します。Agent 環境によって制約が異なるため、自動保護を仮定しないでください。第三者製 Skill の著作権は原著作者に帰属し、利用リスクは利用者が負います。

1仕組みと動作原理

あらゆる抽出処理の前に読み取り専用の認証情報事前チェックを実行し、credential_state に基づいて現在利用可能な機能のみに絞り込みます。

skills/dbs-video-extract/SKILL.md
python3 scripts/extract_video.py --check-keys
4つの状態(complete / data_only / transcript_only / unavailable)。SKILL.md の規定により、Key が1つだけ存在する場合でも続行を許可しますが、今回どの部分のみ対応可能かを明示する必要があります。

2つの外部サービスで役割を明確に分担:TikHub が投稿/アカウントの構造化データを担当し、軽抖が音声書き起こしを担当。プラットフォームの対応範囲はハードコードされています。

skills/dbs-video-extract/SKILL.md
- 当前 TikHub 专用数据解析支持抖音、小红书和微信视频号;其他轻抖可识别的平台仍可只执行文字稿提取。
SKILL.md のデータ境界セクションの規定:Douyin は App V3 を優先し、有効なデータがない場合のみ Web へ1回フォールバック;小紅書は App V2 動画ノート詳細を使用;WeChat チャンネルは Channels V2 投稿詳細を使用。

TikHub 側は MCP(Streamable HTTP)を採用し、プロトコルバージョンと3つのプラットフォームエンドポイントはスクリプトの定数に記述されています。

skills/dbs-video-extract/scripts/tikhub_api.py
MCP_PROTOCOL_VERSION = "2024-11-05"
MCP_URLS は douyin/xiaohongshu/wechat を mcp.tikhub.io の対応パスにマッピング;REST のデフォルトは https://api.tikhub.dev。

軽抖側は「タスク送信 + ポーリングによる結果取得」の REST フローであり、タイムアウトとポーリング間隔の制御を備えています。

skills/dbs-video-extract/scripts/extract_video_transcript.py
url = f"{base_url.rstrip('/')}/web/api/getTaskResult?{query}"
commit_task で送信後、poll_task が batchStatus(0/1 処理中、2 終了)をポーリング;タイムアウトは --transcript-timeout(デフォルト 900 秒)で制御。

Key は4段階の優先順位で検索:環境変数 → ユーザー指定のローカルファイル → ~/.config/dbs/API_Keys.md → macOS キーチェーン。

skills/dbs-video-extract/scripts/extract_video_transcript.py
["security", "find-generic-password", "-s", KEYCHAIN_SERVICE, "-w"],
キーチェーンのサービス名は dbs-tikhub-api-key / dbs-qingdou-api-key;darwin かつ DBS_VIDEO_EXTRACT_DISABLE_KEYCHAIN=1 が未設定の場合にのみ試行。

付属の安全な設定スクリプトは getpass による非表示読み取り、0600 権限ファイルへの書き込み、アトミックな置換を行い、Key がコマンド、応答、ログに出力されないようにします。

skills/dbs-video-extract/scripts/configure_api_key.py
secret = getpass.getpass("使用凭证:").strip()
ディスク書き込みフロー:tempfile.mkstemp 一時ファイル → chmod 0600 → os.replace アトミック置換 → 対象ファイルを再度 chmod 0600。失敗時は一時ファイルを削除。

リクエスト失敗時のエラーメッセージは、スローする前に API Key を [REDACTED] に置換し、エラー経由で認証情報が応答へ漏洩するのを防止します。

skills/dbs-video-extract/scripts/tikhub_api.py
detail = detail.replace(api_key, "[REDACTED]")
軽抖スクリプトも同様に処理(extract_video_transcript.py 内で同様に置換)。

Base URL とエンドポイントパスに対して形式検証を実施(純粋な HTTPS ドメイン + 固定の /api/v1/ プレフィックスのみ許可)し、宛先の改ざんによる攻撃対象領域を最小化します。

skills/dbs-video-extract/scripts/tikhub_api.py
raise TikHubError("Base URL 必须是只有域名的 HTTPS 地址。")
normalize_api_path はドメイン、クエリ文字列、フラグメントを含むパスも拒否;これらはすべて「設定ミス防止」を目的とし、スクレイピング対策の回避ではありません。

アーカイブ規則とユーザー編集保護:{出力ディレクトリ}/{投稿者}/{タイトル}.md に書き出し、既存ファイルはデフォルトでスキップ、--overwrite 指定時のみ上書きします。

skills/dbs-video-extract/scripts/extract_video_transcript.py
path.write_text(render_markdown(item, title, author), encoding="utf-8")
SKILL.md に明記:「同一ソースが既に存在する場合は、ユーザーによる編集を保護するため、文字起こしの書き込みをデフォルトでスキップする」。

認証情報が不足している場合、技術用語を直接スローせず、「API Key の説明 → 機能選択 → 購入案内 → 固定免責事項の提示 → ローカル安全設定」という分かりやすいフローを進めます。

skills/dbs-video-extract/SKILL.md
> dbskill 是免费开源项目,与 TikHub、轻抖无隶属、合作或利益关系。充值由用户自主决定,相关交易、服务、争议及风险由用户自行承担;法律另有规定的除外,dbskill 不承担责任。
法的通知は「省略や改変をせず、そのまま提示する」ことが必須;購入リンクはコード定数 PURCHASE_URLS から取得し、現在不足しているサービスのみを表示。

一方の失敗で結果を破棄しない:片方が失敗しても他方を完了させ、JSON サマリーに partial_success を記録します。

skills/dbs-video-extract/SKILL.md
TikHub 或轻抖任一侧失败时继续完成另一侧,并在汇总中标记 `partial_success`。已经取得的结果不能因单侧失败而丢弃。
認証情報ステータス、TikHub データサマリー、文字起こしパスを同一の JSON サマリーに出力し、上位エージェントの意思決定を容易にします。

2コア機能

01共有テキストからコピーされたリンクの抽出とプラットフォーム判別(Douyin/小紅書/WeChat チャンネル)
02TikHub MCP データクエリ(投稿/アカウント)、--raw-data による生レスポンスの取得に対応
03軽抖の文字起こしタスクの送信とポーリング、リライトせず本文を忠実に保存
04投稿者/タイトルごとの Markdown アーカイブ、既存ファイルはデフォルトでスキップ(ユーザー編集の保護)
05段階的な認証情報ステータス管理(complete/data_only/transcript_only/unavailable)と片側フォールバック
06複数ソースからの認証情報解決(環境変数 / 指定ファイル / ~/.config/dbs/API_Keys.md / macOS キーチェーン)
07安全な設定スクリプト(非表示入力 + 0600 権限 + アトミック書き込み)
08課金と法的主旨の透明性:実行前に課金の可能性を通知、購入案内画面では免責事項を原文のまま強制表示
09部分成功への耐障害性と非破壊出力(メディアの自動ダウンロード/公開/Git コミットは行わない)

3外部依存関係

KindDependency / Endpoint
apiTikHub(作品/账号数据,MCP Streamable HTTP + REST)
api轻抖(语音文字稿提交与轮询)
clipython3(运行 4 个自带脚本;仅标准库)
clisecurity(macOS 钥匙串读取,仅 darwin 且未禁用时)
network购买/充值页(仅展示给用户人工操作,不由脚本访问)

4推奨統制措置と判定根拠

安全運用のための推奨統制措置
Agent 向け
隔離環境で実行、都度明示的な認可
管理者向け
厳格な認可、全量監査、コンプライアンス確認
判定根拠(ファイルパスと抜粋)
  • 本地凭据 / 浏览器配置: ユーザーのログイン Cookie/セッション/キーリングの読み取り: macOS キーチェーンサービス dbs-tikhub-api-key / dbs-qingdou-api-key(security find-generic-
  • scripts/: ローカルスクリプトまたはコマンドの実行: python3 scripts/extract_video.py --check-keys / --mode both|data|transcript
  • 网络端点: 外部ネットワークアクセスの宣言: TikHub:https://api.tikhub.dev / https://api.tikhub.io(REST)
  • 本地工作目录: ファイルの読み書きと成果物の出力: {出力ディレクトリ}/{投稿者}/{タイトル}.md(文字起こしアーカイブ;既存ファイルはデフォルトでスキップ、--overwrite 指定時のみ上書き)
監査ノート: 評価基準はすべて本スキルディレクトリ内のコードから直接検証可能です:同梱されている4つの Python スクリプトは「自身が宣言した用途のために認証情報/プライベートトークンを読み取る」挙動を持ちます——find_api_key は環境変数 TIKHUB_API_KEY/QINGDOU_API_KEY、TIKHUB_API_KEYS_FILE/QINGDOU_API_KEYS_FILE、~/.config/dbs/API_Keys.md、macOS キーチェーン dbs-tikhub-api-key/dbs-qingdou-api-key を順次読み取ります。また、ユーザーのリンクやテキストをサードパーティのバックエンドである TikHub(mcp.tikhub.io / api.tikhub.dev)および軽抖(www.qingdou.vip)に送信するため、課金が発生する可能性や素材が外部送信される可能性があり、同時にユーザー指定ディレクトリへ Markdown を書き込みます。バッチ4の先行事例($HASS_TOKEN を読み取る home-assistant、ai-image-generation/ai-video-generation などの生成系バックエンド = orange)と照らし合わせ、🟠 に分類されます。レッドラインには抵触しません:API のリバースエンジニアリング、クライアントの偽装、TLS/サンドボックスのダウングレード、プラットフォーム制限の回避、任意コードの実行はいずれも含まれていません。

5二重目の独立検証

  • [ok] 凭证四级来源与钥匙串调用真实存在 — tikhub_api.py / extract_video_transcript.py 中 find_api_key 依次读 env → 指定文件 → ~/.config/dbs/API_Keys.md → subprocess security;KEYCHAIN_SERVICE 分别为 dbs-tikhub-api-key、dbs-qingdou-api-key。
  • [ok] 凭证写入按安全实践(0600 + 原子替换) — configure_api_key.py:mkstemp → write → temporary.chmod(0o600) → os.replace → target.chmod(0o600),异常时 unlink 临时文件。
  • [ok] 错误信息脱敏(不泄漏 Key) — 两个客户端均含 detail.replace(api_key, "[REDACTED]"),且响应体截断(500/1000 字符)。
  • [ok] 外部端點清单无遗漏 — 全量 URL 抽取得到的运行时端點仅 TikHub(REST/MCP)与轻抖;其余为文档/购买页链接。
  • [ok] 无第三方 Python 包依赖 — 脚本 import 仅 json/logging/os/re/subprocess/sys/time/urllib/datetime/pathlib/typing/argparse/tempfile/getpass;目录内无 requirements.txt/setup.py/pyproject.toml。
  • [ok] 不绕过平台限制、不自动下载/发布 — SKILL.md 原文"公开、删除、私密、版权和可见范围限制以接口返回为准,不尝试绕过。"与"不自动下载媒体、发布内容、提交 Git 或推送。"
  • [ok] "已存在默认跳过"的写盘保护属实 — extract_video_transcript.py save_item 依据 overwrite 参数决定是否跳过;SKILL.md 与 agents/openai.yaml 表述一致。
  • [ok] 付费与法律提示为强制展示 — SKILL.md"必须先原样展示下面这条提示,不能省略或改写",法律提示文本与脚本 LEGAL_NOTICE 常量同源。

6結論

  • 「認証情報の不足」を第一級の考慮事項として処理:まず読み取り専用の事前チェックを行い、4つの状態に応じて機能を絞り込み、最後に購入・設定案内へ進み、Key 不足時は明確に停止。
  • 徹底された認証情報の衛生管理:getpass による非表示入力、0600 権限ファイル、アトミック置換、エラーメッセージ内の [REDACTED] 化、複数ソースからの解決、ログやコマンド引数への書き込み禁止の徹底。
  • 失敗時も結果を破棄しない:片側が失敗しても残りの処理を完遂して partial_success を記録、Douyin の App→Web フォールバックは1回のみ試行。
  • 標準ライブラリのみを使用しサードパーティ依存ゼロでサプライチェーンリスクを低減;エンドポイントとプロトコルバージョンを定数としてハードコードし、監査を容易化。
  • 透明性の高い実行結果:内部識別子(batchId など)を秘匿しつつ、認証情報ステータス、使用ツール、フォールバック有無、主要データ、文字起こしパス、課金有無を報告。
  • 最適な用途: Douyin、小紅書、WeChat チャンネルの共有リンクからデータや音声書き起こしを一括抽出し、投稿者+タイトルごとに検索可能な Markdown として整理したいコンテンツクリエイターやリサーチャーに最適。また、TikHub または軽抖のいずれか一方の認証情報のみを保持しており、利用可能な機能へダウングレードして運用したいユーザーにも適しています。
    不向きな用途: 認証情報を一切持たず外部サービスの購入も望まないユーザー(本スキルは「現在どちらのサービスも有効化されていないため…利用できません」と明示し、制限の回避は行いません);動画や画像などのメディアファイル自体のダウンロードが必要な用途(メディアの自動ダウンロードは明示的に非対応);プラットフォーム制限コンテンツの処理(非公開/削除済み/著作権制限等は API レスポンスに準拠し、バイパスしません);対話プロンプトに Key を直接貼り付ける運用(ローカル設定スクリプトの使用が必須)。
    Install Agent-Ready
    ① Verified Mirror 2026-09-15
    Option A · Direct DownloadDownload dbs-video-extract.tar.gz
    sha256: 3d8bb7e6cc40716a…
    Option B · Copy Guide for Agent
    install.json
    Agent はこの JSON ガイドから自動的にダウンロードして検証します。
    ② Upstream GitHub
    GitHub Repo ↗
    Pinned to commit 8b8e33f1ec.