<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DZone Snippets: ruby code</title>
    <link>http://snippets.dzone.com/posts</link>
    <pubDate>Sun, 27 Jul 2008 03:13:11 GMT</pubDate>
    <description>DZone Snippets: ruby code</description>
    <item>
      <title>del.icio.us backup</title>
      <link>http://snippets.dzone.com/posts/show/290</link>
      <description>This ruby script dumps all your del.icio.us bookmarks into a sqlite database. Requires sqlite3-ruby installed via rubygems. Don't forget to change the user and pass.&lt;br /&gt;&lt;code&gt;#!/usr/bin/env ruby&lt;br /&gt;require 'rexml/document'&lt;br /&gt;require 'net/http'&lt;br /&gt;require 'net/https'&lt;br /&gt;require 'rubygems'&lt;br /&gt;require 'sqlite3'&lt;br /&gt;&lt;br /&gt;# change credentials!&lt;br /&gt;user = 'username'&lt;br /&gt;pass = 'password'&lt;br /&gt;&lt;br /&gt;# User-Agent: required for del.icio.us api&lt;br /&gt;agent = 'del.icio.us backup v0.2'&lt;br /&gt;schema = &lt;&lt;EOF&lt;br /&gt;create table bookmarks (&lt;br /&gt;    hash char(32) primary key,&lt;br /&gt;    url varchar(1024),&lt;br /&gt;    title varchar(1024),&lt;br /&gt;    note varchar(2048),&lt;br /&gt;    time timestamp&lt;br /&gt;);&lt;br /&gt;create table tags (hash char(32), tag varchar(1024));&lt;br /&gt;create index ix_tags_hash on tags (hash);&lt;br /&gt;create index ix_tags_tag on tags (tag);&lt;br /&gt;EOF&lt;br /&gt;insert_url = 'insert into bookmarks (hash, url, title, note, time) ' +&lt;br /&gt;             'values (?, ?, ?, ?, ?);'&lt;br /&gt;insert_tag = 'insert into tags (hash, tag) values (?, ?);'&lt;br /&gt;&lt;br /&gt;http = Net::HTTP.new('api.del.icio.us', 443)&lt;br /&gt;http.use_ssl = true&lt;br /&gt;xml = http.start { |http|&lt;br /&gt;    req = Net::HTTP::Get.new('/v1/posts/all', {'User-Agent' =&gt; agent})&lt;br /&gt;    req.basic_auth(user, pass)&lt;br /&gt;    http.request(req).body&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;db_name = ARGV[0] || Time.now.strftime("%Y-%m-%d.db")&lt;br /&gt;SQLite3::Database.open(db_name).transaction { |db|&lt;br /&gt;    db.execute_batch(schema)&lt;br /&gt;    db.prepare(insert_url) { |url_stmt|&lt;br /&gt;        db.prepare(insert_tag) { |tag_stmt|&lt;br /&gt;            REXML::Document.new(xml).elements.each('posts/post') { |el|&lt;br /&gt;                url_stmt.execute(el.attributes['hash'],&lt;br /&gt;                    el.attributes['href'], el.attributes['description'],&lt;br /&gt;                    el.attributes['extended'], el.attributes['time'])&lt;br /&gt;                el.attributes['tag'].split(' ').each { |tag|&lt;br /&gt;                    tag_stmt.execute(el.attributes['hash'], tag)&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;/code&gt;</description>
      <pubDate>Mon, 16 May 2005 02:41:44 GMT</pubDate>
      <guid>http://snippets.dzone.com/posts/show/290</guid>
      <author>oreaq ()</author>
    </item>
  </channel>
</rss>
