Table des matières
dlfix
Description
dlfix
est un script en Perl permettant d'automatiser des traitements avec le service dl.free.fr .
Le but principale étant de rendre disponible sur un web, une liste de fichiers placé sur dl.free.fr, sans intervention humaine (aprés un minimum de configuration, bien sur).
dlfix
n'utilise qu'un simple fichier pour stocker les informations: par defaut il se nomme “dlfix.conf” et se trouve dans le répertoire courant.
Telecharger
Télécharger la version 0.24 BETA | ⇒ dlfix-0.24-BETA.zip ⇐ | 18/03/2012 |
Télécharger la version 0.22 BETA | ⇒ dlfix-0.22-BETA.zip ⇐ | 03/05/2009 |
$ unzip dlfix.zip
Aprés extraction, il peut être nécessaire de rendre le script éxécutable:
$ chmod a+x dlfix
Installer: copier quelque part…
Syntaxe générale
dlfix <commande> <options>
Exemples:
$ dlfix configure --create --login mon_compte_free --password mon_pass_de_compte $ dlfix manage --add ./films/matrix_vii_dvdscr_vostfr.avi
Principes généraux
- Avant tout autre opération, on créé un fichier de configuration. Voir la commande “configure”.
- On organise les fichiers. Voir la commande “manage”.
- On peut effectuer des envois ou des tests “à la main” avec la commande “net”.
- Pour automatiser les transferts, utiliser la commande “run”.
- La commande “run” ne fonctionne qu'avec des fichiers précédements activé avec l'option “–enable” de la commande “manage”.
- Diffuser la liste des relations “fichiers” et “lien” avec la commande “publish”.
Techniques
- L'envoi de fichiers est effectué par FTP
- Lorsqu'un traitement va bien,
dlfix
ne n'affiche rien (juste “exit(0)
”) (sauf s'il y a l'option–verbose
) - Lorsqu'il y a des erreurs, elles sont envoyées sur STDERR (et le reste sur STDOUT), et
dlfix
retourne “exit(1)
”.
En pratique
creer une configuration
$ dlfix configure --create --login mon_compte_free --password mon_pass_de_compte
Un fichier dlfix.conf
est créé.
ajouter des fichiers
$ dlfix manage --add ./films/matrix_vii_dvdscr_vostfr.avi $ dlfix manage --add ./music/nin/06-nine_inch_nails-still_it.mp3
Pour ajouter la totalité d'un répertoire (mais pas les sous répertoires):
$ dlfix manage --glob-timeout 90d --glob "./music/Devin_Townsend/Devin_Townsend_-_2014_-_Ziltoid_2/*.mp3"
ou bien:
... --glob "./music/Devin_Townsend/Devin_Townsend_-_2012_-_Epicloud/*.{mp3,jpg,avi}"
activer l'utilisation
De tout les fichiers:
$ dlfix manage --enable-all
automatiser l'envoi
$ dlfix run --upload
1 Fichier est envoyé, si necessaire
tester l'existence d'un fichier (précédement uploadé)
$ dlfix run --exist
1 fichier est testé.
Bien sur, 10 fichiers peuvent être testé ainsi:
$ dlfix run --exist=10
publier la liste des liens
$ dlfix publish --ftp-login mon_compte_freeperso --ftp-password mon_passe_compte_perso
Un fichier dlfix.txt
devrait apparaitre en racine du site “mon_compte_freeperso”, contenant la correspondance:
<nom_du_fichier> <dl.free.fr lien>
Exemple:
$ cat dlfix.txt matrix_vii_dvdscr_vostfr.avi http://dl.free.fr/lW5kcczmy 06-nine_inch_nails-still_it.mp3 http://dl.free.fr/cgvipeyku
(Ce ne sont pas des liens valides: ce ne sont que des exemples)
PHP
Exemple de scripte en PHP.
On suppose un serveur www, avec un fichier “dlfix.txt” (la “publication” de dlfix).
Au niveau d'un serveur www, on peut imaginer un lien comme ceci:
Télécharger: Matrix VII - Le Film
En html, ca donne:
Télécharger: <a href="dlfree.php?file=matrix_vii_dvdscr_vostfr.avi">Matrix VII - Le Film</a>
Le script “dlfree.php” :
<? # recupere la valeur de l'argument '&file=' $name = $_GET['file']; # est-ce vide ? if ( $name ) { # non, alors continuons # On ouvre le fichier # ( le @ supprime le vilain message d'erreur ) $fh = @fopen( 'dlfix.txt','r' ); if ( $fh ) { # le fichier est ouvert # on parcours chaque ligne dont le format est "nom-fichier" <tab> "lien" while( $linkinfo = fscanf ( $fh, "%s\t%s\n" ) ) { # extraire le "nom" et le "lien" list ( $fname, $dllink ) = $linkinfo; # comparer if ( $name == $fname ) { # identique: alors on redirige sur ce lien header( 'Status: 302 Found', false, 302 ); header( "Location: $dllink" ); # et puis c'est la fin exit; } } fclose( $fh ); } } # si on est la, c'est qu'il y a un probleme... # on redirige a la racine. header( 'Location: /' ); exit; ?>
CGI Perl
Lien: http://johnbokma.com/perl/redirectioncgiscript.html
Exemple, soit un lien comme cela href=/cgi-bin/dlfix.pl?&file=filename.ext
et un script dlfix.pl
dans /cgi-bin
:
#!/usr/bin/perl -w use strict; use warnings; { if ( defined( $ENV{QUERY_STRING} ) ) { if ( my ( $filename ) = $ENV{QUERY_STRING} =~ /\&file=(.*\.\w+)?/ ) { if ( open( my $h, '<' , '../dlfix.txt' ) ) { my $dllink; while( my $li = readline( $h ) ) { if ( my ( $fn, $dl ) = split(/\t/,$li) ) { if ( $fn eq $filename ) { $dllink = $dl; last; } } } close( $h ); if ( $dllink ) { print STDOUT <<HEAD; Status: 302 Found Location: $dllink HEAD exit( 0 ); } } } } print STDOUT <<HEAD; Status: 302 Found Location: / HEAD 0; }
dlfix ?
--------------------- dlfix Version: 0.24 BETA --------------------- Syntaxe générale: dlfix commande {options} Exemple: dlfix configure --conf myconf.conf --create Limites: - Durée d'éxécution; voir --alarm - Un verrou est positionné sur le fichier de configuration, afin d'empecher plusieurs éxécutions simultannées. Options communes a toutes commandes: -c, --conf=FILE Nom du fichier de configuration. A défaut: dlfix.conf (dans le répertoire courant) -v, --verbose Augmenter la verbosité --debug Afficher des informations de "debug" --password=PASSWORD Le mot de passe associé au "login" declarer lors de "configure". (Il n'y a qu'avec la commande "configure" que le mot de passe est enregistré) --alarm=MINUTES Nombre de minutes avant l'arrêt forcé du programme. Cela peut être utile si une transmission bloque. A défaut: 45 minutes --nostore N'enregistre pas l'état du logiciel. Cela peut permettre d'effectuer des traitements ou des tests sans changer l'état du logiciel. --nolock N'utilise pas le verrou sur le fichier de configuration. (Attention: plusieurs fonctionnement simultannés, sans verrou, est harsardeux) Options communes pour communiquer: --bind-address=IP_ADDRESS Adresse IP a utiliser localement (Pour permettre de choisir une autre interface réseau, ou une autre route) --dlfreeAddr=HOST_ADDRESS Pour le transfert des fichiers, adresse ou nom du site "dl.free.fr". Par defaut: dl.free.fr --passive=MODE Client FTP en Mode passif pour 1, ou en mode actif pour 0. Par defaut: 0 Commandes: configure : ------------ Configurer. Options: --create Créer (écraser) le fichier de configuration. C'est la __première__ action à faire: créer un fichier de configuration. --login=LOGIN 'login' associé pour le transfert --nopassword Supprime le mot de passe associé. (il devient vide) --password=PASSWORD Mot de passe associé au 'login'. Utilisé ici, le mot de passe est enregistré en clair ! Avec les autres commandes, le mot de passe n'est pas enregistré. (changer les droits de lecture sur le fichier peut être plus malin) Exemple: dlfix configure --create --login toto --password t0t0 info : ------------ Afficher des informations sur la configuration. Options: --dump Affiche l'état de l'application en brut de Perl. (pour debug) --showpw Montre le "password" Exemple: dlfix info list : ------------ Afficher des informations sur les fichiers. Exemple: dlfix list manage : ------------ Gerer les fichiers. Options: --add=FILE Ajouter un fichier a la liste. Il faut donner le chemin vers le fichier. Par la suite, le nom du fichier, seul, suffira pour l'identifier. --del=FILE Supprimer un fichier de la liste --disable=FILE, --pause=FILE Désactiver un fichier --disable-all Désactiver tout les fichiers --enable=FILE, --unpause=FILE Activer un fichier (Comprendre: autoriser la commande "run" a prendre en compte ce fichier) --enable-all Activer tout les fichiers --glob=<DIR> 1) Ajouter l'ensemble des fichiers (mais pas les sous répertoires) 2) Supprimer (de la liste) tout les fichiers qui n'existe plus, en tenant compte d'un delay. (voir --glob-timeout) Par defaut: l'ensemble des fichiers sont "enable" automatiquement. --glob-timeout=DELAY DELAY est le nombre de secondes avant d'oublier le fichier. Par defaut: 30d (30 jours) 10 => 10 secondes 10m => 10 minutes 10h => 10 heures 10d => 10 jours 10M => 10 mois now => 0 seconde (maintenant) Le fichier est oublier immediatement s'il n'existe plus ( voir "--exist" ) Exemples: dlfix manage --add=/mnt/arch/fichier.mp3 --enable=fichier.mp3 dlfix manage --del=fichier.mp3 dlfix manage --glob=/var/backups --glob=/mnt/backups-share net : ------------ Effectuer des traitements sur le reseau. Options: --force Forcer les commandes a prendre aussi en compte les fichiers qui ne sont pas actif (disable). --del=FILE Effacer un fichier, par son lien d'effacement. --del-all Effacer tout les fichiers. --exist=FILE Tester l'existence d'un fichier. (Et mettre a jour les liens en conséquence) --exist-all Tester l'existence de tout les fichiers. --upload=FILE Envoyer un fichier et mettre à jour les liens associés. --upload-all Envoyer tout les fichiers. Exemples: dlfix net --upload-all dlfix net --del-all --force publish : ------------ Publier la liste des fichiers et les liens. Sans option, affiche simplement la liste. Le nombre de destinataire FTP n'est pas limité. Options: --force Publier (via FTP) même si la publication n'a pas changé --ftp-file=FILE Chemin et nom du fichier final. A defaut: /dlfix.txt --ftp-host=HOST Adresse d'un serveur FTP. A defaut: ftpperso.free.fr --ftp-password=PASSWORD Mot de passe associé au nom d'utilisateur --ftp-port=PORT Numéro du port du serveur FTP. A defaut: 21 --ftp-user=USER Nom d'utilisateur pour s'authentifier --nooutput N'affiche pas la liste. --with-link Publier uniquement s'il y a un lien associé (pas de lien vide) Exemple: dlfix publish run : ------------ Traitement du transfert et des tests. Placer dans un "cron", rend le fonctionnement quasi-autonome. Options: --exist{=COUNT} Test l'existence de {COUNT} fichiers maximum. Les fichiers considérés sont ceux actif et ayant un lien de telechargement. Chaque fichier vu inexistant a ces liens de supprimés: il peut alors être candidat a un prochain "upload". A défaut: 1 fichier --reset Recreation des listes de traitement "upload" et "exist". Chaque liste est automatiquement regénérée lorsqu'elle a été entierement parcourue. --upload{=COUNT} Envoi de {COUNT} fichiers maximum: si necessaire. Les fichiers considérés sont ceux actif et n'ayant pas de lien de téléchargement. Lorsque le transfert a reussi, les liens sont mis à jour. A défaut: 1 fichier Exemple: dlfix run --reset --upload=999 --exist=999 Dans un cron, on peut avoir: */15 * * * * dlfix run --upload --alarm=20 1 * * * * dlfix run --exist --alarm=1 2 * * * * dlfix publish --alarm=1 --ftp-user=toto --ftp-password=t0t0 --ftp-file=/list.txt Lorsque nécessaire (un lien inèxistant), 1 fichier est transferé toutes les 15 minutes. Toutes les heures, à la minute "1", un lien est testé. Toutes les heures, à la minute "2", si la liste a changée, elle est transférée. version: ------------ Retourne la version du logiciel. Exemple: dlfix version Update: 26/03/2012
un cron
$ crontab -l 1 * * * * cd /home/thierry/mp3;./dlfix run --bind-address=192.168.1.99 --upload --alarm 20 1>/dev/null */10 * * * * cd /home/thierry/mp3;./dlfix run --bind-address=192.168.1.99 --exist --alarm 1 1>/dev/null 45 * * * * cd /home/thierry/mp3;./dlfix publish --bind-address=192.168.1.99 --ftp-user=toto --ftp-password=t0t0 --nooutput --alarm 1 1>/dev/null
Il faut eviter que le scripte demarre en même temps, à cause du “lock”. |