Dark mode
Light mode
29 Jul 17
3 min

Como migrar seus posts do Wordpress para o Jekyll de um jeito simples

Um script para migrar seus posts do Wordpress para o Jekyll sem dores de cabeça.

Foram 24 horas contabilizadas entre ter o primeiro contato com o Jekyll, fazer o novo layout do blog e migrar todos os posts do meu antigo blog em Wordpress.

O mais chato de fazer em toda essa jornada eu diria que foi a migração.

O site oficial do Jekyll passa um comando configurável para trazer todos os posts do Wordpress para o Jekyll:

1ruby -rubygems -e 'require "jekyll-import"; 2 JekyllImport::Importers::WordPress.run({ 3 "dbname" => "", 4 "user" => "", 5 "password" => "", 6 "host" => "localhost", 7 "port" => "3306", 8 "socket" => "", 9 "table_prefix" => "wp_", 10 "site_prefix" => "", 11 "clean_entities" => true, 12 "comments" => false, 13 "categories" => false, 14 "tags" => false, 15 "more_excerpt" => false, 16 "more_anchor" => false, 17 "extension" => "md", 18 "status" => ["publish"] 19 })'

Porém, apesar de tentar enxugar o máximo de coisas possível, a saída desse comando ainda é um arquivo cheio de coisas que você vai perder tempo apagando e o pior, não estará formatado em markdown:

Imagem do arquivo de saída com a importação do Jekyll

A solução: Exportar um arquivo .xml com os posts do Wordpress e pegar esse script muito maroto aqui para fazer a importação no Jekyll.

Mesmo assim, como esse script ainda insere um monte de sujeira, fiz a minha própria versão dele, deixando somente o que achei necessário, e passando o nome do arquivo de exportação via argumento na linha de comando.

Assim, o arquivo fica formatado em markdown, incluse as imagens! Olha só como fica mais enxuto e agradável:

Imagem do arquivo de saída com a exportação via script

Então vamos lá, o que você precisa fazer é:

1. Abra o painel de administração do Wordpress e vá em Ferramentas > Exportar

Screenshot da tela do Wordpress

2. Selecione somente os posts e clique em Download do arquivo de exportação

Screenshot da tela do Wordpress

3. Coloque o arquivo .xml baixado na raiz do seu projeto Jekyll

4. Crie um arquivo import.rb também na raiz do seu projeto Jekyll e cole esse código, que também deixei disponível no Github:

1# coding: utf-8 2 3require 'hpricot' 4require 'fileutils' 5require 'safe_yaml' 6require 'html2markdown' 7 8module JekyllImport 9 # This importer takes a *.xml file, which can be exported from your 10 # wordpress.com blog (/wp-admin/export.php). 11 module WordpressDotCom 12 def self.process(filename = {:source => ARGV[0]}) 13 import_count = Hash.new(0) 14 doc = Hpricot::XML(File.read(filename[:source])) 15 16 (doc/:channel/:item).each do |item| 17 title = item.at(:title).inner_text.strip 18 permalink_title = item.at('wp:post_name').inner_text.gsub("/","-") 19 # Fallback to "prettified" title if post_name is empty (can happen) 20 if permalink_title == "" 21 permalink_title = sluggify(title) 22 end 23 24 if item.at('wp:post_date') 25 begin 26 date = Time.parse(item.at('wp:post_date').inner_text) 27 rescue 28 date = Time.now 29 end 30 else 31 date = Time.now 32 end 33 34 name = "#{date.strftime('%Y-%m-%d')}-#{permalink_title}.md" 35 type = item.at('wp:post_type').inner_text 36 tags = item.search('category[@domain="post_tag"]').map{|t| t.inner_text}.uniq 37 38 header = { 39 'layout' => type, 40 'title' => title, 41 'tags' => tags 42 } 43 44 begin 45 FileUtils.mkdir_p "_#{type}s" 46 filename = "_#{type}s/#{name}" 47 File.open(filename, "w") do |f| 48 f.puts header.to_yaml 49 f.puts '---' 50 f.puts item.at('content:encoded').inner_text 51 end 52 p = HTMLPage.new(contents: File.read(filename)) 53 File.open(filename, "w") { |f| f.puts p.markdown } 54 rescue => e 55 puts "Couldn't import post!" 56 puts "Title: #{title}" 57 puts "Name/Slug: #{name}\n" 58 puts "Error: #{e.message}" 59 next 60 end 61 62 import_count[type] += 1 63 end 64 65 import_count.each do |key, value| 66 puts "Imported #{value} #{key}s" 67 end 68 end 69 70 def self.sluggify(title) 71 title.gsub(/[^[:alnum:]]+/, '-').downcase 72 end 73 end 74end 75 76JekyllImport::WordpressDotCom.process

5. No terminal, no diretório do seu blog, rode o comando ruby import.rb nome-do-seu-arquivo-exportado.xml

Nota: Se você não possui o ruby instalado, dá uma olhada nesse link aqui de como instalar o Ruby. Talvez você também precise instalar as gems necessárias para rodar o arquivo, você pode fazer isso rodando gem install hpricot fileutils safe_yaml html2markdown

Pronto! Seus posts no Wordpress estão todos importados e formatados em markdown.

Compartilhe

Foto de Thiago sorrindo

Autor

Thiago Rossener

Desenvolvedor front-end, filósofo e espiritualista

Sua assinatura não pôde ser validada.
Você fez sua assinatura com sucesso.

Newsletter

Assinando minha newsletter você fica sabendo sempre que eu publicar algo novo, prometo que vai ser só isso.