Guest User

Untitled

a guest
Nov 17th, 2016
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.75 KB | None | 0 0
  1. %w(rubygems sequel fileutils yaml active_support/inflector).each{|g| require g}
  2.  
  3. require File.join(File.dirname(__FILE__), "downmark_it")
  4.  
  5. module WordPress
  6. def self.import(database, user, password, table_prefix = "wp", host = 'localhost')
  7. db = Sequel.mysql(database, :user => user, :password => password, :host => host, :encoding => 'utf8')
  8.  
  9. %w(_posts _drafts images/posts/featured).each{|folder| FileUtils.mkdir_p folder}
  10.  
  11. query = <<-EOS
  12.  
  13. SELECT post_title, post_name, post_date, post_content, post_excerpt, ID, guid, post_status, post_type, post_status,
  14. ( SELECT guid
  15. FROM #{table_prefix}_posts
  16. WHERE ID = ( SELECT meta_value
  17. FROM #{table_prefix}_postmeta
  18. WHERE post_id = post.ID AND meta_key = "_thumbnail_id") ) AS post_image
  19.  
  20. FROM #{table_prefix}_posts AS post
  21. WHERE post_type = 'post'
  22.  
  23. EOS
  24.  
  25. categories_and_tags_query = <<-EOS
  26.  
  27. SELECT t.taxonomy, term.name, term.slug
  28. FROM #{table_prefix}_term_relationships AS tr
  29. INNER JOIN #{table_prefix}_term_taxonomy AS t ON t.term_taxonomy_id = tr.term_taxonomy_id
  30. INNER JOIN #{table_prefix}_terms AS term ON term.term_id = t.term_id
  31. WHERE tr.object_id = %d
  32. ORDER BY tr.term_order
  33.  
  34. EOS
  35.  
  36. db[query].each do |post|
  37. title = post[:post_title]
  38. slug = post[:post_name]
  39. date = post[:post_date]
  40. content = DownmarkIt.to_markdown post[:post_content]
  41. status = post[:post_status]
  42. name = "%02d-%02d-%02d-%s.markdown" % [date.year, date.month, date.day, slug]
  43. image = File.basename(post[:post_image]) rescue ""
  44. categories = []
  45. post_tags = []
  46.  
  47. puts title
  48.  
  49. `wget -O "images/posts/featured/#{image}" "#{post[:post_image]}"` unless File::exists?("images/posts/featured/#{image}") || post[:post_image].nil?
  50.  
  51. db[categories_and_tags_query % post[:ID]].each do |category_or_tag|
  52. eval(category_or_tag[:taxonomy].pluralize) << {
  53. "title" => category_or_tag[:name],
  54. "slug" => category_or_tag[:slug],
  55. "autoslug" => category_or_tag[:name].downcase.gsub(" ", "-")
  56. }
  57. end
  58.  
  59. data = {
  60. 'layout' => 'post',
  61. 'title' => title.to_s,
  62. 'excerpt' => post[:post_excerpt].to_s,
  63. 'image' => image,
  64. 'wordpress_id' => post[:ID],
  65. 'wordpress_url' => post[:guid],
  66. 'categories' => categories,
  67. 'tags' => post_tags
  68. }.delete_if { |k,v| v.nil? || v == ''}.to_yaml
  69.  
  70. File.open("#{status == 'publish' ? '_posts' : '_drafts'}/#{name}", "w") do |f|
  71. f.puts data
  72. f.puts "---"
  73. f.puts content
  74. end
  75. end
  76. end
  77. end
Add Comment
Please, Sign In to add comment