====== dlfix ====== ===== Description ===== **''dlfix''** est un script en Perl permettant d'automatiser des traitements avec le service [[http://dl.free.fr|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|dlfix-0.24-BETA.zip}} <= | 18/03/2012 | | Télécharger la version 0.22 BETA | => {{:dlfix-0.22-BETA.zip|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 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: 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: Matrix VII - Le Film Le script "dlfree.php" : "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 < 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". |