# A Simple ruby script to convert Mephisto to WordPress
# Tested with version 0.8 of Mephisto and 2.5.1 of WordPress
#
# Author: Caleb Jaffa
# Author: HaiMing Yin http://webwhere.cn
#
# Usage: update the hashes with the information to point to your mehpisto
# and wordpress databases and then run with ruby m_to_wp.rb
require 'rubygems'
require 'mysql'
start_time = Time.now
# Config options
mephisto_db = { 'host' => '127.0.0.1', 'user' => '', 'password' => '', 'database' => '' }
wordpress_db = { 'host' => '127.0.0.1', 'user' => '', 'password' => '', 'database' => '' }
domain = ""
mephisto = Mysql.real_connect(mephisto_db['host'], mephisto_db['user'], mephisto_db['password'], mephisto_db['database'])
wordpress = Mysql.real_connect(wordpress_db['host'], wordpress_db['user'], wordpress_db['password'], wordpress_db['database'])
puts "Terms"
mephisto.query("SELECT * FROM tags").each_hash do |tag|
tag['name'] = Mysql.quote(tag['name'])
wordpress.query("REPLACE INTO wp_terms(term_id, name, slug, term_group) VALUES(#{tag['id']}, '#{tag['name']}', '#{tag['name'].downcase.gsub(" ","_")}', 0)")
# term taxonomy
c = mephisto.query("SELECT count(id) AS count FROM taggings WHERE tag_id = #{tag['id']}").fetch_hash['count']
wordpress.query("REPLACE INTO wp_term_taxonomy(term_taxonomy_id, term_id, taxonomy, parent, count) VALUES(#{tag['id']}, #{tag['id']}, 'post_tag', 0, #{c})")
end
puts "Term Relationships"
mephisto.query("SELECT * FROM taggings").each_hash do |tagging|
wordpress.query("REPLACE INTO wp_term_relationships(term_taxonomy_id, object_id) VALUES(#{tagging['tag_id']}, #{tagging['taggable_id']})")
end
puts "Sections"
sections = {}
mephisto.query("SELECT * FROM sections WHERE name <> 'Home'").each_hash do |section|
section['name'] = Mysql.quote(section['name'])
wordpress.query("REPLACE INTO wp_terms(name, slug, term_group) VALUES('#{section['name']}', '#{section['name'].downcase.gsub(" ","-")}', 0)")
term_id = wordpress.insert_id
sections[section["id"]] = term_id
# term taxonomy
wordpress.query("REPLACE INTO wp_term_taxonomy(term_taxonomy_id, term_id,
taxonomy, parent, count)
VALUES(#{term_id}, #{term_id},
'category', 0, #{section['articles_count']})")
end
puts "Section Relationships"
mephisto.query("SELECT * FROM assigned_sections").each_hash do |as|
next if sections[as['section_id']].nil?
wordpress.query("REPLACE INTO wp_term_relationships(term_taxonomy_id, object_id) VALUES(#{sections[as['section_id']]}, #{as['article_id']})")
end
puts "Posts"
mephisto.query("SELECT * FROM contents WHERE article_id IS NULL").each_hash do |article|
c = mephisto.query("SELECT count(id) AS count FROM contents WHERE article_id = #{article['id']}").fetch_hash['count']
if article['published_at'] then
guid = "http://#{domain}/"+article['published_at'][0..3]+"/"+article['published_at'][5..6]+"/"+article['published_at'][8..9]+"/"+article['permalink']
else
guid = "http://#{domain}/"+article['permalink']
end
article['body'] = Mysql.quote(article['body_html'])
article['title'] = Mysql.quote(article['title'])
wordpress.query("REPLACE INTO wp_posts(ID, post_author, post_date, post_date_gmt, post_content, post_title, post_category, post_status, ping_status, post_name, post_modified, post_modified_gmt, post_parent, guid, menu_order, post_type, comment_count)
VALUES(#{article['id']}, 1, '#{article['published_at']}', '#{article['published_at']}', '#{article['body']}', '#{article['title']}', 39, 'publish', 'closed', '#{article['permalink']}', '#{article['updated_at']}', '#{article['updated_at']}', 0, '#{guid}', 0, 'post', #{c})")
end
puts "Comments"
mephisto.query("SELECT * FROM contents WHERE article_id IS NOT NULL").each_hash do |comment|
comment['author_url'] ||= ""
comment['author'] = Mysql.quote(comment['author'])
comment['body'] = Mysql.quote(comment['body_html'])
wordpress.query("REPLACE INTO wp_comments(comment_ID, comment_post_ID, comment_author, comment_author_email, comment_author_url, comment_author_IP, comment_date, comment_date_gmt, comment_content, comment_karma, comment_approved, comment_parent, user_id)
VALUES(#{comment['id']}, #{comment['article_id']}, '#{comment['author']}', '#{comment['author_email']}', '#{comment['author_url']}', '#{comment['author_ip']}', '#{comment['published_at']}', '#{comment['published_at']}', '#{comment['body']}', 0, '1', 0, 0)")
end
end_time = Time.now
puts "Total elapsed time: #{end_time - start_time}"