EmDash는 WordPress 및 기타 플랫폼에서 콘텐츠를 가져옵니다. 각 가져오기 소스는 플랫폼을 감지하고 콘텐츠를 분석한 후 사이트로 가져옵니다.
가져오기 소스
| 소스 ID | 플랫폼 | 프로브 | OAuth | 전체 가져오기 |
|---|---|---|---|---|
wxr | WordPress 내보내기 파일 | 아니오 | 아니오 | 예 |
wordpress-com | WordPress.com | 예 | 예 | 예 |
wordpress-rest | 자체 호스팅 WordPress | 예 | 아니오 | 프로브만 |
WXR 파일 업로드
가장 완전한 가져오기 방법입니다. WordPress eXtended RSS (WXR) 내보내기 파일을 관리 대시보드에 직접 업로드합니다.
기능:
- 모든 게시물 유형(커스텀 포함)
- 모든 메타 필드
- 초안 및 비공개 게시물
- 전체 분류 계층
- 미디어 첨부파일 메타데이터
WXR 파일 얻는 방법:
- WordPress 관리자에서 도구 → 내보내기로 이동
- 모든 콘텐츠 또는 특정 게시물 유형 선택
- 내보내기 파일 다운로드 클릭
.xml파일을 EmDash에 업로드
WordPress.com OAuth
WordPress.com에 호스팅된 사이트의 경우 OAuth를 통해 연결하여 수동 파일 내보내기 없이 가져옵니다.
- WordPress.com 사이트 URL 입력
- WordPress.com으로 연결 클릭
- WordPress.com 팝업에서 EmDash 승인
- 가져올 콘텐츠 선택
포함 내용:
- 게시됨 및 초안 콘텐츠
- 비공개 게시물(승인 필요)
- 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: 스키마 준비
스키마 생성 및 가져오기를 클릭하여:
- 새 컬렉션 생성
- 올바른 열 유형으로 누락된 필드 추가
- 인덱스가 있는 콘텐츠 테이블 설정
단계 4: 가져오기 실행
콘텐츠를 순차적으로 가져옵니다:
- Gutenberg/HTML이 Portable Text로 변환
- WordPress 상태가 EmDash 상태로 매핑
- WordPress 작성자가 소유권(
authorId) 및 표시 서명으로 매핑 - 분류가 생성되고 연결
- 재사용 가능한 블록(
wp_block)이 섹션으로 가져오기 - 실시간으로 진행률 표시
작성자 가져오기 동작:
- 작성자 매핑이 EmDash 사용자를 가리키는 경우 소유권이 해당 사용자로 설정되고 동일한 사용자에 대해 연결된 서명이 생성/재사용됩니다.
- 사용자 매핑이 없는 경우 WordPress 작성자 ID에서 게스트 서명이 생성/재사용됩니다.
- 가져온 항목은 순서가 지정된 서명 크레딧을 받으며 첫 번째 크레딧이
primaryBylineId로 설정됩니다.
단계 5: 미디어 가져오기(선택 사항)
콘텐츠 후 선택적으로 미디어를 가져옵니다:
-
분석 — 유형별 첨부 파일 수 표시
발견된 미디어: ├── 이미지: 75개 파일 ├── 비디오: 10개 파일 └── 기타: 4개 파일 -
다운로드 — WordPress URL에서 스트리밍하고 진행률 표시
미디어 가져오는 중... ├── 45 / 89 (50%) ├── 현재: vacation-photo.jpg └── 상태: 업로드 중 -
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] },
}),
],
});
인터페이스(probe, analyze, fetchContent) 및 정규화된 출력 형태는 아키텍처(내부)에 문서화되어 있습니다.
다음 단계
- WordPress 마이그레이션 — 완전한 WordPress 마이그레이션 가이드
- 플러그인 포팅 — WordPress 플러그인을 EmDash로 포팅