Voire même petit script + crontab histoire qu’ils soient téléchargés automatiquement et arrivent sur le bureau tous les jours.
Crontab :
PATH=~/bin:~/sbin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/usr/bin/X11:/usr/games:/usr/local/games
SHELL=/bin/bash
0 */5 * * tue,wed,thu,fri,sat { { { echo starting; cdanslair-download -c yesterday; echo finished; } 2>&1 | logger -t cdanslair-download; } &>/dev/null; true; }
Script :
#! /usr/bin/env bash
######################################################################
## Aide en ligne
usage() {
cat <<EOF
NAME
$prog - telecharge les videos de l'emission $EMISSION
USAGE
$prog DATE ...
$prog DEBUT-FIN
OPTIONS
-c, --continue
Ne retelecharge pas un fichier deja telecharge.
-h, --help
Affiche l'aide en ligne.
-p, --pretend
Affiche juste les telechargements sans les realiser.
-V, --version
Affiche le numero de version.
ARGUMENTS
DATE
Une ou plusieurs dates au format DD/MM/YYYY, YYYYMMDD,
"today" ou "yesterday".
DEBUT-FIN
Telecharge toutes les videos entre les dates debut et fin,
dates de debut et fin incluses.
EXAMPLES
$prog 09/02/2009
$prog 20090206 20090207 08/02/2009 20090209
$prog 20090720-20090724 20090727-20090731
$prog yesterday
FILES
`destdir`
Repertoire de destination ou seront stockees les videos
qui ont fini d'etre telechargees
`tmpdir`
Repertoire temporaire servant aux videos en cours de
telechargement
AUTHOR
Yannick Le Saint (kyncani) <y.lesaint@gmail.com>
VERSION
$VERSION
EOF
}
## Convertit une date au format YYYYMMDD
yyyymmdd() {
local d="[[:digit:]]"
local v
if echo "$1" | grep -q "^$d$d$d$d$d$d$d$d\$"; then
echo "$1"
return 0
fi
if echo "$1" | grep -q "^$d$d/$d$d/$d$d$d$d\$"; then
echo "$1" | sed "s#^\\($d$d\\)/\\($d$d\\)/\\($d$d$d$d\\)\$#\\3\\2\\1#"
return 0
fi
v=`date +%Y%m%d -d "$1"`
if test $? -eq 0; then
echo "$v"
return 0
fi
echo "$prog: date invalide ($1)" >&2
return 1
}
## Convertit une date au format DD/MM/YYYY
ddmmyyyy() {
local d="[[:digit:]]"
local v
if echo "$1" | grep -q "^$d$d/$d$d/$d$d$d$d\$"; then
echo "$1"
return 0
fi
if echo "$1" | grep -q "^$d$d$d$d$d$d$d$d\$"; then
echo "$1" | sed "s#^\\($d$d$d$d\\)\\($d$d\\)\\($d$d\\)\$#\\3/\\2/\\1#"
return 0
fi
v=`date +%Y%m%d -d "$1"`
if test $? -eq 0; then
echo "$v"
return 0
fi
echo "$prog: date invalide ($1)" >&2
return 1
}
## Repertoire final ou deplacer la video
CDANSLAIR_DESTDIR=""
destdir() {
local d
local i
if test "$CDANSLAIR_DESTDIR" != ""; then
echo "$CDANSLAIR_DESTDIR"
return 0
fi
for d in Desktop Bureau Desktop; do
d="$HOME/$d"
test -e "$d" && break
done
for i in Download "T�l�chargements" "T�l�chargement" Download; do
i="$d/$i"
test -e "$i" && break
done
CDANSLAIR_DESTDIR="$i"
export CDANSLAIR_DESTDIR
echo "$CDANSLAIR_DESTDIR"
}
## Repertoire temporaire ou telecharger la video
tmpdir() {
echo "`destdir`/.Incomplete"
}
## Helper pour download_cmd et resume_cmd
## Usage: tool_cmd type $url $filename [tool]
tool_cmd() {
local type=`echo "$1" | tr '[a-z]-' '[A-Z]_'`
local tool
local conf
eval "tool=\"\$$type\""
test $# -eq 4 && tool="$4"
conf=`echo "$tool" | tr '[a-z]-' '[A-Z]_' | sed "s/^/${type}_/"`
eval "echo \$$conf" | sed "s#__URL__#$2#g; s#__FILENAME__#$3#g"
}
## Retourne la ligne de commande realisant le telechargement
## Usage: download_cmd $url $filename [downloader]
download_cmd() {
tool_cmd downloader "$1" "$2" $3
}
## Retourne la ligne de commande reprenant un telechargement interrompu
## Usage: download_cmd $url $filename
resume_cmd() {
tool_cmd resumer "$1" "$2" $3
}
## Retourne vrai si le fichier telecharge a une taille coherente
checkfilesize() {
local f="$1"
local s
test -e "$f" || return 1
s=`wc -c "$f" | sed 's/[[:space:]].*//'`
test "$s" -ge "$FILESIZEMIN"
}
######################################################################
## Nom du programme
prog=`basename "$0"`
## Version du programme
VERSION="0.0.8"
## Nom de l'emission
EMISSION="c dans l'air"
## Url depuis laquelle telecharger les vides
VIDEOURL="mms://a533.v55778.c5577.e.vm.akamaistream.net/7/533/5577/42c40fe4/lacinq.download.akamai.com/5577/internet/cdanslair/cdanslair_%YYYYMMDD%.wmv"
## Taille minimum du fichier produit
FILESIZEMIN=100000000
## Outils permettant de telecharger les videos
DOWNLOAD_HANDLERS="cvlc vlc mimms"
## Outil utilise pour realiser le telechargement (autodetecte)
DOWNLOADER=
RESUMER=
## Comment invoquer les differents downloaders
DOWNLOADER_CVLC="cvlc --play-and-exit __URL__ --sout=__FILENAME__"
DOWNLOADER_MIMMS="mimms __URL__ __FILENAME__"
RESUMER_MIMMS="mimms --resume __URL__ __FILENAME__"
DOWNLOADER_VLC="vlc -I dummy --play-and-exit __URL__ --sout=__FILENAME__"
## Nombre de fois ou poursuivre le telechargement en cas d'erreur
RETRY_LIMIT=3
## Liste des dates a telecharger
DATES=
## Liste des dates qui n'ont pas pu etre telechargees
ERRORS=
## Code de retour
RET="true"
## Option --pretend
PRETEND=false
## Option --continue
CONTINUE_OPT=false
######################################################################
## Analyse de la ligne de commande
while test $# -gt 0; do
case "$1" in
--continue|-c) CONTINUE_OPT=true;;
--help|-h) usage && exit || exit 1;;
--pretend|-p) PRETEND=true;;
-V|--version) { echo "$VERSION" && exit || exit 1; };;
-*) { echo "$prog: option $1 inconnue" >&2; exit 1; };;
*) DATES="$DATES $1";;
esac
shift
done
test "$DATES" = "" && { usage && exit || exit 1; }
######################################################################
## Quelques verifications que l'environnement est correct
if test "$DOWNLOADER" = ""; then
for t in $DOWNLOAD_HANDLERS; do
test "`download_cmd - - $t`" = "" && continue
if type "$t" >/dev/null 2>&1; then
DOWNLOADER="$t"
echo "Utilisation de $t pour realiser les telechargements"
break
fi
done
if test "$DOWNLOADER" = ""; then
echo "$prog: $DOWNLOAD_HANDLERS introuvables" >&2
echo "$prog: impossible de telecharger les videos" >&2
exit 1
fi
fi
if test "$RESUMER" = ""; then
for t in $DOWNLOAD_HANDLERS; do
test "`resume_cmd - - $t`" = "" && continue
if type "$t" >/dev/null 2>&1; then
RESUMER="$t"
echo "Utilisation de $t pour reprendre des telechargements interrompus"
break
fi
done
fi
for d in "`tmpdir`" "`destdir`"; do
test -e "$d/" \
|| mkdir -p "$d/" \
|| { echo "$prog: impossible de creer le repertoire $d/" >&2; exit 1; }
done
######################################################################
for i in $DATES; do
if echo "$i" | grep -q -- -; then
d1=`echo "$i" | sed 's/^\([^-]*\)-.*$/\1/'`
d2=`echo "$i" | sed 's/^[^-]*-\(.*\)$/\1/'`
else
d1="$i"
d2="$d1"
fi
d1=`yyyymmdd "$d1"`
test $? -eq 0 || exit 1
d2=`yyyymmdd "$d2"`
test $? -eq 0 || exit 1
dn="$d1"
while true; do
d="$dn"
test "$d" -le "$d2" || break
dn=`echo "$d" + 1 | bc`
url=`echo "$VIDEOURL" | sed "s#%YYYYMMDD%#$d#g"`
s=`ddmmyyyy "$d"`
test $? -eq 0 || exit 1
f=`tmpdir`/`echo "$url" | sed 's#.*/##'`
f2=`destdir`/`echo "$url" | sed 's#.*/##'`
if $CONTINUE_OPT && test -e "$f2"; then
echo "$EMISSION du $s deja telechargee"
continue
fi
echo "Telechargement de $EMISSION du $s"
download=`download_cmd "$url" "$f"`
resume=`resume_cmd "$url" "$f"`
success=false
if $PRETEND; then
if test "$resume" = ""; then
echo "$download"
else
echo "$download \\"
echo "|| $resume"
fi
continue
fi
$download && checkfilesize "$f" && success=true
retry_count=0
while ! $success && test "$resume" != "" -a $retry_count -lt $RETRY_LIMIT; do
retry_count=`echo $retry_count + 1 | bc`
echo "Reprise de $f $retry_count/$RETRY_LIMIT"
$resume && checkfilesize "$f" && success=true
done
if ! $success; then
test -e "$f" && rm -f "$f"
ERRORS="$ERRORS $d"
RET=false
continue
fi
if test "`tmpdir`" != "`destdir`" && ! mv -f "$f" "`destdir`/"; then
echo "$prog: impossible de deplacer $f dans `destdir`/" >&2
ERRORS="$ERRORS $d"
RET=false
rm -f "$f" || echo "$prog: impossible de supprimer $f" >&2
continue
fi
done
done
if test "$ERRORS" != ""; then
RET=false
{
echo "";
echo "$prog: Erreur de telechargement des videos $EMISSION du" >&2;
p=`echo "$prog" | sed 's/./ /g'`
for d in $ERRORS; do
d=`ddmmyyyy "$d"`;
echo "$p - $d";
done;
echo "";
} >&2
fi
$RET
######################################################################
##
## CHANGELOG
##
## - 01/02/2011,12:17 (version 0.0.8)
## - FIX: meilleure detection de fichiers non telecharges
## - 29/12/2010,17:06 (version 0.0.7)
## - Utilisation de mimms --resume si disponible
## - 29/12/2010,11:31 (version 0.0.6)
## - Support des dates yesterday et today.
## - 21/12/2010,16:10 (version 0.0.5)
## - Ajout de --continue
## - Support de vlc en plus de cvlc
## - 26/05/2010,19:40 (version 0.0.4)
## - Utilisation de cvlc au lieu de mimms si il est disponible
## - 27/02/2010,21:19 (version 0.0.3)
## - Detecte si le bureau s'appelle Desktop ou Bureau
## - Le r�pertoire de t�l�chargement temporaire est maintenant cach�
## - 22/10/2009,21:04 (version 0.0.2-rc1)
## - FIX: documentation des bornes d'un interval
## - 14/09/2009,20:17 (version 0.0.2)
## - FIX: la borne superieure d'un interval est comprise dans celui-ci
## - Ajouts de --pretend et --version
## - 14/02/2009,11:20 (version 0.0.1)
## - Premiere version
##
######################################################################