Created

Embed URL

HTTPS clone URL

SSH clone URL

You can clone with HTTPS or SSH.

Download Gist

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

View milk-extract.rb
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

Owner

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

Owner

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.