]> gitweb.pimeys.fr Git - scripts-20-100.git/commitdiff
Pour télécharger un album Picasa
authorVincent Le Gallic <legallic@crans.org>
Wed, 23 Oct 2013 14:17:59 +0000 (16:17 +0200)
committerVincent Le Gallic <legallic@crans.org>
Wed, 23 Oct 2013 14:18:25 +0000 (16:18 +0200)
Codé pour récupérer les photos des vieux events Cr@ns

download_picasa_album.py [new file with mode: 0755]

diff --git a/download_picasa_album.py b/download_picasa_album.py
new file mode 100755 (executable)
index 0000000..b86cf06
--- /dev/null
@@ -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")