--- /dev/null
+#!/usr/bin/env python
+# -*- encoding:utf-8 -*-
+
+"""
+
+Pour télécharger un album Picasa sans avoir à utiliser l'application Picasa
+
+Il faut lui fournir le l'url vers le flux RSS
+
+"""
+
+import urllib
+import lxml.etree
+import os
+
+def get_album(url):
+ """Récupère le xml décrivant l'album à partir de l'``url`` du flux RSS"""
+ page = urllib.urlopen(url)
+ content = page.read()
+ parsed = lxml.etree.fromstring(content)
+ return parsed
+
+def album_to_links(album):
+ """Un peu de xpath pour récupérer les liens directs des éléments
+ de l'``album``."""
+ medias = album.xpath("//media:group", namespaces=album.nsmap)
+ processed = []
+ for media in medias:
+ contenturls = media.xpath("./media:content", namespaces=media.nsmap)
+ # Pour les photos il n'y a qu'un seul media:content
+ # Mais pour la vidéo, il y a un thumbnail avant
+ if len(contenturls) > 1:
+ contenturl = contenturls[1]
+ else:
+ contenturl = contenturls[0]
+ contenturl = [val for (kw, val) in contenturl.items() if kw == "url"][0]
+ title = media.xpath("./media:title", namespaces=media.nsmap)[0]
+ title = title.text
+ processed.append([title, contenturl])
+ return processed
+
+def download_file(url, path):
+ """Télécharge le fichier depuis l'``url`` et l'enregistre dans ``path``."""
+ page = urllib.urlopen(url)
+ with open(path, "w") as f:
+ bloc = page.read(4096)
+ while bloc != "":
+ f.write(bloc)
+ bloc = page.read(4096)
+
+def do_all(rss_url, folder):
+ """Télécharge tout l'album depuis ``rss_url`` et le stocke dans ``folder``"""
+ album = get_album(rss_url)
+ titles = album.xpath("//image/title", namespaces=album.nsmap)
+ albumtitle = titles[0].text
+ os.mkdir("%s/%s" % (folder, albumtitle))
+ linktitles = album_to_links(album)
+ for [title, url] in linktitles:
+ print "Downloading %s : %s" % (title, url)
+ download_file(url, "%s/%s/%s" % (folder, albumtitle, title))
+ return albumtitle
+
+if __name__ == "__main__":
+ import sys
+ rss_url = sys.argv[1]
+ albumtitle = do_all(rss_url, ".")
+ print (u"Téléchargé dans %s" % albumtitle).encode("utf-8")