Outils pour utilisateurs

Outils du site


logiciel_dlfix

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”.
logiciel_dlfix.txt · Dernière modification : 2012/04/12 10:52 de thierry