Create a gist now

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Octopress Wordpress converter
require 'fileutils'
require 'date'
require 'yaml'
require 'rexml/document'
require 'ya2yaml'
include REXML
doc = Document.new(File.new(ARGV[0]))
FileUtils.rmdir "_posts"
FileUtils.mkdir_p "_posts"
doc.elements.each("rss/channel/item[wp:status = 'publish' and wp:post_type = 'post']") do |e|
p e.elements['wp:post_name'].text
post = e.elements
wordpress_id = post['wp:post_id'].text
#slug = post['wp:post_name'].text
slug = wordpress_id
date = DateTime.parse(post['wp:post_date'].text)
name = "%02d-%02d-%02d-%s.textile" % [date.year, date.month, date.day, slug]
date_string = "#{date.year}-#{date.month}-#{date.day}"
title_string = post['title'].text
# convert all tags and categories into categories
categories = []
post.each('category') do |cat|
categories << cat.text
end
content = post['content:encoded'].text.encode("UTF-8")
# convert <code></code> blocks to {% codeblock %}{% encodebloc %}
#content = content.gsub(/<code>(.*?)<\/code>/, '`\1`')
content = content.gsub(/<code>/, '{% codeblock %}')
content = content.gsub(/<\/code>/, '{% endcodeblock %}')
# convert <pre></pre> blocks to {% codeblock %}{% encodebloc %}
#content = content.gsub(/<pre lang="([^"]*)">(.*?)<\/pre>/m, '`\1`')
content = content.gsub(/<pre>/, '{% codeblock %}')
content = content.gsub(/<pre lang="([^"]*)">/, '{% codeblock %}')
content = content.gsub(/<\/pre>/m, '{% endcodeblock %}')
# convert headers
(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 "---"
f.puts "layout: post"
f.puts "title: '#{title_string}'"
f.puts "date: #{date_string}"
f.puts "wordpress_id: #{wordpress_id}"
f.puts "permalink: /blogs/#{wordpress_id}"
f.puts "comments: true"
#f.puts "categories: #{categories_string}"
#f.puts data
f.puts "---"
f.puts content
end
end
@ikbear

This comment has been minimized.

Show comment
Hide comment
@ikbear

ikbear Feb 10, 2012

这个gist如何使用?

ikbear commented Feb 10, 2012

这个gist如何使用?

@xdite

This comment has been minimized.

Show comment
Hide comment
@xdite

xdite Mar 19, 2012

放在 ortopress 目錄裡執行他...

Owner

xdite commented Mar 19, 2012

放在 ortopress 目錄裡執行他...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment