From: Vincent Le Gallic Date: Wed, 23 Oct 2013 14:17:59 +0000 (+0200) Subject: Pour télécharger un album Picasa X-Git-Url: http://gitweb.pimeys.fr/?a=commitdiff_plain;h=19e5243bf137b8b691c109c5811cbeba7769e11e;p=scripts-20-100.git Pour télécharger un album Picasa Codé pour récupérer les photos des vieux events Cr@ns --- diff --git a/download_picasa_album.py b/download_picasa_album.py new file mode 100755 index 0000000..b86cf06 --- /dev/null +++ b/download_picasa_album.py @@ -0,0 +1,67 @@ +#!/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")