public
Last active

Tool for migrating tasks to The Hit List from Remember The Milk

  • Download Gist
milk-extract.rb
Ruby
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
# Simple script for reading all tasks from Remember The Milk and exporting them in a format usable
# with The Hit List.
#
# Migrating from http://www.rememberthemilk.com to http://www.potionfactory.com/thehitlist
#
# Create a config.yml file in the same folder, then simply run it with "ruby milk-extract.rb"
#
# Released under MIT License
#
# Written by Laust Rud Jacobsen, rud@personal-it.dk, 2010
 
require 'rubygems'
gem 'nokogiri'
require "nokogiri"
require "open-uri"
require 'yaml'
 
# Config file contents:
# username: rtm-user
# password: rtm-password
 
config = YAML.load_file('config.yml')
 
source = "https://www.rememberthemilk.com/atom/#{config['username']}/"
atom_feed = open(source, :http_basic_authentication => [config['username'], config['password']])
 
class TodoItem < Struct.new(:title, :tags, :list, :notes); end
 
doc = Nokogiri::XML(atom_feed, 'UTF-8')
# puts doc
 
items = doc.css('entry').collect do |entry|
item = TodoItem.new
item.title = entry.css('title').first.content
item.tags = entry.css('.rtm_tags .rtm_tags_value').first.content.split(', ')
item.list = entry.css('.rtm_list .rtm_list_value').first.content
entry.css('.rtm_notes .rtm_note').each do |note|
title = note.css('.rtm_note_title').first.content
body = note.css('.rtm_note_content').first.content
(item.notes ||= []) << { :title => title, :body => body }
end
item
end
 
grouped_items = items.group_by(&:list)
grouped_items.each_pair do |heading, items|
puts "\n\nList: #{heading}"
items.each do |item|
tags = item.tags.reject {|tag| tag == 'none' }.collect { |tag| "/#{tag}/"}.join(' ')
 
notes = unless item.notes.nil? || item.notes.empty?
item.notes.collect {|note| [note[:title], note[:body]].compact.join(' - ') }.join(' | ')
end
puts " #{item.title} #{notes} #{tags}"
end
end

Hi.

I'm getting the following error were executing the file:

/opt/local/lib/ruby/1.8/net/http.rb:586:in connect': SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed (OpenSSL::SSL::SSLError)
from /opt/local/lib/ruby/1.8/net/http.rb:586:in
connect'
from /opt/local/lib/ruby/1.8/net/http.rb:553:in do_start'
from /opt/local/lib/ruby/1.8/net/http.rb:542:in
start'
from /opt/local/lib/ruby/1.8/open-uri.rb:242:in open_http'
from /opt/local/lib/ruby/1.8/open-uri.rb:616:in
buffer_open'
from /opt/local/lib/ruby/1.8/open-uri.rb:164:in open_loop'
from /opt/local/lib/ruby/1.8/open-uri.rb:162:in
catch'
from /opt/local/lib/ruby/1.8/open-uri.rb:162:in open_loop'
from /opt/local/lib/ruby/1.8/open-uri.rb:132:in
open_uri'
from /opt/local/lib/ruby/1.8/open-uri.rb:518:in open'
from /opt/local/lib/ruby/1.8/open-uri.rb:30:in
open'
from milk-extract.rb:27

Do you know why? can you help me?

Thanks

Hi betobetico,

What ruby version are you using? I just tried the script again with: ruby 1.8.7 (2009-06-12 patchlevel 174) [universal-darwin10.0], no problem. I see something similar reported here [1], so I think an upgrade might help.

[1] http://www.ruby-forum.com/topic/129530

Regards
/Laust

betobetico found a simple way of avoiding the error: switch from https to http in the url. Depending on the importance of the data you access with this, you might be all right. I'd still recommend upgrading ruby instead, though.

Please sign in to comment on this gist.

Something went wrong with that request. Please try again.