コンテンツインポート

このページ

EmDash は WordPress およびその他のプラットフォームからコンテンツをインポートします。各インポートソースはプラットフォームを検出し、コンテンツを分析してサイトに取得します。

インポートソース

ソース IDプラットフォームプローブOAuthフルインポート
wxrWordPress エクスポートファイルいいえいいえはい
wordpress-comWordPress.comはいはいはい
wordpress-restセルフホスト WordPressはいいいえプローブのみ

WXR ファイルアップロード

最も完全なインポート方法。WordPress eXtended RSS (WXR) エクスポートファイルを管理ダッシュボードに直接アップロードします。

機能:

  • すべての投稿タイプ(カスタムを含む)
  • すべてのメタフィールド
  • 下書きと非公開投稿
  • 完全な分類階層
  • メディア添付ファイルのメタデータ

WXR ファイルの取得方法:

  1. WordPress 管理画面で、ツール → エクスポートに移動
  2. すべてのコンテンツまたは特定の投稿タイプを選択
  3. エクスポートファイルをダウンロードをクリック
  4. .xml ファイルを EmDash にアップロード

WordPress.com OAuth

WordPress.com にホストされているサイトの場合、OAuth 経由で接続して手動ファイルエクスポートなしでインポートします。

  1. WordPress.com サイトの URL を入力
  2. WordPress.com で接続をクリック
  3. WordPress.com ポップアップで EmDash を承認
  4. インポートするコンテンツを選択

含まれるもの:

  • 公開済みおよび下書きコンテンツ
  • 非公開投稿(承認が必要)
  • API 経由のメディアファイル
  • REST API に公開されたカスタムフィールド

WordPress REST API プローブ

URL を入力すると、EmDash はサイトをプローブして WordPress を検出し、利用可能なコンテンツを表示します:

検出: WordPress 6.4
├── 投稿: 127(公開済み)
├── ページ: 12(公開済み)
└── メディア: 89 ファイル

注意: 下書きと非公開コンテンツには認証
または完全な WXR エクスポートが必要です。

REST プローブは情報提供のみです。完全なインポートには、WXR ファイルのアップロードまたは OAuth 経由の接続(WordPress.com の場合)を提案します。

インポートフロー

すべてのソースは同じフローに従います:

┌─────────────┐     ┌─────────────┐     ┌─────────────┐     ┌─────────────┐
│     接続    │────▶│     分析    │────▶│     準備    │────▶│     実行    │
│  (プローブ/ │     │  (スキーマ  │     │  (作成      │     │  (インポート│
│ アップロード)│     │   チェック) │     │  スキーマ)  │     │  コンテンツ)│
└─────────────┘     └─────────────┘     └─────────────┘     └─────────────┘

ステップ 1: 接続

URL を入力してプローブするか、ファイルを直接アップロードします。

URL プローブは、登録されているすべてのソースを並列で実行します。最も信頼度の高い一致が、提案される次のアクションを決定します:

  • WordPress.com サイト → OAuth 接続を提供
  • セルフホスト WordPress → エクスポート手順を表示
  • 不明 → ファイルアップロードを提案

ステップ 2: 分析

ソースはコンテンツを解析し、スキーマの互換性をチェックします:

投稿タイプ:
├── post (127) → posts [新しいコレクション]
├── page (12)  → pages [既存、互換性あり]
├── product (45) → products [3 フィールドを追加]
└── revision (234) → [スキップ - 内部タイプ]

必要なスキーマ変更:
├── コレクションを作成: posts
├── pages にフィールドを追加: featured_image
└── コレクションを作成: products

各投稿タイプはそのステータスを表示します:

ステータス意味
準備完了コレクションが存在し、フィールドが互換性あり
新しいコレクション自動的に作成されます
フィールドを追加コレクションが存在し、欠けているフィールドが追加されます
互換性なしフィールドタイプの競合(手動修正が必要)

ステップ 3: スキーマの準備

スキーマを作成してインポートをクリックして:

  1. 新しいコレクションを作成
  2. 正しい列タイプで欠けているフィールドを追加
  3. インデックス付きのコンテンツテーブルを設定

ステップ 4: インポートの実行

コンテンツは順次インポートされます:

  • Gutenberg/HTML が Portable Text に変換
  • WordPress ステータスが EmDash ステータスにマッピング
  • WordPress 作成者が所有権(authorId)とプレゼンテーション署名にマッピング
  • 分類が作成されリンク
  • 再利用可能ブロック(wp_block)がセクションとしてインポート
  • 進行状況がリアルタイムで表示

作成者インポートの動作:

  • 作成者マッピングが EmDash ユーザーを指している場合、所有権はそのユーザーに設定され、同じユーザーのリンクされた署名が作成/再利用されます。
  • ユーザーマッピングがない場合、WordPress 作成者 ID からゲスト署名が作成/再利用されます。
  • インポートされたエントリは順序付き署名クレジットを取得し、最初のクレジットが primaryBylineId として設定されます。

ステップ 5: メディアインポート(オプション)

コンテンツの後、オプションでメディアをインポート:

  1. 分析 — タイプ別に添付ファイル数を表示

    見つかったメディア:
    ├── 画像: 75 ファイル
    ├── ビデオ: 10 ファイル
    └── その他: 4 ファイル
  2. ダウンロード — WordPress URL からストリーミングし、進行状況を表示

    メディアをインポート中...
    ├── 45 / 89 (50%)
    ├── 現在: vacation-photo.jpg
    └── ステータス: アップロード中
  3. URL の書き換え — コンテンツが新しい URL に自動的に更新

メディアインポートはコンテンツハッシュ(xxHash64)を使用して重複排除を行います。複数の投稿で使用される同じ画像は一度だけ保存されます。

API エンドポイント

インポートシステムは次のエンドポイントを公開します:

URL のプローブ

プローブリクエストで URL の背後にあるプラットフォームを検出:

POST /_emdash/api/import/probe
Content-Type: application/json

{ "url": "https://example.com" }

レスポンスには検出されたプラットフォームと提案されたアクションが含まれます。

WXR の分析

WXR ファイルをアップロードして投稿タイプとスキーマの互換性を分析:

POST /_emdash/api/import/wordpress/analyze
Content-Type: multipart/form-data

file: [WordPress export .xml]

レスポンスには投稿タイプ分析とスキーマの互換性が含まれます。

スキーマの準備

選択した投稿タイプのコレクションとフィールドを作成:

POST /_emdash/api/import/wordpress/prepare
Content-Type: application/json

{
  "postTypes": [
    { "name": "post", "collection": "posts", "enabled": true }
  ]
}

インポートの実行

マッピングされたコレクションにコンテンツをインポート:

POST /_emdash/api/import/wordpress/execute
Content-Type: multipart/form-data

file: [WordPress export .xml]
config: { "postTypeMappings": { "post": { "collection": "posts" } } }

メディアのインポート

インポートで参照されるメディア添付ファイルをダウンロードして保存:

POST /_emdash/api/import/wordpress/media
Content-Type: application/json

{
  "attachments": [{ "id": 123, "url": "https://..." }],
  "stream": true
}

レスポンスはダウンロードとアップロード中に NDJSON 進行状況更新をストリーミングします。

URL の書き換え

インポートされたコンテンツ内の古いメディア URL を保存された同等物に置き換え:

POST /_emdash/api/import/wordpress/rewrite-urls
Content-Type: application/json

{
  "urlMap": { "https://old.com/image.jpg": "/_emdash/media/abc123" }
}

エラー処理

回復可能なエラー

  • ネットワークタイムアウト — バックオフで再試行
  • 単一アイテムの解析失敗 — ログに記録、スキップ、インポート続行
  • メディアダウンロード失敗 — 手動処理用にマーク

致命的なエラー

  • 無効なファイル形式 — エラーメッセージでインポート停止
  • データベース接続の喪失 — インポート一時停止、再開を許可
  • ストレージクォータ超過 — インポート停止、使用状況を表示

エラーレポート

インポート完了後、EmDash は成功、調整、失敗の概要を表示します:

インポート完了

✓ 125 件の投稿をインポート
✓ 12 件のページをインポート
✓ 85 件のメディア参照を記録

⚠ 2 件のアイテムに警告:
  - 投稿「特殊文字 ñ」 - タイトルエンコーディング修正済み
  - ページ「About」 - 重複スラッグを「about-1」に変更

✗ 1 件のアイテムが失敗:
  - 投稿 ID 456 - コンテンツ解析エラー(下書きとして保存)

失敗したアイテムは下書きとして保存され、元のコンテンツはレビュー用に _importError に保存されます。

カスタムソース

組み込みソースがカバーしていないプラットフォームからインポートするには、ImportSource インターフェースを実装し、統合に登録します:

import { mySource } from "./src/import/custom-source";

export default defineConfig({
	integrations: [
		emdash({
			import: { sources: [mySource] },
		}),
	],
});

インターフェース(probeanalyzefetchContent)および正規化された出力形状は、アーキテクチャ(内部)に文書化されています。

次のステップ