PageRenderTime 52ms CodeModel.GetById 19ms RepoModel.GetById 0ms app.codeStats 0ms

/lib/jekyll/migrators/wordpressdotcom.rb

https://github.com/nurulimamnotes/jekyll
Ruby | 70 lines | 55 code | 11 blank | 4 comment | 5 complexity | 5414af8e57004507b3187a0bf4e12b96 MD5 | raw file
Possible License(s): MIT
  1. # coding: utf-8
  2. require 'rubygems'
  3. require 'hpricot'
  4. require 'fileutils'
  5. require 'yaml'
  6. require 'time'
  7. module Jekyll
  8. # This importer takes a wordpress.xml file, which can be exported from your
  9. # wordpress.com blog (/wp-admin/export.php).
  10. module WordpressDotCom
  11. def self.process(filename = "wordpress.xml")
  12. import_count = Hash.new(0)
  13. doc = Hpricot::XML(File.read(filename))
  14. (doc/:channel/:item).each do |item|
  15. title = item.at(:title).inner_text.strip
  16. permalink_title = item.at('wp:post_name').inner_text
  17. # Fallback to "prettified" title if post_name is empty (can happen)
  18. if permalink_title == ""
  19. permalink_title = title.downcase.split.join('-')
  20. end
  21. date = Time.parse(item.at('wp:post_date').inner_text)
  22. status = item.at('wp:status').inner_text
  23. if status == "publish"
  24. published = true
  25. else
  26. published = false
  27. end
  28. type = item.at('wp:post_type').inner_text
  29. tags = (item/:category).map{|c| c.inner_text}.reject{|c| c == 'Uncategorized'}.uniq
  30. metas = Hash.new
  31. item.search("wp:postmeta").each do |meta|
  32. key = meta.at('wp:meta_key').inner_text
  33. value = meta.at('wp:meta_value').inner_text
  34. metas[key] = value;
  35. end
  36. name = "#{date.strftime('%Y-%m-%d')}-#{permalink_title}.html"
  37. header = {
  38. 'layout' => type,
  39. 'title' => title,
  40. 'tags' => tags,
  41. 'status' => status,
  42. 'type' => type,
  43. 'published' => published,
  44. 'meta' => metas
  45. }
  46. FileUtils.mkdir_p "_#{type}s"
  47. File.open("_#{type}s/#{name}", "w") do |f|
  48. f.puts header.to_yaml
  49. f.puts '---'
  50. f.puts item.at('content:encoded').inner_text
  51. end
  52. import_count[type] += 1
  53. end
  54. import_count.each do |key, value|
  55. puts "Imported #{value} #{key}s"
  56. end
  57. end
  58. end
  59. end