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

Delphi Discussion :

[D6] Comment récupérer la liste des liens sur une page HTML ?


Sujet :

Delphi

  1. #1
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 670
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 670
    Points : 7 038
    Points
    7 038
    Par défaut [D6] Comment récupérer la liste des liens sur une page HTML ?
    J'ai une liste d'URL, et sur chaque page, je dois récupérer la liste des liens pour faire une traitement.

    J'ai essayé les deux bouts de code de la FAQ, mais j'ai une violation d'accès à l'appel des fonctions.
    http://delphi.developpez.com/faq/?pa...nsdanspagehtml
    http://delphi.developpez.com/faq/?pa...executerlienIE

    Quelqu'un saurait-il comment faire ?


  2. #2
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 670
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 670
    Points : 7 038
    Points
    7 038
    Par défaut
    J'ai essayé aussi http://delphi.developpez.com/faq/?pa...rowser#content sans plus de succès.

    re

  3. #3
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    As tu fait un pas à pas pour voir où çà plante ?
    Car j'utilise le 1er code (celui d'indy) et ca fonctionne parfaitement.

    PS: Tu peux réduire le nombre de ___ dans ta signature, ca dépasse la taille d'un carré normal

  4. #4
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 670
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 670
    Points : 7 038
    Points
    7 038
    Par défaut
    Citation Envoyé par Malatar
    As tu fait un pas à pas pour voir où çà plante ?
    Ca plante à l'appel de la fonction GetLinksInHTMLDoc, et avant l'exécution de la première ligne (de cette fonction).

    Sinon, ça pourait être pratique de préciser dans la FAQ d'où sort la fonction PosEx. C'est en cherchant sur le forum que je suis tombé par hasard sur le source de cette fonction.

  5. #5
    Membre habitué
    Inscrit en
    Juin 2005
    Messages
    207
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 207
    Points : 161
    Points
    161
    Par défaut
    Citation Envoyé par Lung
    Ca plante à l'appel de la fonction GetLinksInHTMLDoc, et avant l'exécution de la première ligne (de cette fonction).

    Sinon, ça pourait être pratique de préciser dans la FAQ d'où sort la fonction PosEx. C'est en cherchant sur le forum que je suis tombé par hasard sur le source de cette fonction.
    Il me semble que PosEx est une fonction native à partir de D7... Donc pas de chance pour toi!

    Sinon, aurais-tu un bout de code de ce que tu as fais, parce que j'ai utilisé plusieurs fois webbrowser et Indy, j'ai jamais eu de problème particulier (notamment sur les codes que tu donnes en lien)

  6. #6
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 670
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 670
    Points : 7 038
    Points
    7 038
    Par défaut
    Citation Envoyé par Gaadek
    Il me semble que PosEx est une fonction native à partir de D7... Donc pas de chance pour toi!
    Ah d'accord. Mais, le 7 est trop instable pour moi.


    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
    ListeLien := TStringList.Create;
    try
       GetLinksInHTMLDoc('http://www.unsite.com', ListeLien);
    ...
     
    finally
       ListeLien.Free;
    end;
     
    procedure TFormWeb.GetLinksInHTMLDoc(const szURL : String; var Links: TStringList);
       function PosEx(szSubStr, szStr: String; nIndex: Integer): Integer;
       var
          nMax: Integer;
       begin
          nMax := Length(szStr) - Length(szSubStr) + 1;
          if nIndex < 1 then
             nIndex := 1;
          while nIndex <= nMax do
          begin
             if Copy(szStr, nIndex, Length(szSubStr)) = szSubStr then
                Exit
             else
                Inc(nIndex);
          end;
       end;
    var
       HTTP: TIdHTTP;
       szContent, szLink: String;
       nPosition, nBeginPos: Integer;
    begin
       HTTP := TIdHTTP.Create(nil);
       try
          Links.Clear;
          szContent := HTTP.Get(szURL);
     
          nPosition := 0;
          while True do
          begin
             nPosition := PosEx('href', szContent, nPosition + 1);
             if nPosition = 0 then
                Break;
             Inc(nPosition, 4);
             while(nPosition < Length(szContent)) and (szContent[nPosition] in [#0, #10, #13, ' ']) do
                Inc(nPosition);
             if szContent[nPosition] <> '=' then
                Continue;
             Inc(nPosition);
             while(nPosition < Length(szContent)) and (szContent[nPosition] in [#0, #10, #13, ' ']) do
                Inc(nPosition);
             if szContent[nPosition] <> '"' then
                Continue;
             Inc(nPosition);
             nBeginPos := nPosition;
             while(nPosition <= Length(szContent)) and (szContent[nPosition] <> '"') do
                Inc(nPosition);
     
             szLink := Copy(szContent, nBeginPos, nPosition - nBeginPos);
             if(szLink <> '') and (Links.IndexOf(szLink) = -1) then
                Links.Add(szLink);
          end;
       finally
          HTTP.Free;
       end;
    end;

  7. #7
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Pourquoi rajouter des const et var dans la définition de la procèdure, ca fonctionne très bien sans.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    procedure TFormWeb.GetLinksInHTMLDoc(szURL : String; Links: TStringList);
    je pense que ca fonctionnera mieux sans.

  8. #8
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 670
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 670
    Points : 7 038
    Points
    7 038
    Par défaut
    Citation Envoyé par Malatar
    Pourquoi rajouter des const et var dans la définition de la procèdure, ca fonctionne très bien sans.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    procedure TFormWeb.GetLinksInHTMLDoc(szURL : String; Links: TStringList);
    je pense que ca fonctionnera mieux sans.
    Le const, c'était pour être sûr de ne pas modifier l'URL, par hasard.
    Mais, avec ou sans (var et const), le résultat est le même : violation d'accès à l'appel de la fonction. Ca n'a même pas le temps exécuter la première ligne de la fonction (j'ai un point d'arrêt).


  9. #9
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    Le const est une bonne idée. J'ai dû écrire cette QR quand je n'avais pas encore pris ces bonnes habitudes Le var, en revanche, est totalement inutile et n'a pas sa place ici. Les variables objets représentant l'adresse de l'objet en Delphi.

    Sinon, as-tu essayé d'exécuter la même procédure mais en la rendant vide ? Es-tu sûr d'avoir bien mis un point d'arrêt sur la première ligne de code begin excepté (les begin ne sont pas toujours liés) ? Ne fais-tu pas un point d'arrêt à l'appel de la fonction et avec un F8 ?

    Encore une simple suggestion : la fonction PosEx a une utilisation très large : pourquoi l'as-tu déclarée comme fonction interne ?

  10. #10
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 670
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 670
    Points : 7 038
    Points
    7 038
    Par défaut
    Citation Envoyé par sjrd
    Le const est une bonne idée. J'ai dû écrire cette QR quand je n'avais pas encore pris ces bonnes habitudes
    J'essais de l'utiliser le plus possible. C'est bien pratique.

    Citation Envoyé par sjrd
    Le var, en revanche, est totalement inutile et n'a pas sa place ici. Les variables objets représentant l'adresse de l'objet en Delphi.
    Très juste. J'avais pas réfléchi ...

    Citation Envoyé par sjrd
    Sinon, as-tu essayé d'exécuter la même procédure mais en la rendant vide ?
    Ca plante aussi. C'est louche.
    Ce qui est bizarre, c'est que ensuite, j'ai remis le code de la fonction, et je n'ai plus de violation d'accès.
    La fonction se met a fonctionner. Elle me donne juste un message d'erreur :
    Socket error #10061
    Connexion refused
    Citation Envoyé par sjrd
    Encore une simple suggestion : la fonction PosEx a une utilisation très large : pourquoi l'as-tu déclarée comme fonction interne ?
    Quelle utilisation ?
    Je l'ai mise là, parce que GetLinksInHTMLDoc en avait besoin, c'est tout ...

    Bon, le schmiliblic avance.
    Mais, pourquoi la connexion est-elle refusée ?

    derechef

  11. #11
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    L'erreur #10061, indique que le composant Indy n'arrive pas à accéder à internet et donc à récupérer la page html.

    As tu un firewall qui pourrais bloquer ?
    Un anti virus ? ou tous autres logiciel qui empeche les sorties ?
    As tu un logiciel qui tourne sur le port 80 de ta machine ?

  12. #12
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    Citation Envoyé par Lung
    J'essais de l'utiliser le plus possible. C'est bien pratique.
    Il faut l'utiliser quand elle est utile. À savoir pour les paramètres de types chaîne, tableau, record, ou ensembles de types énumérés à plus de 32 éléments. Pour les types scalaires c'est inutile.
    Citation Envoyé par Lung
    La fonction se met a fonctionner. Elle me donne juste un message d'erreur :
    Ca c'est la connexion Internet qui n'est pas bonne.
    Citation Envoyé par Lung
    Quelle utilisation ?
    Je l'ai mise là, parce que GetLinksInHTMLDoc en avait besoin, c'est tout ...
    N'importe quel utilisation où tu as besoin de rechercher la première occurence d'une sous-chaîne à partir d'un offset donné, et non du début. Elle est tellement utile qu'elle est même apparue dans D7, justement.

  13. #13
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 670
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 670
    Points : 7 038
    Points
    7 038
    Par défaut
    Citation Envoyé par Malatar
    L'erreur #10061, indique que le composant Indy n'arrive pas à accéder à internet et donc à récupérer la page html.

    As tu un firewall qui pourrais bloquer ?
    Probable. C'est pas moi l'admin-réseau. Donc, je n'y connais rien.
    Y a t'il un moyen de contourner ? Du genre, en exécutant en tant qu'Admin ?

    Citation Envoyé par Malatar
    Un anti virus ?
    Aussi, mais je pense pas que Sophos s'occupe de ça.

    Citation Envoyé par Malatar
    ou tous autres logiciel qui empeche les sorties ?
    Pas Websence, quand même ?

    Citation Envoyé par Malatar
    As tu un logiciel qui tourne sur le port 80 de ta machine ?
    Aucune idée. Comment puis-je le vérifier ?


    Citation Envoyé par sjrd
    Pour les types scalaires c'est inutile.
    C'est quoi déjà ?

  14. #14
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Citation Envoyé par Lung
    Pas Websence, quand même ?
    Je pense que si, c'est un firewall (a ce que j'ai pu voir sur le net), a mon avis il doit bloquer ton programme pour l'accès vers internet.
    Il faut que tu vois avec l'administrateur de ce logiciel pour qu'il permette l'accès à ton programme.


    Citation Envoyé par Lung
    Citation:
    sjrd a écrit :
    Pour les types scalaires c'est inutile.
    C'est quoi déjà ?
    Les numériques ^^

  15. #15
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 670
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 670
    Points : 7 038
    Points
    7 038
    Par défaut
    Citation Envoyé par Malatar
    Je pense que si, c'est un firewall (a ce que j'ai pu voir sur le net), a mon avis il doit bloquer ton programme pour l'accès vers internet.
    Il faut que tu vois avec l'administrateur de ce logiciel pour qu'il permette l'accès à ton programme.
    Raah quelle daube ce truc !
    Je sens que ça va être simple ...

    Sinon, le WebBrowser ne peut pas me donner le contenu d'une page web ?


    Citation Envoyé par Malatar
    Les numériques ^^
    Ah ok.
    Mais pourquoi pas de const avec les nombres ?

  16. #16
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Citation Envoyé par Lung
    Raah quelle daube ce truc !
    Je sens que ça va être simple ...

    Sinon, le WebBrowser ne peut pas me donner le contenu d'une page web ?
    Je pense que même avec le webbrowser tu vas avoir des problèmes vu que websense block l'accès au site que tu veux atteindre (enfin je pense vu que j'utilise pas ca comme firewall ^^).


    Citation Envoyé par Lung
    Ah ok.
    Mais pourquoi pas de const avec les nombres ?

    La faut voir les pro, moi j'utilise jamais const dans les définitions de variables de mes procedures/fonctions.

  17. #17
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    Le const permet de passer le paramètre par adresse, et évite donc de recopier le contenu de la variable. Pour un nombre c'est inutile : copier l'adresse prend autant de temps que copier le nombre lui-même, et après il faudra le déréférencer. Mais pour les types de + de 4 octets, ça vaut la peine.

    Un peu d'auto-pub : Bref rappel sur les paramètres const

  18. #18
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    488
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 488
    Points : 397
    Points
    397
    Par défaut
    Citation Envoyé par Lung
    Mais pourquoi pas de const avec les nombres ?
    Lorsqu'une variable est passée de façon standard (ni const, ni var) à une fonction, c'est en fait une copie de la variable qui est passée au cas ou la valeur soit modifiée dans la fonction appelée. Si la fonction est appelée avec le mot clé const alors on a une garantie (par le compilateur) que la variable ne sera pas modifiée, et on peut passer la (l'adresse de) variable directement. Pour les variable numérique on ne passe pas une adresse, mais directement une copie de la variable, le mot clé const ne change rien.

    (En tout cas c'est comme ça que fonctionne les compilateurs C, je suppose que Delphi fait la même chose).

    edit: zut, grilled

  19. #19
    Expert éminent
    Avatar de Lung
    Profil pro
    Analyste-programmeur
    Inscrit en
    Mai 2002
    Messages
    2 670
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyste-programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 670
    Points : 7 038
    Points
    7 038
    Par défaut
    Merci pour ces explications sur const.

    Citation Envoyé par Malatar
    Je pense que même avec le webbrowser tu vas avoir des problèmes vu que websense block l'accès au site que tu veux atteindre (enfin je pense vu que j'utilise pas ca comme firewall ^^).
    Non, l'adresse est autorisée.
    Je fais des tests avec DVP pour l'instant.
    Comprend pas pourquoi ça coince ...


  20. #20
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    N'aurais tu aps des paramètres proxy nécessaire à ta connexion vers internet ?
    Si oui, il faudrait peut être les indiquer aux composants Indy, car il y a peut être cela qui bloque.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Envoyer des données sur une page HTML à partir de Delphi
    Par gillou026 dans le forum Débuter
    Réponses: 18
    Dernier message: 29/05/2013, 01h16
  2. Comment obtenir la list des liens d'une page web ?
    Par Battosaiii dans le forum Général Dotnet
    Réponses: 0
    Dernier message: 27/10/2009, 13h21
  3. Récuperer des informations sur une page html
    Par shibby1337 dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 22/11/2008, 15h32
  4. Réponses: 8
    Dernier message: 26/03/2006, 15h09
  5. Récupérer des données sur une page HTML
    Par rupeni dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 18/11/2005, 17h22

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