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:
‘‘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:
Então vamos lá, o que você precisa fazer é:
1. Abra o painel de administração do Wordpress e vá em Ferramentas > Exportar
2. Selecione somente os posts e clique em Download do arquivo de exportação
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.