Moving my Blog from Blojsom to WordPress
I recently changed my ISP from my old friend Aligen (courtesy of Farrad Ali for providing free access since ’98) to HostMonster. So, instead of running my own Tomcat now I am relying on PHP and Rails. The next thing was how do I move my blogs and preserve the dates. Blojsom was simple file based software, but WordPress uses mysql. So I wrote a simple ruby script to convert it.
The first thing I did was to download dbi from
http://rubyforge.org/projects/ruby-dbi/
I then uncompressed it
tar xzf dbi-0.1.1.tar.gz
Then
cd ~/ruby-dbi
Since, I don’t have root access on my host, I could not install it to the /usr/bin directory. So I created my own ruby directory
mkdir ~/ruby
and then ran config with my own bin directory as
ruby setup.rb config –bin-dir=~/bin –with=dbi,dbd_mysql –rb-dir=~/ruby –so-dir=~/ruby
Next I ran
ruby setup.rb setup
and then
ruby setup.rb install
Now then fun part, following is a ruby script that reads my flat files and inserts them into wordpress database:
1 #!/usr/bin/ruby 2 require 'dbi' 3 4 # 5 ### import blogs from old blog directory to wordpress 6 # 7 class ImportBlogs 8 def initialize(webapp_dir) 9 @webapp_dir = webapp_dir 10 end 11 12 def delete_all 13 DBI.connect('DBI:Mysql:weblog', 'weblog', '*****') do | dbh | 14 dbh.do('delete from wp_posts where id > 2') 15 end 16 end 17 18 def add_all 19 files = Dir.glob("#{@webapp_dir}/*").delete_if { |f| File.directory?(f) } 20 DBI.connect('DBI:Mysql:weblog', 'weblog', '*****') do | dbh | 21 id = 3 22 post_author = 1 23 sql = "insert into wp_posts(post_author, post_date, post_date_gmt, post_content, post_title, post_category, post_excerpt, post_name, post_modified, post_modified_gmt, guid) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)" 24 dbh.prepare(sql) do | sth | 25 files.each do |f| 26 lines = nil 27 File.open(f, "r") do |file| 28 lines = file.readlines 29 end 30 post_content = lines.join(' ') 31 post_title = lines[0] 32 post_excerpt = post_content.slice(0,255) 33 post_date = post_date_gmt = post_modified = post_modified_gmt = File.new(f).mtime 34 post_category = 3 35 post_name = File.basename(f) 36 guid = "http://weblog.plexobject.com/?p=#{id}" 37 puts "Adding #{f} mtime #{post_date}" 38 sth.execute(post_author, post_date, post_date_gmt, post_content, post_title, post_category, post_excerpt, post_name, post_modified, post_modified_gmt, guid) 39 id += 1 40 end 41 end 42 end 43 end 44 end 45 46 ib = ImportBlogs.new('~/webapps/blojsom/computing') 47 ib.delete_all 48 ib.add_all 49 50
Finally, I ran it as follows:
ruby -I /usr/lib/ruby/gems/1.8/gems/mysql-2.7 -I /usr/lib/ruby/gems/1.8/gems/mysql-2.7/lib -I ~/ruby -I ~/ruby/DBD -I ~/ruby/dbi -I ~/ruby/DBD/Mysql import_blogs.rb
Voilla, I got everything as expected.