Importação de Conteúdo

Nesta página

O EmDash importa conteúdo do WordPress e outras plataformas. Cada fonte de importação detecta uma plataforma, analisa seu conteúdo e o busca para o seu site.

Fontes de Importação

ID da FontePlataformaSondaOAuthImportação Completa
wxrArquivo de exportação WordPressNãoNãoSim
wordpress-comWordPress.comSimSimSim
wordpress-restWordPress auto-hospedadoSimNãoApenas sonda

Upload de Arquivo WXR

O método de importação mais completo. Faça o upload de um arquivo de exportação WordPress eXtended RSS (WXR) diretamente para o painel administrativo.

Capacidades:

  • Todos os tipos de post (incluindo personalizados)
  • Todos os campos meta
  • Rascunhos e posts privados
  • Hierarquia completa de taxonomia
  • Metadados de anexos de mídia

Como obter um arquivo WXR:

  1. No admin do WordPress, vá para Ferramentas → Exportar
  2. Selecione Todo o conteúdo ou tipos de post específicos
  3. Clique em Baixar Arquivo de Exportação
  4. Faça upload do arquivo .xml para o EmDash

OAuth do WordPress.com

Para sites hospedados no WordPress.com, conecte via OAuth para importar sem exportações manuais de arquivo.

  1. Digite a URL do seu site WordPress.com
  2. Clique em Conectar com WordPress.com
  3. Autorize o EmDash no popup do WordPress.com
  4. Selecione o conteúdo para importar

O que está incluído:

  • Conteúdo publicado e rascunhos
  • Posts privados (com autorização)
  • Arquivos de mídia via API
  • Campos personalizados expostos à API REST

Sonda da API REST do WordPress

Quando você digita uma URL, o EmDash sonda o site para detectar o WordPress e mostrar o conteúdo disponível:

Detectado: WordPress 6.4
├── Posts: 127 (publicados)
├── Páginas: 12 (publicadas)
└── Mídia: 89 arquivos

Nota: Rascunhos e conteúdo privado requerem autenticação
ou uma exportação WXR completa.

A sonda REST é informativa. Para importações completas, sugere fazer upload de um arquivo WXR ou conectar via OAuth (para WordPress.com).

Fluxo de Importação

Todas as fontes seguem o mesmo fluxo:

┌─────────────┐     ┌─────────────┐     ┌─────────────┐     ┌─────────────┐
│   Conectar  │────▶│   Analisar  │────▶│   Preparar  │────▶│   Executar  │
│  (sondar/   │     │  (verificar │     │   (criar    │     │  (importar  │
│   upload)   │     │   esquema)  │     │   esquema)  │     │  conteúdo)  │
└─────────────┘     └─────────────┘     └─────────────┘     └─────────────┘

Passo 1: Conectar

Digite uma URL para sondar ou faça upload de um arquivo diretamente.

A sondagem de URL executa todas as fontes registradas em paralelo. A correspondência com maior confiança determina a próxima ação sugerida:

  • Site WordPress.com → Oferecer conexão OAuth
  • WordPress auto-hospedado → Mostrar instruções de exportação
  • Desconhecido → Sugerir upload de arquivo

Passo 2: Analisar

A fonte analisa o conteúdo e verifica a compatibilidade do esquema:

Tipos de Post:
├── post (127) → posts [Nova coleção]
├── page (12)  → pages [Existente, compatível]
├── product (45) → products [Adicionar 3 campos]
└── revision (234) → [Pular - tipo interno]

Alterações de Esquema Necessárias:
├── Criar coleção: posts
├── Adicionar campos a pages: featured_image
└── Criar coleção: products

Cada tipo de post mostra seu status:

StatusSignificado
ProntoColeção existe com campos compatíveis
Nova coleçãoSerá criada automaticamente
Adicionar camposColeção existe, campos faltantes são adicionados
IncompatívelConflitos de tipo de campo (correção manual necessária)

Passo 3: Preparar Esquema

Clique em Criar Esquema e Importar para:

  1. Criar novas coleções
  2. Adicionar campos faltantes com os tipos de coluna corretos
  3. Configurar tabelas de conteúdo com índices

Passo 4: Executar Importação

O conteúdo é importado sequencialmente:

  • Gutenberg/HTML convertido para Portable Text
  • Status do WordPress mapeado para status do EmDash
  • Autores do WordPress mapeados para propriedade (authorId) e assinaturas de apresentação
  • Taxonomias criadas e vinculadas
  • Blocos reutilizáveis (wp_block) importados como Seções
  • Progresso mostrado em tempo real

Comportamento de importação de autores:

  • Se um mapeamento de autor aponta para um usuário EmDash, a propriedade é definida para esse usuário e uma assinatura vinculada é criada/reutilizada para o mesmo usuário.
  • Se não houver mapeamento de usuário, uma assinatura convidada é criada/reutilizada da identidade do autor do WordPress.
  • Entradas importadas recebem créditos de assinatura ordenados, com o primeiro crédito definido como primaryBylineId.

Passo 5: Importação de Mídia (Opcional)

Após o conteúdo, opcionalmente importe mídia:

  1. Análise — Mostra contagens de anexos por tipo

    Mídia encontrada:
    ├── Imagens: 75 arquivos
    ├── Vídeo: 10 arquivos
    └── Outro: 4 arquivos
  2. Download — Transmite de URLs do WordPress com progresso

    Importando mídia...
    ├── 45 de 89 (50%)
    ├── Atual: vacation-photo.jpg
    └── Status: Enviando
  3. Reescrever URLs — Conteúdo atualizado automaticamente com novas URLs

A importação de mídia usa hash de conteúdo (xxHash64) para deduplicação. A mesma imagem usada em vários posts é armazenada uma vez.

Endpoints da API

O sistema de importação expõe estes endpoints:

Sondar URL

Detecte a plataforma por trás de uma URL com uma solicitação de sonda:

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

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

A resposta contém a plataforma detectada e a ação sugerida.

Analisar WXR

Faça upload de um arquivo WXR para analisar seus tipos de post e compatibilidade de esquema:

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

file: [Exportação WordPress .xml]

A resposta contém a análise dos tipos de post com compatibilidade de esquema.

Preparar Esquema

Crie as coleções e campos para os tipos de post selecionados:

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

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

Executar Importação

Importe o conteúdo para as coleções mapeadas:

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

file: [Exportação WordPress .xml]
config: { "postTypeMappings": { "post": { "collection": "posts" } } }

Importar Mídia

Baixe e armazene os anexos de mídia referenciados pela importação:

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

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

A resposta transmite atualizações de progresso NDJSON durante o download e upload.

Reescrever URLs

Substitua URLs de mídia antigas no conteúdo importado por seus equivalentes armazenados:

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

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

Tratamento de Erros

Erros Recuperáveis

  • Timeout de rede — Retentado com backoff
  • Falha de análise de item único — Registrado, pulado, importação continua
  • Falha de download de mídia — Marcado para tratamento manual

Erros Fatais

  • Formato de arquivo inválido — Importação para com mensagem de erro
  • Conexão com banco de dados perdida — Importação pausa, permite retomada
  • Cota de armazenamento excedida — Importação para, mostra uso

Relatório de Erros

Após uma importação ser concluída, o EmDash mostra um resumo do que teve sucesso, do que foi ajustado e do que falhou:

Importação Concluída

✓ 125 posts importados
✓ 12 páginas importadas
✓ 85 referências de mídia registradas

⚠ 2 itens tiveram avisos:
  - Post "Special Characters ñ" - codificação do título corrigida
  - Página "About" - slug duplicado renomeado para "about-1"

✗ 1 item falhou:
  - ID do Post 456 - erro de análise de conteúdo (salvo como rascunho)

Itens que falharam são salvos como rascunhos com o conteúdo original em _importError para revisão.

Fontes personalizadas

Para importar de uma plataforma que as fontes integradas não cobrem, implemente a interface ImportSource e registre-a na integração:

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

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

A interface (probe, analyze, fetchContent) e a forma de saída normalizada estão documentadas em Arquitetura (internos).

Próximos Passos