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.

Foto de Thiago sorrindo

Thiago Rossener

Desenvolvedor front-end e ser humano em construção