mcpField
B
baoyu-danger-x-to-markdown

baoyu-danger-x-to-markdown

github.com/jimliuドキュメント27.0k28.1k 回インストール7 週間前に更新
リポジトリ

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

Xの投稿、スレッド、記事を、YAML front matter付きのMarkdownに変換するスキルです。メディアのローカル保存に対応し、リバースエンジニアリングされたX APIの利用前に同意を求めます。

主な機能

  1. 01投稿とスレッドのMarkdown変換
  2. 02X Articleの全文抽出
  3. 03YAML front matterでのメタデータ保存
  4. 04画像と動画の任意ダウンロード
  5. 05出力先とメディア設定の指定

活用シーン

  1. 01XのスレッドをMarkdownファイルに保存
  2. 02メタデータ付きX Articleのアーカイブ
  3. 03投稿メディアのローカルフォルダー保存

インストール

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

$npx skills add https://github.com/jimliu/baoyu-skills --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 でカスタム設定が可能です。パスとサポートされているオプションについては、設定セクションを参照してください。

コメント