mcpField
B
baoyu-danger-x-to-markdown

baoyu-danger-x-to-markdown

github.com/guanyangドキュメント984204 回インストール1 日前に更新
リポジトリ

baoyu-danger-x-to-markdown について

X のポスト、スレッド、記事を Markdown に変換するスキルです。X のコンテンツを保存・整理する用途向けで、リバースエンジニアリングされた X API の利用には事前の同意が必要です。メディアのダウンロード設定にも対応します。

主な機能

  1. 01ポストとスレッドの Markdown 変換
  2. 02X Articles の本文抽出
  3. 03YAML front matter の追加
  4. 04設定に応じたメディアのダウンロード
  5. 05JSON 出力

活用シーン

  1. 01ポストやスレッドの Markdown 保存
  2. 02X Articles の内容抽出
  3. 03メディアをローカル保存してリンクを更新

インストール

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

$npx skills add https://github.com/guanyang/open-agent-hub --skill baoyu-danger-x-to-markdown

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

同梱ファイル

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

references/config/
first-time-setup.md
scripts/
bun.lock
constants.ts
cookie-file.ts
cookies.ts
graphql.ts
http.ts
main.ts
markdown.test.ts
markdown.ts
media-localizer.ts
package.json
paths.ts
referenced-tweets.ts
thread-markdown.ts
thread.ts
tweet-article.ts
tweet-to-markdown.ts
types.ts

詳細

X から Markdown へ

X のコンテンツを Markdown に変換します:

  • ツイート/スレッド → YAML フロントマター付きの Markdown
  • X の記事 → 全文を抽出

ユーザー入力ツール

このスキルがユーザーに質問する場合は、次の優先順位でツールを選択してください。

  1. 組み込みのユーザー入力ツールを優先します。現在のエージェントランタイムが提供する AskUserQuestion、request_user_input、clarify、ask_user など、または同等のツールを使用します。
  2. 代替手段:該当するツールがない場合は、番号付きのプレーンテキストメッセージを出力し、各質問について選択した番号または回答を返信するようユーザーに依頼します。
  3. まとめて質問:1 回の呼び出しで複数の質問に対応できる場合は、該当する質問をすべてまとめて呼び出します。質問が 1 つずつしかできない場合は、優先順位に沿って順番に質問します。

以下の AskUserQuestion の例は参考です。他のランタイムでは、ローカル環境に対応する同等のものを使用してください。

スクリプトディレクトリ

スクリプトは scripts/ サブディレクトリにあります。

パスの解決方法:

  1. {baseDir} = この SKILL.md があるディレクトリ
  2. スクリプトのパス = {baseDir}/scripts/main.ts
  3. ${BUN_X} ランタイムを解決します:bun がインストールされている場合は bun、npx が利用できる場合は npx -y bun、それ以外の場合は bun のインストールを提案します

同意の要件

変換を行う前に、同意を確認して取得してください。

同意のフロー

ステップ 1:同意ファイルを確認します

# macOS
cat ~/Library/Application\ Support/baoyu-skills/x-to-markdown/consent.json

# Linux
cat ~/.local/share/baoyu-skills/x-to-markdown/consent.json

ステップ 2:accepted: true かつ disclaimerVersion: "1.0" の場合 → 警告を表示して続行します:

Warning: Using reverse-engineered X API. Accepted on: <acceptedAt>

ステップ 3:ファイルがない場合、またはバージョンが一致しない場合 → 免責事項を表示します:

DISCLAIMER

This tool uses a reverse-engineered X API, NOT official.

Risks:
- May break if X changes API
- No guarantees or support
- Possible account restrictions
- Use at your own risk

Accept terms and continue?

AskUserQuestion を使用し、選択肢「はい、同意します」 | 「いいえ、同意しません」を提示します。

ステップ 4:同意した場合 → 同意ファイルを作成します:

{
  "version": 1,
  "accepted": true,
  "acceptedAt": "<ISO timestamp>",
  "disclaimerVersion": "1.0"
}

ステップ 5:同意しない場合 → 「User declined. Exiting.」を出力して終了します。

設定(EXTEND.md)

優先順位に従って EXTEND.md を確認します。最初に見つかったものを使用します。

優先順位パススコープ
1.baoyu-skills/baoyu-danger-x-to-markdown/EXTEND.mdプロジェクト
2${XDG_CONFIG_HOME:-$HOME/.config}/baoyu-skills/baoyu-danger-x-to-markdown/EXTEND.mdXDG
3$HOME/.baoyu-skills/baoyu-danger-x-to-markdown/EXTEND.mdユーザーホーム
結果アクション
見つかった読み込み、解析し、設定を適用します
見つからない必ず 初回セットアップを実行します(下記参照)。デフォルトを黙って作成してはいけません

EXTEND.md で設定できる項目:メディアをデフォルトでダウンロードするか、デフォルトの出力ディレクトリ。

初回セットアップ(ブロッキング)

重要:EXTEND.md が見つからない場合は、EXTEND.md を作成する前に、必ず AskUserQuestion を使用してユーザーの設定を確認してください。質問せずにデフォルト設定で EXTEND.md を作成してはいけません。これはブロッキング処理です。セットアップが完了するまで、変換を進めてはいけません。

すべての質問を 1 回の呼び出しにまとめて、AskUserQuestion を使用してください。

質問 1 — ヘッダー:「メディア」、質問:「ツイート内の画像や動画をどのように扱いますか?」

  • 「毎回確認する(推奨)」— Markdown の保存後に、メディアをダウンロードするか確認します
  • 「常にダウンロードする」— メディアを常にローカルの imgs/ および videos/ ディレクトリにダウンロードします
  • 「ダウンロードしない」— Markdown 内に元のリモート URL を残します

質問 2 — ヘッダー:「出力」、質問:「デフォルトの出力ディレクトリはどこですか?」

  • 「x-to-markdown(推奨)」— ./x-to-markdown/{username}/{tweet-id}.md に保存します
  • (ユーザーは「その他」を選択して、任意のパスを入力できます)

質問 3 — ヘッダー:「保存先」、質問:「設定をどこに保存しますか?」

  • 「ユーザー(推奨)」— ~/.baoyu-skills/(すべてのプロジェクト)
  • 「プロジェクト」— .baoyu-skills/(このプロジェクトのみ)

ユーザーの回答後、選択された場所に EXTEND.md を作成し、「設定を [path] に保存しました」と確認してから続行します。

詳細については、references/config/first-time-setup.md を参照してください。

サポートされているキー
キーデフォルト値説明
download_mediaaskask / 1 / 0ask = 毎回確認、1 = 常にダウンロード、0 = ダウンロードしない
default_output_dir空パスまたは空デフォルトの出力ディレクトリ(空の場合は ./x-to-markdown/)

値の優先順位:

  1. CLI 引数(--download-media、-o)
  2. EXTEND.md
  3. スキルのデフォルト値

使い方

${BUN_X} {baseDir}/scripts/main.ts <url>
${BUN_X} {baseDir}/scripts/main.ts <url> -o output.md
${BUN_X} {baseDir}/scripts/main.ts <url> --download-media
${BUN_X} {baseDir}/scripts/main.ts <url> --json

オプション

オプション説明
<url>ツイートまたは記事の URL
-o <path>出力先パス
--jsonJSON 出力
--download-media画像・動画アセットをローカルの imgs/ と videos/ にダウンロードし、Markdown のリンクをローカルの相対パスに書き換えます
--loginCookie のみを更新します

サポートされている URL

  • https://x.com/<user>/status/<id>
  • https://twitter.com/<user>/status/<id>
  • https://x.com/i/article/<id>

出力

---
url: "https://x.com/user/status/123"
author: "Name (@user)"
tweetCount: 3
coverImage: "https://pbs.twimg.com/media/example.jpg"
---

Content...

ファイル構成:x-to-markdown/{username}/{tweet-id}/{content-slug}.md

--download-media が有効な場合:

  • 画像は Markdown ファイルと同じ場所の imgs/ に保存されます
  • 動画は Markdown ファイルと同じ場所の videos/ に保存されます
  • Markdown のメディアリンクはローカルの相対パスに書き換えられます

メディアのダウンロードワークフロー

EXTEND.md の download_media 設定に基づきます。

設定動作
1(常に)--download-media フラグを付けてスクリプトを実行します
0(しない)--download-media フラグを付けずにスクリプトを実行します
ask(デフォルト)以下の毎回確認するフローに従います
毎回確認するフロー
  1. --download-media を付けずにスクリプトを実行 → Markdown を保存します
  2. 保存した Markdown でリモートメディア URL(画像・動画リンク内の https://)を確認します
  3. リモートメディアが見つからない場合 → 完了です。確認は不要です
  4. リモートメディアが見つかった場合 → AskUserQuestion を使用します:
    • ヘッダー:"Media"、質問:"N images/videos to local files?"
    • "Yes" — ローカルディレクトリにダウンロードします
    • "No" — リモート URL をそのまま使用します
  5. ユーザーが確認した場合 → --download-media を付けてスクリプトを再度実行します(Markdown をローカルパスに書き換えます)

認証

  1. 環境変数(推奨):X_AUTH_TOKEN、X_CT0
  2. Chrome ログイン(代替手段):Chrome を自動で開き、Cookie をローカルにキャッシュします

拡張機能のサポート

EXTEND.md でカスタム設定が可能です。パスとサポートされているオプションについては、設定セクションを参照してください。

コメント