I added a new feature on Copia: Every day there will be an automated posting with mine and Chime's del.icio.us links from the previous day. You can see, in the previous Copia entry to this one, an example of the results.
What I think most cool is how easy it was to write, and how easy the resulting code is to understand. It's just 35 lines (including 7 lines of imports) , and in that it packs some useful features I haven't found in other such scripts, including:
- Full Unicode safety (naturally, I wouldn't have it any other way)
- support for multiple del.icio.us feeds, with tag by author
- tagging the PyBlosxom entry with the aggregated/unique tags from the del.icio.us entries
Here's the code. The only external requirement is Amara:
import os import sets import time import codecs import itertools from datetime import date, timedelta from amara import binderytools TAGBASE = 'http://del.icio.us/tag/' #Change BASEDIR and FEEDS to customize BASEDIR = '/srv/www/ogbuji.net/copia/pyblosxom/datadir' FEEDS = ['http://del.icio.us/rss/uche', 'http://del.icio.us/rss/chimezie'] now = time.gmtime() timestamp = unicode(time.strftime('%Y-%m-%dT%H:%M:%SZ', now)) targetdate = (date(*now[:3]) - timedelta(1)).isoformat() #Using Amara. Easy to just grab the RSS feed docs = map(binderytools.bind_uri, FEEDS) items = itertools.chain(*[ doc.RDF.item for doc in docs ]) current_items = [ item for item in items if unicode(item.date).startswith(targetdate) ] if current_items: # Create a Markdown page with the daily bookmarks. dir = '%s/%s' % (BASEDIR, targetdate) if not os.path.isdir(dir): os.makedirs(dir) f = codecs.open('%s/%s/del.icio.us.links.txt' % (BASEDIR, targetdate), 'w', 'utf-8') # Pyblosxom Title f.write(u'del.icio.us bookmarks for %s\n' % targetdate) tags = sets.Set() for item in current_items: tags.update([ li.resource[len(TAGBASE):] for li in item.topics.Bag.li ]) f.write(u'#post_time %s\n'%(timestamp)) f.write(u'<!--keywords: del.icio.us,%s -->\n'%(u','.join(tags))) for item in current_items: # List of links in Markdown. title = getattr(item, 'title', u'') href = getattr(item, 'link', u'') desc = getattr(item, 'description', u'') creator = getattr(item, 'creator', u'') f.write(u'* "[%s](%s)": %s *(from %s)*\n' % (title, href, desc, creator)) f.close()
Or download amara_delicious.py.
You can see how easily you can process RSS 1.0 in Amara. I don't think actual RDF parsing/processing is a bit necessary. That extra layer is the first thing that decided me against Matt Biddulph's module, in addition to his use of libxml for XML processing, which is also used in Roberto De Almeida's.