This commit is contained in:
Thomas Laumann 2011-07-07 11:14:32 +02:00
commit 0aab73e156
2 changed files with 39 additions and 11 deletions

View File

@ -32,7 +32,7 @@ module Jekyll
begin begin
self.data = YAML.load($1) self.data = YAML.load($1)
rescue => e rescue => e
puts "YAML Exception: #{e.message}" puts "YAML Exception reading #{name}: #{e.message}"
end end
end end
@ -78,7 +78,7 @@ module Jekyll
begin begin
self.content = Liquid::Template.parse(self.content).render(payload, info) self.content = Liquid::Template.parse(self.content).render(payload, info)
rescue => e rescue => e
puts "Liquid Exception: #{e.message} in #{self.data["layout"]}" puts "Liquid Exception: #{e.message} in #{self.name}"
end end
self.transform self.transform

View File

@ -4,39 +4,67 @@ require 'rubygems'
require 'hpricot' require 'hpricot'
require 'fileutils' require 'fileutils'
require 'yaml' require 'yaml'
require 'time'
module Jekyll module Jekyll
# This importer takes a wordpress.xml file, which can be exported from your # This importer takes a wordpress.xml file, which can be exported from your
# wordpress.com blog (/wp-admin/export.php). # wordpress.com blog (/wp-admin/export.php).
module WordpressDotCom module WordpressDotCom
def self.process(filename = "wordpress.xml") def self.process(filename = "wordpress.xml")
FileUtils.mkdir_p "_posts" import_count = Hash.new(0)
posts = 0
doc = Hpricot::XML(File.read(filename)) doc = Hpricot::XML(File.read(filename))
(doc/:channel/:item).each do |item| (doc/:channel/:item).each do |item|
title = item.at(:title).inner_text.strip title = item.at(:title).inner_text.strip
permalink_title = item.at('wp:post_name').inner_text permalink_title = item.at('wp:post_name').inner_text
date = Time.parse(item.at(:pubDate).inner_text) # Fallback to "prettified" title if post_name is empty (can happen)
if permalink_title == ""
permalink_title = title.downcase.split.join('-')
end
date = Time.parse(item.at('wp:post_date').inner_text)
status = item.at('wp:status').inner_text
if status == "publish"
published = true
else
published = false
end
type = item.at('wp:post_type').inner_text
tags = (item/:category).map{|c| c.inner_text}.reject{|c| c == 'Uncategorized'}.uniq tags = (item/:category).map{|c| c.inner_text}.reject{|c| c == 'Uncategorized'}.uniq
metas = Hash.new
item.search("wp:postmeta").each do |meta|
key = meta.at('wp:meta_key').inner_text
value = meta.at('wp:meta_value').inner_text
metas[key] = value;
end
name = "#{date.strftime('%Y-%m-%d')}-#{permalink_title}.html" name = "#{date.strftime('%Y-%m-%d')}-#{permalink_title}.html"
header = { header = {
'layout' => 'post', 'layout' => type,
'title' => title, 'title' => title,
'tags' => tags 'tags' => tags,
'status' => status,
'type' => type,
'published' => published,
'meta' => metas
} }
File.open("_posts/#{name}", "w") do |f| FileUtils.mkdir_p "_#{type}s"
File.open("_#{type}s/#{name}", "w") do |f|
f.puts header.to_yaml f.puts header.to_yaml
f.puts '---' f.puts '---'
f.puts item.at('content:encoded').inner_text f.puts item.at('content:encoded').inner_text
end end
posts += 1 import_count[type] += 1
end end
puts "Imported #{posts} posts" import_count.each do |key, value|
puts "Imported #{value} #{key}s"
end
end end
end end
end end