# [SCRIPT] Télécharger un album PicasaWeb

## Magic Banana

[malife]

J'ai réussi à faire comprendre à ma mère qu'il existe des manières plus propres de partager ses photos de Noël que de remplir les boîtes mail de ses contacts. Elle a donc maintenant une "galerie" PicasaWeb qu'elle alimente via F-Spot. Elle a tellement eu de succès avec sa "nouvelle" approche que le reste de la famille s'y est mis aussi.  :Very Happy:  Maintenant elle voudrait pouvoir télécharger l'ensemble des photos d'un album sans avoir à les regarder une à une.

[/malife]

Google restreint le téléchargement d'albums entiers aux utilisateurs de son logiciel propriétaire (et uniquement disponible sous Windows) Picasa. Après une petite recherche, j'ai découvert que d'autres utilisateurs se sont penchés sur ce problème avant moi. J'ai ainsi déniché un script bash incorrect qui nécessite un parseur XML en dépendance (bin voyons...  :Rolling Eyes:  ) et un programme en C# (il y a des claques qui se perdent) qui, malgré certains problèmes (impossible de télécharger un album "privé"), semble fonctionner dans l'environnement Mono. Rien qui ne me satisfasse vraiment en somme ! En outre, tous deux prennent en entrée l'adresse du fil RSS (plutôt que directement l'adresse de l'album) et ne permettent pas de télécharger d'un coup tous les albums publiques d'un utilisateurs.

Je me suis donc penché sur le code des pages PicasaWeb et ai vite compris qu'il n'allait pas être bien compliqué de faire tout cela en quelques lignes de bash et sans aucune dépendances (les commandes les plus compliquées que j'utilise sont wget et grep !). Voilà le résultat :

```
#!/bin/bash

# Distributed under the terms of the GNU General Public License v3 or later

# AUTHOR: Loïc Cerf

# e-mail: magicbanana@gmail.com

WGET_OPT="-q -T 180 -t 3 -c"

EX_USAGE=64

EX_NOHOST=68

if [ -z "$1" -o "$1" = "--help" -o "$1" = "-h" ]

then

    echo "Usage: $0 url [destination]"

    exit

fi

page=${1#*picasaweb.google.*/}

if [ "$page" = "$1" ]

then

    echo "\"$1\" is not the URL of a PicasaWeb album or gallery" 1>&2

    exit $EX_USAGE

fi

temp=`mktemp`

if wget $WGET_OPT -O $temp "$1"

then

    finalPage=${page#*/}

    if [ -z "$finalPage" -o "$finalPage" = "$page" ]

    then

        # $temp is a gallery

   if [ -z "$2" ]

   then

       destination=`grep -m 1 "^var _user" $temp`

       destination=${destination##*nickname:\"}

       set "$1" "${destination%%\"*}"

   fi

   mkdir -p "$2"

   cd "$2"

   grep -E -o "$1"[/]?[[:alnum:]:.%~_-]+ $temp | sort | uniq |

   while read album

   do

       "$0" $album &

   done

    else

        # $temp is an album

   if [ -z "$2" ]

   then

       destination=`grep -m 1 "^var _album" $temp`

       destination=${destination##*title:\"}

       set "$1" "${destination%%\"*}"

   fi

   grep -E -o {id:\"[0-9]+\",s:\"[[:alnum:]:\\.%~_-]+ $temp |

       while read picture

       do

      picture=${picture##*\"}

      picture=${picture/\x2Fs144/}

      wget $WGET_OPT -P "$2" ${picture//\x2F//} &

       done

    fi

else

    exit $EX_NOHOST

fi

rm $temp

```

L'utilisation de ce script est très simple : picasaweb-download URL [destination]

L'URL peut être soit celle d'un album (du type http://picasaweb.google.com/UTILISATEUR/ALBUM ou http://picasaweb.google.com/UTILISATEUR/ALBUM?authkey=XXXXXXXXXXX) soit celle d'une galerie entière (du type http://picasaweb.google.com/UTILISATEUR).

La destination est un nom de répertoire (existant ou non) facultatif. Si elle est absente, l'album (respectivement la galerie) sera téléchargé dans un répertoire portant son titre (respectivement le nom de l'auteur). Dans le cas d'une galerie, chaque album est téléchargé dans un sous-répertoire portant son nom.

Il est indispensable que ce script soit dans un répertoire de la variable PATH (typiquement /usr/bin) pour le téléchargement d'une galerie.

Obtenez les permissions root :

```
$ su
```

Ouvrez votre éditeur de texte préféré (ici gedit) sur un nouveau fichier dans un répertoire de la variable PATH (ici /usr/bin) :

```
# gedit /usr/bin/picasaweb-download
```

Copier-coller le code du script dans votre éditeur de texte. Fermez-le, puis rendez le script exécutable :

```
# chmod 755 /usr/bin/picasaweb-download
```

Tout retour d'expérience (même positif  :Laughing:  ) serait apprécié !Last edited by Magic Banana on Wed Jan 16, 2008 9:49 pm; edited 2 times in total

----------

## DidgeriDude

Un seul mot : Excellent !

Par contre, je n'ai pas testé sur un album privé...

----------

## Magic Banana

 *DidgeriDude wrote:*   

> Un seul mot : Excellent !

 

Merci.  :Embarassed: 

----------

## Magic Banana

Un album PicasaWeb qui intéressera les fans de KDE :

```
$ picasaweb-download http://picasaweb.google.com/mmauder/KDE400
```

Les images de cet album sont en 1600x1000. Les charger une à une dans son navigateur prend une petite éternité. Une raison supplémentaire d'utiliser picasaweb-download : télécharge maintenant et fait toi plus tard un diaporama dans d'excellentes conditions !  :Very Happy: 

----------

## gregool

excellent !

alors la c'est terrible ce truc!

merci a toi pour ce super boulot !

----------

## Magic Banana

De rien.  :Embarassed: 

Ce n'est pas grand chose. Des wget, quelques grep et le tour était joué.  :Wink: 

----------

## Mickael

C'est excellent banane,   :Wink:   change ton nom en Magic bash  :Rolling Eyes: 

----------

## gregool

j'ai testé plusieurs téléchargments d'album, aucun soucis, ça marche au poil !

----------

## Magic Banana

Merci encore pour vos compliments.  :Embarassed: 

----------

## Magic Banana

Je me suis permis d'apporter quelques modifications à mon script en éditant directement le premier message de ce thread. Il y avait en effet deux problèmes mineurs dans la version précédente :

* Le téléchargement d'une galerie complète ne fonctionnait pas si l'URL était donnée avec un / final. C'est corrigé.

* Les titres d'album (et probablement aussi les noms d'utilisateur) trop longs était tronqué dans le champ <title>. J'utilise maintenant les variables _user et _album. Plus de problème.

Je serai content d'avoir de nouveaux retours.

----------

## math_roc

j'viens de tester sur l'album de kde, ça marche parfaitement ^^

thx  :Wink: 

----------

## Magic Banana

Le Logiciel Libre c'est le Bien ! Un utilisateur, nommé Peter Woulfenberg, vient de m'envoyer un e-mail pour me suggérer une amélioration à la fois simple et très maligne. Elle tient en un caractère : '&'. Placé en fin de la ligne téléchargeant une photo, il lance cette commande en arrière plan. Ainsi, le script continue et commence le téléchargement des photos restantes. En suivant la même idée, j'ai fait la même modification pour télécharger plusieurs albums en parallèle. Le script est maintenant plus rapide que l'éclair. Remerciez Peter pour ces performances. Remercier aussi le Logiciel Libre. En effet, si ce logiciel était propriétaire, vous seriez condamné à des performance médiocres.

Essayez seulement la nouvelle version et vous comprendrez ! J'ai directement fait les modifications sur le premier message de ce thread.

Je ne suis pas trop sûr mais je pense que le script est maintenant soumis à une limite liée au nombre maximum de processus par utilisateur (il peut y en avoir autant que de photos à télécharger). Toute information à ce propos serait la bienvenue.

----------

## didzzzz

Bonjour,

Le téléchargement des photos provenant de Picasa est une tache fastidieuse que j'avais remise à plus tard. Mais en trouvant cette astuce, il me fallait essayé.

J'ai donc tenté de récupérer l'album photo de kde4, malheureusement sans succès. Le script tourne en boucle pendant un court instant mais rien ne se produit. Malgré la simplicité d'installation, j'ai certainement oublié quelque chose.

----------

## Magic Banana

Dans les dernières semaines, Google a changé par deux fois le format des pages PicasaWeb. J'ai adapté ce script pour qu'il puisse fonctionner sur le nouveau format... et j'en ai profité pour ajouter de nouvelles fonctionnalités. Pour tout savoir (et pour télécharger la nouvelle version) : ça se passe dans cet article sur Blue GNU (en anglais).

C'est fou le succès de ce script (plus de 10000 lecteurs de l'article, sur Blue GNU, qui présentait la version précédente. Personellement, je n'utilise pas PicasaWeb (j'ai, au départ, écrit ce script pour ma mère).  :Laughing: 

Vous pensez que ça vaut la peine que je traduise en français le nouvel article pour ce forum ?

----------

## kwenspc

 *Magic Banana wrote:*   

> 
> 
> Vous pensez que ça vaut la peine que je traduise en français le nouvel article pour ce forum ?

 

Oui, même pas besoin de poser la question  :Wink: 

----------

