IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Perl Discussion :

Php en perl, probleme html::parser


Sujet :

Langage Perl

Vue hybride

newbies456 Php en perl, probleme... 20/07/2010, 11h57
michon Et si tu n'essayais pas de... 21/07/2010, 09h59
newbies456 :cry:Bonjour, je souhaite... 21/07/2010, 12h02
newbies456 Je bloque au niveau de... 21/07/2010, 15h50
michon Alors la je suis perdu... je... 21/07/2010, 16h21
newbies456 J'explique le principe: 1)... 21/07/2010, 17h15
newbies456 comment passer en paramettre... 27/07/2010, 16h54
Beniou Non pour récupérer les... 27/07/2010, 17h08
newbies456 c'est bon, j'ai trouvé je... 27/07/2010, 17h05
Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Juillet 2010
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 15
    Par défaut Php en perl, probleme html::parser
    Bonjour,

    je souhaite mettre mon plugin de nagios (connexion au nas bufallo + reboot) en perl mais j'ai bcp de mal a trouvé l'équivalent de mon code php. J'ai trouvé la fonction html:parser mais je n'arrive pas a comprendre son fonctionnement parfaitement.

    plugin nas.sh
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    <?php
     
    include_once("simple_html_dom.php");
     
    // initialisation de la session
     
    $curl = curl_init();
     
    $post_data = "txtAuthLoginUser=login&txtAuthLoginPassword=motdepasse&gPage=top&gMode=auth&txtHelpSearch=&gPage=top&gMode=&gType=auth&gKey=&gSSS=&gRRR=&hiddenDummyText=dummy";
     
    // configuration des options
     
    //URL a recuperer
    curl_setopt($curl, CURLOPT_URL,"http://XXX.XXX.XXX.XX/cgi-bin/top.cgi");
     
    //TRUE pour que PHP fasse un HTTP POST
    curl_setopt($curl, CURLOPT_POST, 1);
     
    //Toutes les donnees a passer lors dune operation de HTTP POST.
    curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data);
     
    //TRUE retourne directement le transfert sous forme de chaine de la valeur retourner par curl_exec() au lieu de lafficher directement.
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
     
    // execution de la session
     
    $page = curl_exec($curl);
     
    // fermeture des ressources
    curl_close($curl);
     
    // / / Cree un objet DOM a partir dune URL
    $html = str_get_html($page);
     
    //Cherche le bouton de type hidden et lire son contenu
    foreach($html->find('input[type=hidden]') as $input) {
            $tmp_data = $input->outertext;
     
    //Recherche par expression rationnelle insensible a la casse et recuperer les valeurs du champ value
            if (eregi('gSSS', $tmp_data)){
                    $gSSS =  $input->getAttribute("value");
            }
            if (eregi('gRRR', $tmp_data)){
                    $gRRR =  $input->getAttribute("value");
            }
     
     
    }
     
    print $gSSS . " / " . $gRRR;
     
    // etape 2 reboot :
    $curl = curl_init();
     
    $post_data = "txtHelpSearch=&gPage=maintenance&gMode=shutdown&gType=reboot&gKey=undefined&gSSS=" . $gSSS . "&gRRR=". $gRRR . "&hiddenDummyText=dummy";
    curl_setopt($curl, CURLOPT_URL,"http://XXX.XXX.XXX.XX/cgi-bin/top.cgi");
    curl_setopt($curl, CURLOPT_POST, 1);
    curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    $page = curl_exec($curl);
    curl_close($curl);
     
     
    if (eregi('Restarting the LinkStation now.',$page)){
            print "Good job :) ";
    }else{
            print "Echec redemrrage";
    }
     
    //print $page;
     
    ?>
    :

    voici mon 1er code Perl:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
     
    #!/usr/bin/perl
    use strict;
    use warnings;
    use HTML::Parser;
     
    my $page = "http://XX.XX.XX.XX/cgi-bin/top.cgi";
     
    # création de mon parser
    my $parser = HTML::Parser->new();
     
    # définition des mes evenements
    $parser->handler( text  => \&text,  "dtext" );
    $parser->handler( start => \&start, "tagname,attr" );
    $parser->handler( end   => \&end,   "tagname" );
     
    $parser->parse($page);
     
    # définition des callbacks
    # on les rassemble dans un bloc pour que les variables lexicales
    # sur lesquels on les clos soient invisibles du reste du script
     
    print get_data();
     
    {
        my $in_span_textegras;
        my @data;
     
        sub start {
            my ($tag, $attr) = @_;
            $in_span_textegras++
                if $tag eq 'input' and $attr->{type} eq 'hidden';
        }
     
        sub end {
            my ($tag) = @_;
            $in_span_textegras--
                if $tag eq 'input' and $in_span_textegras;
        }
     
        # tu souhaiteras peut-être faire ton traitement directement
        # dans cette fonction
        sub text {
            my ($text) = @_;
            push @data, $text
                if $in_span_textegras;
        }
     
        # si tu fais le traitement dans text() tu n'auras pas besoin
        # de cette fonction
        sub get_data {
            return @data;
        }
     
    }
    Mais rien n'est renvoyé.

    Ni avec ce deuxieme code perl

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    #!/usr/bin/perl -w
     
    use strict;
    package GetSummary;
    use base "HTML::Parser";
     
    my $self = "http://XX.XX.XX.XX/cgi-bin/top.cgi";
     
    #my $text = "Restarting the LinkStation now."
     
    my $meta_gSSS;
    my $meta_gRRR;
    my $h1_flag;
    my $meta_reboot;
     
    my $post_data = "txtAuthLoginUser=login&txtAuthLoginPassword=motdepasse&gPage=top&gMode=auth&txtHelpSearch=&gPage=top&gMode=&gType=auth&gKey=&gSSS=&gRRR=&hiddenDummyText=dummy";
     
    sub start {
            my ($self,$post_data, $tag, $attr) = @_;
     
            if ($tag =~ /^input$/i && $attr->{'type'} =~ /^hidden$/i) {
            # Si on trouve  <INPUT Type=hidden>
                    $meta_gSSS = $attr->{'gSSS'};
            }
     
            if ($tag =~ /^input$/i && $attr->{'type'} =~ /^hidden$/i) {
            # Si on trouve  <INPUT Type=hidden>
                    $meta_gRRR = $attr->{'gRRR'};
     
            }
     
            print  $meta_gRRR;
    my $text2 = "txtHelpSearch=&gPage=maintenance&gMode=shutdown&gType=reboot&gKey=undefined&gSSS=".$meta_gSSS."&gRRR=".$meta_gRRR."&hiddenDummyText=dummy";
          }
    # pour le reboot
     
    sub text {
     
            my ($self,$tag2, $attr2, $text2) = @_;
     
            if ($tag2 =~ /^input$/i && $attr2->{'type'} =~ /^reboot$/i) {
            # Si on trouve  Restarting the LinkStation now.
     
            $meta_reboot = $attr2->{'Restarting the LinkStation now.'};
            }
    }
     
    sub end {
          my ($self, $tag, $origtext) = @_;
     
          # reset appropriate flag if we see </H1> or </TITLE>
          if ($tag =~ /^h1$/i)    { $h1_flag = 0; }
          if ($tag =~ /^title$/i) { $h1_flag = 0; }
     
          if ($tag =~ /^title$/i) { $h1_flag = 0; }
      }
     
      my $p = new GetSummary;
      while (<>) {
          $p->parse($_);
      }
      $p->eof;
     
      print "Summary information: ", $meta_gSSS || $meta_gRRR || "No summary information found.", "\n";
    Quelqu'un pourrait me guidé un peu svp?

  2. #2
    Membre chevronné

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2010
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2010
    Messages : 246
    Par défaut
    Et si tu n'essayais pas de traduire ton code PHP, mais que tu résonnais directement en PERL ?

    Peut tu expliquer ce que tu souhaites faire ?

    Après je n'ai jamais "traduit" du PHP en PERL mais d'après mon experience avec d'autres lamgages, traduire n'est jamais une bonne chose... Il vaut mieux repartir de 0 en conservant l'idée de ce que doit faire le script

  3. #3
    Membre habitué
    Inscrit en
    Juillet 2010
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 15
    Par défaut
    Bonjour,

    je souhaite rebooter mon nas directement en faisant une simulation de connexion en http sur mon interface web du buffalo.

    Donc, cela j'ai réussi en écrivant ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
        #!/usr/bin/perl -w
        use strict;
        use LWP::UserAgent;
        use HTML::Form;
        use warnings;
        use HTML::Parser;
     
        # les paramètres personnels
        my ( $user, $pass ) = qw( login password );
        my $base = 'http:/XXX.XXX.XXX.XXX/cgi-bin/top.cgi';
     
        # initialisation de l'agent
        my $ua = LWP::UserAgent->new();
     
        # création de la requête
        my $req = HTTP::Request->new( GET => $base );
     
        # exécute la requête et reçoit la réponse
        my $res = $ua->request($req);
        die $res->status_line if not $res->is_success;
     
     
        # le formulaire de login est le second formulaire de la page
        my $form = ( HTML::Form->parse( $res->content, $base ) )[0];
     
        # remplit les champs
        $form->find_input("txtAuthLoginUser")->value($user);
        $form->find_input("txtAuthLoginPassword")->value($pass);
     
        # valide et renvoie le formulaire
        #$ua->request( $form->click );
     
        my $validate = $ua->request( $form->click );
        my $page = $validate->content;
        print $page;
    Donc, cela me renvoi le code source, ou je peux chercher mes valeurs suivantes :
    $post_data = "txtAuthLoginUser=login&txtAuthLoginPassword=motdepasse&gPage=top&gMode=auth&txtHelpSearch=&gPage=top&gMode=&gType=auth&gKey=&gSSS=&gRRR=&hiddenDummyText=dummy";
    Je souhaite, récupérer ensuite les valeurs de gSSS et de gRRR du bouton <input type=hidden>

    Pour ce faire, je veux utiliser HTML:Arser mais je ne comprend pas comment faire. j'ai continué mon script perl avec ceci sans succès:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     # creation de mon parser
        my $parser = HTML::Parser->new();
     
        # definition des mes evenements
        $parser->handler( text  => \&text,  "dtext" );
        $parser->handler( start => \&start, "tagname,attr" );
        $parser->handler( end   => \&end,   "tagname" );
     
        $parser->parse($page);
     
        # definition des callbacks
        # on les rassemble dans un bloc pour que les variables lexicales
        # sur lesquels on les clos soient invisibles du reste du script
     
    print get_data();
     
    {
        my $in_input_textegras;
        my $meta_gSSS;
     
        sub start {
            my ($tag, $attr) = @_;
            $in_input_textegras++
                if $tag eq 'input' and $attr->{type} eq 'hidden';
        }
     
        sub end {
            my ($tag) = @_;
            $in_input_textegras--
                if $tag eq 'input' and $in_input_textegras;
        }
     
        # tu souhaiteras peut-etre faire ton traitement directement
        # dans cette fonction
        sub text {
            my ($page,$meta_gSSS) = @_;
            push $meta_gSSS, $page
                if $in_input_textegras;
                    }
     
    }
    Je bloque sur la façon de recupere mes valeurs.

  4. #4
    Membre habitué
    Inscrit en
    Juillet 2010
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 15
    Par défaut
    Je bloque au niveau de l'accès à la page "maintenance" qui était définit dans la variable post_data :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $post_data = "txtHelpSearch=&gPage=maintenance&gMode=shutdown&gType=reboot&gKey=undefined&gSSS=" . $gSSS . "&gRRR=". $gRRR . "&hiddenDummyText=dummy";
    Car la mon script perl, permet de me connecter a l'interface.

    Une fois dessus, je souhaite me positionner sur la page "Maintenance" afin d'effectuer mon reboot.(defini dans fichier php dans la variabel precedente).

    il faudrait pas plutot que j'utilise la méthode

    $form->find_input
    Car, dans mon fichier perl, cela ne sert a rien de chercher les valeurs gSSS et gRRR, qui me permettaient de garder la conexion admin sur mon fichier PHP.

    La il faut que je cherche le champ post_data :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $post_data = "txtAuthLoginUser=login&txtAuthLoginPassword=motdepasse&gPage=top&gMode=auth&txtHelpSearch=&gPage=top&gMode=&gType=auth&gKey=&gSSS=&gRRR=&hiddenDummyText=dummy";
    et que je remplace par le premier post_data si j'ai bien compris?

  5. #5
    Membre chevronné

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2010
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2010
    Messages : 246
    Par défaut
    Alors la je suis perdu... je vois pas comment t'aider en PERL car je n'arrive pas comprendre ce que tu veux faire précisement.

    Si tu oublies ton PHP et que tu nous explique ce que tu veux faire en PERL, ca donne quoi ? Car la personnellement je m'y retrouve pas.

  6. #6
    Membre habitué
    Inscrit en
    Juillet 2010
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 15
    Par défaut
    J'explique le principe:

    1) je me connecte sur la page
    http://XXX.XXX.XXX.XX/cgi-bin/top.cgi");
    2) il faut entrer un login et un pass qui sont respectivement dans les champs txtAuthLoginUser et txtAuthLoginPassword :

    d'ou le code suivant:
    # remplit les champs
    $form->find_input("txtAuthLoginUser")->value($user);
    $form->find_input("txtAuthLoginPassword")->value($pass);
    3) une fois connecté, les champs gSSS /gRRR (champ hidden) génèrent des numéros aléatoire qui permettent de rester connecté avec le login/pass entré précédemment pour naviguer dans les divers menus de l'interface.

    4) Moi, je souhaite ensuite aller dans le menu qui s'appelle "Maintenance" et dans le sous-menu "Restart". sur la page de ce sous-menu, il y a un bouton nommé "reboot" qui redémarre le NAS.

    5) Mon script me connecte a la page du Nas et me génère le formulaire de la page d'accueil. dans ce formulaire,il a ces valeurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #<input type="hidden" id="gPage" name="gPage" value="top" />
    #<input type="hidden" id="gMode" name="gMode" value="" />
    #<input type="hidden" id="gType" name="gType" value="auth" />
    #<input type="hidden" id="gKey"  name="gKey"  value="" />
    #<input type="hidden" id="gSSS"  name="gSSS"  value="464e3f2XXXXXc29a937e16478a9" />
    #<input type="hidden" id="gRRR"  name="gRRR"  value="45XXXXXX739" />
    Je souhaite récupéré les valeurs (value) de gRRR et de gSSS afin de rester connecter avec la même session pour aller sur la page de reboot.

    la page de reboot prendre les valeurs suivantes normalement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #<input type="hidden" id="gPage" name="gPage" value="maintenance" />
    #<input type="hidden" id="gMode" name="gMode" value="shutdown" />
    #<input type="hidden" id="gType" name="gType" value="reboot" />
    #<input type="hidden" id="gKey"  name="gKey"  value="" />
    #<input type="hidden" id="gSSS"  name="gSSS"  value="464e3f2XXXXXX031c298d0a938a9" />
    #<input type="hidden" id="gRRR"  name="gRRR"  value="4517625XXXXXX1739" />
    Donc, si je récupère bien mes 2 variables et que je passe mes valeurs gMode/gType/gPage comme ci-dessus, cela devrait simuler le clique sur el bouton "reboot" non?
    en se connectant sur cette dernière cela reboot automatiquement mon nas

  7. #7
    Membre chevronné

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2010
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2010
    Messages : 246
    Par défaut
    En supposant que tu mette les lignes de ton formulaire dans une variable " @line ", tu peux récuperer tes informations " gSSS " et " gRRR " de la sorte :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    my $gSSS;
    my $gRRR;
    foreach my $l (@line){
          if($l =~ /name\=\"gSSS\"[ ]*value\=\"([a-zA-Z0-9]*)\"/){
                $gSSS = $1;
          }
           if($l =~ /name\=\"gRRR\"[ ]*value\=\"([a-zA-Z0-9]*)\"/){
                $gRRR = $1;
          }
    }
    Si j'ai pas fait d'erreur dans la REGEXP, les variables "gSSS" et "gRRR" devraient contenir les valeurs que tu recherches.

  8. #8
    Membre habitué
    Inscrit en
    Juillet 2010
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 15
    Par défaut
    comment passer en paramettre de mno fichier l'adresse IP du nas?

    nom du fichier "reboot_nas.pl"

    je voudrais faire reboot_nas.pl @adresseIPduNAS
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        my $host= '.$1.";
     
        # les paramètres personnels
        my ( $user, $pass ) = qw( login pass );
        my $base = "http://".$host."/cgi-bin/top.cgi";
    $1 récupère le parametre passé au fichier non?

  9. #9
    Membre chevronné Avatar de Beniou
    Homme Profil pro
    Inscrit en
    Novembre 2009
    Messages
    357
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Novembre 2009
    Messages : 357
    Par défaut
    Non pour récupérer les arguments passés dans la ligne de commande tu dois utiliser le tableau @ARGV

    Si tu lances ton programme :
    ./reboot_nas.pl 192.168.0.1
    Alors ton adresse IP sera la première variable du tableau @ARGV à récupéré :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    my $ip = $ARGV[0];
    Mais je te conseille de tester au début de ton programme la longueur du tableau etc. pour gérer le cas où il n'y a pas de paramaètres, trop de paramètres etc.
    Ex si tu ne veux qu'un paramètre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if(@ARGV != 1){
      die "reboot.pl <adresse_ip>\n\n";
    }
    Edit : bon ben la prochaine fois je répondrai plus rapidement

  10. #10
    Membre habitué
    Inscrit en
    Juillet 2010
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Juillet 2010
    Messages : 15
    Par défaut
    c'est bon, j'ai trouvé je faisait une erreur de code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    use strict;
        use LWP::UserAgent;
        use HTML::Form;
        use warnings;
     
        my $host=$ARGV[0];
        # les parametres personnels
        my ($user,$pass) = qw(login pass);
        my $base = "http://".$ARGV[0]."/cgi-bin/top.cgi";
    Maintenant cela marche : reboot_nas.pl adresseIPduNAS

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. perl probleme affichage avec HTML
    Par Pierrot2612 dans le forum Langage
    Réponses: 4
    Dernier message: 02/12/2007, 16h23
  2. Réponses: 1
    Dernier message: 26/04/2007, 20h51
  3. [Sécurité] Script PHP pour valider du HTML
    Par marcha dans le forum Langage
    Réponses: 2
    Dernier message: 06/11/2005, 14h57
  4. Utilisation de HTML::Parser
    Par mobscene dans le forum Web
    Réponses: 6
    Dernier message: 27/10/2005, 13h57
  5. execution php dans perl
    Par rdams dans le forum Web
    Réponses: 7
    Dernier message: 11/10/2005, 20h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo