diff --git a/History.txt b/History.txt index ac054bc3..d8c404a3 100644 --- a/History.txt +++ b/History.txt @@ -4,6 +4,7 @@ * Bundler support * Use English library to avoid hoops (#292) * Add Posterous importer (#254) + * Fixes for Wordpress importer (#274, #252) * Bug Fixes * Secure additional path exploits diff --git a/lib/jekyll/migrators/wordpress.com.rb b/lib/jekyll/migrators/wordpress.com.rb index 5be1b42d..069d6118 100644 --- a/lib/jekyll/migrators/wordpress.com.rb +++ b/lib/jekyll/migrators/wordpress.com.rb @@ -1,12 +1,15 @@ +# coding: utf-8 + require 'rubygems' require 'hpricot' require 'fileutils' - -# This importer takes a wordpress.xml file, -# which can be exported from your -# wordpress.com blog (/wp-admin/export.php) +require 'yaml' module Jekyll + + # This importer takes a wordpress.xml file, + # which can be exported from your + # wordpress.com blog (/wp-admin/export.php) module WordpressDotCom def self.process(filename = "wordpress.xml") FileUtils.mkdir_p "_posts" @@ -15,24 +18,28 @@ module Jekyll doc = Hpricot::XML(File.read(filename)) (doc/:channel/:item).each do |item| - title = item.at(:title).inner_text - name = "#{Date.parse((doc/:channel/:item).first.at(:pubDate).inner_text).to_s("%Y-%m-%d")}-#{title.downcase.gsub('[^a-z0-9]', '-')}.html" - + title = item.at(:title).inner_text.strip + permalink_title = item.at('wp:post_name').inner_text + date = Time.parse(item.at(:pubDate).inner_text) + tags = (item/:category).map{|c| c.inner_text}.reject{|c| c == 'Uncategorized'}.uniq + name = "#{date.strftime('%Y-%m-%d')}-#{permalink_title}.html" + header = { + 'layout' => 'post', + 'title' => title, + 'tags' => tags + } + File.open("_posts/#{name}", "w") do |f| - f.puts <<-HEADER ---- -layout: post -title: #{title} ---- - -HEADER + f.puts header.to_yaml + f.puts '---' f.puts item.at('content:encoded').inner_text end posts += 1 end - "Imported #{posts} posts" + puts "Imported #{posts} posts" end end + end \ No newline at end of file