This blog has moved! All new posts will be on charlesmartin.com.au and all the current posts have migrated there too, so please leave comments there instead.

13 July 2011

Posterous exporter for Toto

I’ve been experimenting a bit with a cute blogging engine called Toto and wanted to migrate my Posterous posts so I wrote a little script in Ruby to download them all and format them in a Toto-appropriate way.

This script uses the posterous gem just to retrieve each post and put it in a YAML text file that Toto can understand. At the moment there are a few problems…

  • Since YAML uses “:” as a control character I had to remove any colons from titles and replaced them with dashes… I wonder if there’s a way to preserve them so that the text files are still human-readable?
  • The posterous gem only seems to get one page of posts at a time since my blog has 19 pages, I just ran my downloading method for each one.

Anyway, here’s the script! Maybe someone will chime in and tell me all the things I’m doing wrong.

#!/usr/bin/env ruby  require 'posterous' require 'toto'  Posterous.config = { 'username'  => 'username', 'password'  => 'password', 'api_token' => 'api_token' }  include Posterous  @site = Site.primary  Dir.chdir( "~/src/posterousparser" )  def saveposts(pagenumber = 0) @site.posts(:page => pagenumber).each do |e| timestamp = e.display_date yyyy = timestamp[0..3] mm = timestamp[5..6] dd = timestamp[8..9]  title = e.title.gsub(":", "-") slug = title.strip.slugize filename = "#{yyyy}-#{mm}-#{dd}-#{slug}.txt"  puts "Writing #{filename}...\n"  file = File.new("#{filename}", "w") file.puts "---\n" file.puts "title: #{title}\n" file.puts "author: #{e.user["display_name"]}" file.puts "date: #{dd}/#{mm}/#{yyyy}\n" file.puts "timestamp: #{e.display_date}\n"  file.print "tags: "  e.tags.each do |a| file.print "#{a["name"]} " end  file.puts "\n\n" file.puts "#{e.body_full}\n" file.puts "\n" file.close  end end  puts "Downloading posts now!"  for i in 1..19 do saveposts(i) end

Posted via email from charles martin

No comments: