Sha256: 079eb0c88d8be1b8c0950ef103876fc5274177b183684e00e6340b4d09ccdfd4

Contents?: true

Size: 1.95 KB

Versions: 12

Compression:

Stored size: 1.95 KB

Contents

# coding: utf-8

require 'rubygems'
require 'hpricot'
require 'fileutils'
require 'yaml'
require 'time'

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")
      import_count = Hash.new(0)
      doc = Hpricot::XML(File.read(filename))

      (doc/:channel/:item).each do |item|
        title = item.at(:title).inner_text.strip
        permalink_title = item.at('wp:post_name').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

        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"
        header = {
          'layout' => type,
          'title'  => title,
          'tags'   => tags,
          'status'   => status,
          'type'   => type,
          'published' => published,
          'meta'   => metas
        }

        FileUtils.mkdir_p "_#{type}s"
        File.open("_#{type}s/#{name}", "w") do |f|
          f.puts header.to_yaml
          f.puts '---'
          f.puts item.at('content:encoded').inner_text
        end

        import_count[type] += 1
      end

      import_count.each do |key, value|
        puts "Imported #{value} #{key}s"
      end
    end
  end
end

Version data entries

12 entries across 12 versions & 4 rubygems

Version Path
jekyll-0.12.1 lib/jekyll/migrators/wordpressdotcom.rb
jekyll-reloaded-0.12.2 lib/jekyll/migrators/wordpressdotcom.rb
jekyll-0.12.0 lib/jekyll/migrators/wordpressdotcom.rb
spinto-jekyll-0.11.2.5 lib/jekyll/migrators/wordpressdotcom.rb
jekyll-reloaded-0.12.1 lib/jekyll/migrators/wordpressdotcom.rb
jekyll-reloaded-0.12 lib/jekyll/migrators/wordpressdotcom.rb
spinto-jekyll-0.11.2.3 lib/jekyll/migrators/wordpressdotcom.rb
spinto-jekyll-0.11.2.2 lib/jekyll/migrators/wordpressdotcom.rb
spinto-jekyll-0.11.2.1 lib/jekyll/migrators/wordpressdotcom.rb
jekyll-0.11.2 lib/jekyll/migrators/wordpressdotcom.rb
vanity-1.7.1 vendor/ruby/1.9.1/gems/jekyll-0.11.0/lib/jekyll/migrators/wordpressdotcom.rb
jekyll-0.11.0 lib/jekyll/migrators/wordpressdotcom.rb