From fa689bfd92a97563a46691659167438ea9d427de Mon Sep 17 00:00:00 2001 From: Mark Reid Date: Tue, 23 Dec 2008 23:57:27 +1100 Subject: [PATCH] Added wordpress converter --- lib/jekyll/converters/wordpress.rb | 54 ++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 lib/jekyll/converters/wordpress.rb diff --git a/lib/jekyll/converters/wordpress.rb b/lib/jekyll/converters/wordpress.rb new file mode 100644 index 00000000..1074655a --- /dev/null +++ b/lib/jekyll/converters/wordpress.rb @@ -0,0 +1,54 @@ +require 'rubygems' +require 'sequel' +require 'fileutils' + +# NOTE: This converter requires Sequel and the MySQL gems. +# The MySQL gem can be difficult to install on OS X. Once you have MySQL +# installed, running the following commands should work: +# $ sudo gem install sequel +# $ sudo gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config + +module Jekyll + module WordPress + + # Reads a MySQL database via Sequel and creates a post file for each + # post in wp_posts that has post_status = 'publish'. + # This restriction is made because 'draft' posts are not guaranteed to + # have valid dates. + QUERY = "select * from wp_posts where post_status = 'publish' and post_type = 'post'" + + def self.process(dbname, user, pass, host = 'localhost') + db = Sequel.mysql(dbname, :user => user, :password => pass, :host => host) + + FileUtils.mkdir_p "_posts" + + db[QUERY].each do |post| + # Get required fields and construct Jekyll compatible name + title = post[:post_title] + slug = post[:post_name] + date = post[:post_date] + content = post[:post_content] + + name = [date.year, date.month, date.day, slug].join('-') + ".markdown" + + # Get the relevant fields as a hash, delete empty fields and convert + # to YAML for the header + data = { + 'layout' => 'post', + 'title' => title.to_s, + 'excerpt' => post[:post_excerpt].to_s, + 'wordpress_id' => post[:ID], + 'wordpress_url' => post[:guid] + }.delete_if { |k,v| v.nil? || v == ''}.to_yaml + + # Write out the data and content to file + File.open("_posts/#{name}", "w") do |f| + f.puts data + f.puts "---" + f.puts content + end + end + + end + end +end \ No newline at end of file