Skip to content

Instantly share code, notes, and snippets.

@irfani
Created February 20, 2010 19:19
Show Gist options
  • Save irfani/309851 to your computer and use it in GitHub Desktop.
Save irfani/309851 to your computer and use it in GitHub Desktop.
Wp2Tumblr
require 'xmlrpc/client.rb'
require 'net/http'
require 'uri'
require 'logger'
class Wp2Tumblr
TUMBLR_API_WRITE = 'http://www.tumblr.com/api/write'
def initialize(credentials)
@wpurl, @wpuser, @wppass, @tumbemail, @tumbpass = credentials
@blog = XMLRPC::Client.new(@wpurl, "/xmlrpc.php", 80)
@blog_id = @blog.call("wp.getUsersBlogs", @wpuser, @wppass)[0]['blogid']
rescue XMLRPC::FaultException => e
puts e.faultString
end
def export_all_my_wp_posts_to_tumblr_now!
find_all_wp_posts
data = {'email'=>@tumbemail, 'password'=>@tumbpass, 'type'=>'regular', 'generator'=>'wp2tumblr','send-to-twitter'=>'no'}
@posts.each do |p|
data['date'] = p['date_created_gmt'].to_time.to_s
data['tags'] = p['categories'].join(',')
if p['post_status'] == 'publish'
data['state'] = 'published'
elsif p['post_status'] == 'private'
data['state'] = 'draft'
else
data['state'] = p['post_status']
end
data['slug'] = p['wp_slug']
data['title'] = p['title']
data['body'] = p['description']
res = Net::HTTP.post_form(URI.parse(TUMBLR_API_WRITE), data)
puts p['title']
if res.code == "201"
puts "#{res.code} Success"
else
puts "#{res.code} Failed"
end
sleep 10 #seconds
end
end
def find_all_wp_posts
@posts ||= @blog.call("metaWeblog.getRecentPosts", @blog_id, @wpuser, @wppass, 1000000).reverse
end
end
begin
LOG = Logger.new(STDOUT)
unless ARGV.size == 5
$stderr.puts "Usage: [wpurl] [wpuser] [wppass] [tumblremail] [tumblrpass]"
$stderr.puts "Example: irfani.web.id admin admin123 irfani@domain.com irfani123"
exit -1
end
wp2tumblr = Wp2Tumblr.new(ARGV)
wp2tumblr.export_all_my_wp_posts_to_tumblr_now!
rescue XMLRPC::FaultException => e
LOG.error "XMLRPC Error"
LOG.error "#{e.faultCode} #{e.faultString}"
rescue StandardError => e
LOG.error e
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment