]> gitweb.pimeys.fr Git - scripts-20-100.git/blob - download_picasa_album.py
[bind_ftp] Dossier spécifique pour l'Upload sur zeldren
[scripts-20-100.git] / download_picasa_album.py
1 #!/usr/bin/env python
2 # -*- encoding:utf-8 -*-
3
4 """
5
6 Pour télécharger un album Picasa sans avoir à utiliser l'application Picasa
7
8 Il faut lui fournir le l'url vers le flux RSS
9
10 """
11
12 import urllib
13 import lxml.etree
14 import os
15
16 def get_album(url):
17 """Récupère le xml décrivant l'album à partir de l'``url`` du flux RSS"""
18 page = urllib.urlopen(url)
19 content = page.read()
20 parsed = lxml.etree.fromstring(content)
21 return parsed
22
23 def album_to_links(album):
24 """Un peu de xpath pour récupérer les liens directs des éléments
25 de l'``album``."""
26 medias = album.xpath("//media:group", namespaces=album.nsmap)
27 processed = []
28 for media in medias:
29 contenturls = media.xpath("./media:thumbnail", namespaces=media.nsmap)
30 contenturl = contenturls[-1]
31 contenturl = [val for (kw, val) in contenturl.items() if kw == "url"][0]
32 # On récupère la meilleure résolution de l'image
33 contenturl = contenturl.replace("s288", "s5000")
34 title = media.xpath("./media:title", namespaces=media.nsmap)[0]
35 title = title.text
36 processed.append([title, contenturl])
37 return processed
38
39 def download_file(url, path):
40 """Télécharge le fichier depuis l'``url`` et l'enregistre dans ``path``."""
41 page = urllib.urlopen(url)
42 with open(path, "w") as f:
43 bloc = page.read(4096)
44 while bloc != "":
45 f.write(bloc)
46 bloc = page.read(4096)
47
48 def do_all(rss_url, folder):
49 """Télécharge tout l'album depuis ``rss_url`` et le stocke dans ``folder``"""
50 album = get_album(rss_url)
51 titles = album.xpath("//image/title", namespaces=album.nsmap)
52 albumtitle = titles[0].text
53 os.mkdir("%s/%s" % (folder, albumtitle))
54 linktitles = album_to_links(album)
55 for [title, url] in linktitles:
56 print "Downloading %s : %s" % (title, url)
57 download_file(url, "%s/%s/%s" % (folder, albumtitle, title))
58 return albumtitle
59
60 if __name__ == "__main__":
61 import sys
62 rss_url = sys.argv[1]
63 albumtitle = do_all(rss_url, ".")
64 print (u"Téléchargé dans %s" % albumtitle).encode("utf-8")