Ich habe hier schon über meine ersten Umstiegsschritte nach Octopress berichtet. Dabei habe ich es versäumt euch mein Exportskript mit an die Hand zu geben, mit dem ich meine Wordpress Artikel nach Octopress Markdown exportiert habe. Das will ich nun nachholen.
Zunächst müsst ihr eure Wordpress-Daten im Wordpress Interface nach XML exportieren. Diese Datei müsst ihr dann diesem Skript zum Fraß vorwerfen. Aber Vorsicht: Das Skript bekommt Probleme mit der XML Syntax, wenn ihr eure Seite flattrbar gemacht habt. Diesen globalen “Flattr this Page” RSS-Link solltet ihr also vorher entfernen.
Hier dann mal mein Skript:
require 'fileutils'
require 'date'
require 'yaml'
require 'rexml/document'
include REXML
doc = Document.new File.new(ARGV[0])
FileUtils.mkdir_p "_posts"
doc.elements.each("rss/channel/item[wp:status = 'publish' and wp:post_type = 'post']") do |e|
post = e.elements
slug = post['wp:post_name'].text
date = DateTime.parse(post['wp:post_date'].text)
name = "%02d-%02d-%02d-%s.markdown" % [date.year, date.month, date.day, slug]
date_string = date.year.to_s + "-" + date.month.to_s + '-' + date.day.to_s
categories = []
post.each('category') do |cat|
categories << cat.text
end
content_text = post['content:encoded'].text
content = content_text.encode("UTF-8")
content = content.gsub(/<code>/, '{% codeblock %}')
content = content.gsub(/<\/code>/, '{% endcodeblock %}')
content = content.gsub(/\[c\]/, '{% codeblock %}')
content = content.gsub(/\[\/c\]/, '{% endcodeblock %}')
content = content.gsub(/\[xml\]/, '{% codeblock %}')
content = content.gsub(/\[\/xml\]/, '{% endcodeblock %}')
content = content.gsub(/\[plain\]/, '{% codeblock %}')
content = content.gsub(/\[\/plain\]/, '{% endcodeblock %}')
content = content.gsub(/<pre>/, '{% codeblock %}')
content = content.gsub(/<pre lang="([^"]*)">/, '{% codeblock %}')
content = content.gsub(/<\/pre>/m, '{% endcodeblock %}')
# replace image urls
content = content.gsub(/http:\/\/funkenstrahlen.de\/wp-content\/uploads/,'../../../../../content')
(1..3).each do |i|
content = content.gsub(/<h#{i}>([^<]*)<\/h#{i}>/, ('#'*i) + ' \1')
end
puts "Converting: #{name}"
data = {
'layout' => 'post',
'title' => post['title'].text,
'date' => date_string,
'comments' => true,
'categories' => categories
}.delete_if { |k,v| v.nil? || v == ''}.to_yaml
File.open("_posts/#{name}", "w") do |f|
f.puts data
f.puts "---"
f.puts content
end
end