Funkenstrahlen Podcasting, Netzpolitik, App-Entwicklung

Wordpress Export Skript

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:

``` ruby %} 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 ```