#! /usr/bin/perl # $Id$ # Export OPML blogs feed from del.icio.us use Net::Delicious; use XML::Feed; # use XML::OPML; # XML::OPML doesn't work as expected use strict; my $debug; $ARGV[0] eq '-d' and $debug = 1, shift; @ARGV > 0 or die "usage: $0 [-d] delicious_username:password\n"; my %tags; my ($delusername, $delpasswd) = split(/:/, $ARGV[0], 2); my $del = Net::Delicious->new( {user => $delusername, pswd => $delpasswd, debug => $debug}); # Workaround for Net::Delicious:all_posts() not supporting a tags argument: # $del->all_posts({tag => 'blog'}) $del->config('delicious_posts_all.tag' => ''); # Get all blog links from del.icio.us my $res = $del->_execute_method("delicious.posts.all", {tag => 'blog'}) or die "Error calling posts/all\n"; my $posts = $del->_getresults($res, 'post'); foreach my $post ($del->_buildresults('Post', $posts)) { my $title = $post->description; foreach my $tag (split(' ', $post->tags)) { $tags{$tag}{$title} = $post unless $tag eq 'blog'; } } print < blogs EOF foreach my $tag (sort keys %tags) { print qq(\n); foreach my $blogname (sort keys %{$tags{$tag}}) { my $url = $tags{$tag}{$blogname}->{href}; my ($feedurl) = XML::Feed->find_feeds($url); if (!$feedurl) { my $extended = $tags{$tag}{$blogname}->{extended}; ($feedurl) = $extended =~ /^RSS\s*=\s*(\S+)/im; } $feedurl or die "Could not find RSS feed for $url\n"; print qq(\t\n); } print "\n"; } print < EOF