#1 Le 30/12/2011, à 13:18
- grobs
[Script à améliorer] Télécharger les favoris d'un compte DeviantART
Bonjour à toutes et à tous.
Ce topic est simplement là pour vous faire partager un script que j'ai fait et que j'utilise depuis maintenant plus d'un an.
Le script en question permet de télécharger toutes les images favorites d'un compte DeviantART.
Le script est utilisable en l'état et fonctionne très bien mais je pense qu'il y a des optimisations à faire.
Voici les idées de modifications à apporter au script :
- Gérer les doublons (pour le moment deux doublons sont des fichiers du même nom, il serait bon de faire un md5 par exemple pour détecter les doublons)
- Faire une interface graphique (que me conseillez-vous d'utiliser ?)
- Gérer des arguments pour le script (pour pouvoir prédéfinir les variables $LIMIT et $deviantID autrement qu'en dur)
Des idées ?
#!/bin/bash
#DeviantART Favorites Downloader
deviantID=$1
LIMIT=50
round=0
nbrOfEmptyResults=0
tmpDirectory="tmp_links"
RED=`tput setaf 1`
GREEN=`tput setaf 2`
YELLOW=`tput setaf 3`
BLUE=`tput setaf 4`
PURPLE=`tput setaf 5`
AZURE=`tput setaf 6`
WHITE=`tput setaf 7`
getLIST () {
# linkLIST=$(curl --retry-max-time 15 --retry 3 --silent "http://backend.deviantart.com/rss.xml?q=favby:$deviantID&type=deviation&limit=$LIMIT&offset=$round" | grep "fc" | cut -d '"' -f 2)
# linkLIST=$(curl --retry-max-time 15 --retry 3 --silent "http://backend.deviantart.com/rss.xml?q=favby:$deviantID/40022815&type=deviation&limit=$LIMIT&offset=$round" | grep "fc" | cut -d '"' -f 2)
linkLIST=$(curl --retry-max-time 15 --retry 3 --silent "http://backend.deviantart.com/rss.xml?q=favby:$deviantID&type=deviation&limit=$LIMIT&offset=$round" | perl -0ne 'print "$1\n" while (/media:content url=\"(.*?)\".*?/igs)' | grep -v "http://www.deviantart.com/download/")
if [[ -z $linkLIST ]]
then
echo "${PURPLE}No more picture ?${WHITE}"
nbrOfEmptyResults=`expr $nbrOfEmptyResults + 1`
else
for picture_url in $linkLIST
do
filename=`echo "$picture_url" | rev | cut -d"/" -f1 | rev`
if [ ! -h "./$tmpDirectory/$filename" ] && [ ! -f "./$filename" ]
then
if [ `echo "$filename" | grep -iE "\.(png|jpe?g|gif|tiff)$" | wc -l` -eq 1 ]
then
echo "Télechargement du fichier ${AZURE}$filename${WHITE}"
wget --no-verbose ${picture_url}
else
echo "${RED}File \"$filename\"is not a picture.${WHITE}"
fi
else
# printf "%-60s (%)" "$filename" "[already exists]"
echo "$filename ${GREEN}[already downloaded]${WHITE}"
fi
done
fi
round=$(( $round + $LIMIT ))
if [ $nbrOfEmptyResults -lt 6 ]
then
getLIST
fi
}
############################################################
# On crée le répertoire des liens temporaires
if [ ! -d "$tmpDirectory" ]
then
mkdir "$tmpDirectory"
fi
# Préparation de l'environnement
for directory in *
do
if [ -d "$directory" ]
then
cd "$directory"
for file in *
do
if [ -f "./$file" ] && [ ! -h "../$tmpDirectory/$file" ]
then
# On protège le nom du fichier par le -- qui permet de ne pas interprêter les arguments suivants comme des coptions, même s'ils commencent par - ou par --
ln -s -- "$file" "../$tmpDirectory/"
fi
done
cd ../
fi
done
############################################################
getLIST
rm -r "$tmpDirectory"
echo "${BLUE}Round: $round${WHITE}"
Pour utiliser ce script, téléchargez-le sous un nom quelconque (da_downloader.sh par exemple) puis lancez-le de la manière suivante :
./da_downloader.sh LE_NOM_DU_COMPTE
en remplaçant évidemment LE_NOM_DU_COMPTE par un ID DeviantART ("matmoon" par exemple).
PS : merci de faire un retour ici si vous utilisez mon script
"Mieux vaut vérifier que les enceintes sont bien branchées avant de recompiler un noyau". (vieux proverbe de Debianneux)
Hors ligne
#2 Le 25/05/2013, à 10:58
- spinoziste
Re : [Script à améliorer] Télécharger les favoris d'un compte DeviantART
Salut super ton script .
Chez moi il fonctionne à priori nickel . Il faut juste préalablement installer : curl .
Dernière modification par spinoziste (Le 25/05/2013, à 10:58)
Nous mourrons tous .
Hors ligne