Aug
28
Posted on 28-08-2007
Filed Under (Twits) by on 28-08-2007
  • pensa che fixare bug sia un po’ palloso #
  • stava meglio quando Milano era vuota e si poteva camminare senza intossicarsi di smog e di rumore #
(0) Comments    Read More   
Aug
27
Posted on 27-08-2007
Filed Under (Twits) by on 27-08-2007
  • torna a studiare automazione industriale malvolentieri #
  • ha appena postato uno script per migrare i bookmark da myweb a delicious http://tinyurl.com/2c4plm #
(0) Comments    Read More   
Aug
27
Posted on 27-08-2007
Filed Under (Yahoo, Programming, Nimboo, Ruby) by Federico Feroldi on 27-08-2007

When I discover delicious it was too late for me since at the time I had too many bookmarks already tagged in Yahoo’s Myweb. But since then I’ve always wanted to move all my bookmarks to delicious but didn’t found how to do it, until now.

Some days ago I found this python script that makes use of myweb and delicious web services to migrate the bookmarks.
Unfortunately the script wasn’t very reliable, it was crashing quite often and, since I have more than 1500 bookmarks, it was quite painful since every time I launched it, it was starting from scratch.

So I decided to build a new script (actually two)… in Ruby.

Step 1 : prerequisites

First of all you must install Ruby and rubygems on your system.

Then you must install rubilicious gem.

Step 2 : export myweb bookmarks

Here’s the first ruby script that you must run:

require 'net/http'
require 'uri'
require 'rexml/document'

# YOU WANT TO MODIFY THIS
yahoo_id = 'pix'

myweb_appid = 'YahooDemo'
myweb_urlsearch = 'http://search.yahooapis.com/MyWebService/V1/urlSearch'

request_start_idx = 1
request_max = 50

while(true)
  url = myweb_urlsearch + '?' + {
    :appid => myweb_appid,
    :yahooid => yahoo_id,
    :results => request_max,
    :start => request_start_idx
  }.to_a.collect {|kv| kv[0].to_s + '=' + kv[1].to_s}.join('&')
 
  retries = 3
  while(true)
    $stderr.puts(" - Requesting URLs from [#{request_start_idx}] (#{retries} retries left) -> #{url}\n")
   
    http_resp = Net::HTTP.get_response(URI.parse(url))
   
    if(http_resp.code.to_i < 200 || http_resp.code.to_i > 299)
      $stderr.puts(" ! request failed [#{http_resp.code}]\n")
      retries -= 1
      sleep(5) && next if(retries > 0)
      $stderr.puts(" ! too many retries, something is broken!\n")
      exit
    end
    break # exit while loop
  end

  xml_data = http_resp.body
 
  # extract event information
  doc = REXML::Document.new(xml_data)
 
  tot_results = doc.root.attributes['totalResultsAvailable'].to_i
  break unless tot_results > 0
 
  doc.elements.each('ResultSet/Result') do |r|
    puts [
      r.elements['Title'].text,
      r.elements['Summary'].text,
      r.elements['Url'].text,
      r.elements['Tags'].collect() {|e| e.text.to_s}.join(','),
    ].collect {|v| URI.escape(v.to_s) }.join('&') + "\n"
   
    request_start_idx += 1
  end

end

Copy this code and paste it to a file (like myweb_export.rb). You also want to set the yahoo_id variable with your myweb ID.

Then you can run the script:

ruby myweb_export.rb > data.txt

Step 3 : import bookmarks into delicious

For the final step you’ll need the script below:

require 'rubilicious'
require 'uri'

r = Rubilicious.new('USER', 'PASSWORD')

$stdin.each_line do |l|
  title, description, url, keys = l.split('&').collect { |i| URI.decode(i) }
  keys = keys.split(',').collect { |k| k.strip.gsub(/\s+/, '-') }.join(' ')
  puts title + "\n" + url + "\n" + keys + "\n---\n"
  r.add(url, title, description, keys)
  sleep(1)
end

You want to set the proper values for USER and PASSWORD of your delicious account and copy the code to deli_import.rb.

ruby deli_import.rb < data.txt

The script waits 1 second after each URL since this is required by the delicious API.

Limitations: unfortunately since the Myweb web services only allow the search of public bookmarks, you’ll not be able to migrate private bookmarks. You must do this by hand or wait that Yahoo will release a Myweb webservice that supports authentication.

(1) Comment    Read More