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

Web Perl Discussion :

Création de liens automatiques


Sujet :

Web Perl

  1. #1
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    63
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 63
    Points : 33
    Points
    33
    Par défaut Création de liens automatiques
    Bonjour,

    Je développe actuellement un module perl qui remplace des mots automatiquement dans le texte d'une page web par des liens.

    Les mots à remplacer sont stockés dans un fichier texte avec le lien, la cible d'ouverture (_self ou _blank) et la description correspondante.

    Mon problème vient de la fonction chargée de ramplacer les mots (plus précisément de l'expression régulière d'après moi...).

    Voici la fonction :

    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
     
     
    sub autoLinks{
      # fonction remplacant les mots contenus dans $text pour lesquels des liens automatiques sont prévus
     
      # on récupère les paramètres  
      my ($text,$id) = @_;	 
     
      # on récupère le fichier
      my ($strLinks) = &importerFichier('./autoLink07/data/'.$id.'.autolink.dat');
      my (@links) = split(/<<>>/, $strLinks);  
     
      # on le parcours et on compare chaque info à celle passée en paramètre  
      my ($strLink) = '';		
      foreach $strLink (@links){	
        my (@autoLink) = split(/<>/, $strLink); 
    	# pour chaque mot à remplacer, on le remplacer dans le fichier	
     
    	#<span>'.$autoLink[2].'</span>
     
    	$url = '<a class="autolink" href="http://'.$autoLink[1].'" target="'.$autoLink[3].'">'.$autoLink[0].'</a>';
    	$mot = $autoLink[0];
     
    	#$mot = quotemeta($mot);
    	#$url = quotemeta($url);
     
    	$text =~ s/$mot/$url/gei ;
      }	  
      # on envoi le résultat 
      return $text;
    }
    Aucun remplacement n'est affectué (les mots sont bien chargés et on rentre bien dans la boucle foreach).

    Merci de votra aide ...

  2. #2
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    il y a surement un souci avec les // de l'url.
    essaye ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $text =~ s{$mot}{$url}mgsxi;

  3. #3
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    63
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 63
    Points : 33
    Points
    33
    Par défaut
    J'ai remplacé la ligne avec l'expression régulère que tu ma donné mais rien ne change, aucun mot n'est remplacé

    Il y a un truc bizare :

    Quand je met l'expression régulière $text =~ s/$mot/$url/g , aucun mot n'est remplacé et quand je met cette expression $text =~ s/$mot/$url/ , la première occurence du mot est remplacée correctement...

  4. #4
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    bon avant d'attendre un remplacement, on va faire des tests.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    	#$mot = quotemeta($mot);
    	#$url = quotemeta($url);
    	print "mot : $mot\n"; #=====> print $mot
    	print "url : $url\n"; #=====> print $mot
    	$text =~ s/$mot/$url/gei ;
    est ce qu'il y a un mot et une url de printé?

  5. #5
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    63
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 63
    Points : 33
    Points
    33
    Par défaut
    Oui biensur les mots et les url sont bien affichées

    C'est la première chose que j'ai vérifié avant de poster sur le forum... J'évite les sujets inutiles

  6. #6
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    Citation Envoyé par Munkey74
    Oui biensur les mots et les url sont bien affichées

    C'est la première chose que j'ai vérifié avant de poster sur le forum... J'évite les sujets inutiles
    c'est bien .
    peux tu donner 2 exemples (2 mots et 2 url) pour que je puisse faire des tests de mon coté

  7. #7
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    63
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 63
    Points : 33
    Points
    33
    Par défaut
    Euuu... tu veux la source complete?

  8. #8
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    non, je veux juste que tu me donnes 2 mots et les deux url qui les remplaceront.
    Je pourrais ainsi faire les regex pour tester et voir ce qui ne va pas

  9. #9
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    63
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 63
    Points : 33
    Points
    33
    Par défaut
    J'ai fais une petite page de test avec les mots et liens à remplacer (la liste est créée à partir du contenu du fichier)

    http://www.clicleman.com/cgi-bin/testremplace.pl

  10. #10
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    je voudrais un exemple par rapport à ton script vu que je ne l'ai pas en entier.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $url = '<a class="autolink" href="http://'.$autoLink[1].'" target="'.$autoLink[3].'">'.$autoLink[0].'</a>';
    A quoi correspond $autoLink[0à3]?

  11. #11
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    63
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 63
    Points : 33
    Points
    33
    Par défaut
    $autolink est un tableau contenant les mots à remplacer, les liens, description et target correspondant

    Voila leurs significations :

    $autolink[0] => mot à remplacer (par exemple "clic")
    $autolink[1] => adresse du lien (par exemple "www.clicandgo.com")
    $autolink[2] => description du lien (par exemple "Agence de création de sites internet")
    $autolink[3] => target du lien (par exemple "_blank")

    Voila...

  12. #12
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    bah ecoute j'ai ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    my $url = '<a class="autolink" href="http://www.clicandgo.com" target="Agence de création de sites internet">clic</a>';
    my $mot = "clic";
    my $text = "Clic remplacer les liens automatiquement, encore clic";
    $text =~ s{$mot}{$url}mgsxi;
    print "$text\n";
    qui donne :
    <a class="autolink" href="http://www.clicandgo.com" target="Agence de création de sites internet">clic</a> remplacer les liens automatiquement, encore <a class="autolink" href="http://www.clicandgo.com" target="Agence de création de sites internet">clic</a>
    Donc pas de souci pour moi.
    Et tu sur de ce qu'il y a dans ton $text ??

  13. #13
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    63
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 63
    Points : 33
    Points
    33
    Par défaut
    Alors maintenant sa marche :

    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
    sub autoLinks{
      # fonction remplacant les mots contenus dans $text pour lesquels des liens automatiques sont prévus
     
      # on récupère les paramètres  
      my ($text,$id) = @_;	 
     
      # on récupère le fichier
      my ($strLinks) = &importerFichier('./autoLink07/data/'.$id.'.autolink.dat');
      my (@links) = split(/<<>>/, $strLinks);  
     
      # on le parcours et on compare chaque info à celle passée en paramètre  
      my ($strLink) = '';		
      foreach $strLink (@links){	
        my (@autoLink) = split(/<>/, $strLink); 
    	# pour chaque mot à remplacer, on le remplacer dans le fichier	
     
    	if ($autoLink[0] eq ''){
    	  next;
    	}
     
    	$url = '<a class="autolink" href="http://'.$autoLink[1].'" target="'.$autoLink[3].'">'.$autoLink[0].'</a>';
    	$mot = ' '.$autoLink[0];
     
        $text =~ s{$mot}{$url}mgsxi;
      }	  
     
      # on envoi le résultat 
      return $text;
    }
    Le seul truc bizare c'est que j'ai du faire $mot = ' '.$autoLink[0]; .
    Sans ça il ne trouve pas le mot

    Maintenant j'ai un autre problème :
    Cette fonction remplace les mots seuls comme ' clic ' mais remplace également clic dans le mot 'www.clicandgo.com'.

  14. #14
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    Citation Envoyé par Munkey74
    Alors maintenant sa marche :
    Le seul truc bizare c'est que j'ai du faire $mot = ' '.$autoLink[0]; .
    Sans ça il ne trouve pas le mot
    Par ce que tes mots on surement un espace en debut, et c pour cela qu'il ne les trouvait pas avant.
    Citation Envoyé par Munkey74
    Maintenant j'ai un autre problème :
    Cette fonction remplace les mots seuls comme ' clic ' mais remplace également clic dans le mot 'www.clicandgo.com'.
    car on a mis l'otpion g dans la regex => toutes les occurences dans la phrase

  15. #15
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    63
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 63
    Points : 33
    Points
    33
    Par défaut
    Oups, j'avais pas fait gaffe à la regex, je débute avec les expressions régulières. Mais je pense m'être mal exprimé : je veux par exemple que le mot clic soit remplacé toutes les fois ou il se trouve dans une texte, sauf quand il se trouve à l'intérieur d'un autre mot (par exemple www.clicandgo.com)...

    Alors maintenant plus dur

    Les liens générés ont à l'intérieur une balise <span> :

    <a href="lelien" target="blank">clic<span>Agence de création de sites internet</span></a>
    Quand je remplace les mots par les liens, j'ai le problème suivant : Les mots contenus dans les spans sont eux aussi transformé en liens automatique ...

  16. #16
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    bon si ce n'est pas long, peut tu mettre tout ton script et le fichier de mot, car je suis obligé de deviner et ça reste abstrait.

  17. #17
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    63
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 63
    Points : 33
    Points
    33
    Par défaut
    J'ai trouvé une solution (un peu barbare certe mais qui marche) :

    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
    sub autoLinks{
      # fonction remplacant les mots contenus dans $text pour lesquels des liens automatiques sont prévus
     
      # on récupère les paramètres  
      my ($text,$id) = @_;	 
     
      # on récupère le fichier
      my ($strLinks) = &importerFichier('./autoLink07/data/'.$id.'.autolink.dat');
      my (@links) = split(/<<>>/, $strLinks);  
     
      my ($strLink) = '';
     
      foreach $strLink (@links){	
        my (@autoLink) = split(/<>/, $strLink); 
    	# pour chaque mot à remplacer, on le remplacer dans le fichier	
     
    	if ($autoLink[0] eq ''){
    	  next;
    	}
     
    	$url = '&nbsp;<a class="autolink" href="http://'.$autoLink[1].'" target="'.$autoLink[3].'">'.$autoLink[0].'</a>&nbsp;';
    	$mot = $autoLink[0];
     
        $text =~ s{\s$mot\s}{$url}mgsxi;
      }	  
     
      foreach $strLink (@links){	
        my (@autoLink) = split(/<>/, $strLink); 
    	 #pour chaque mot à remplacer, on le remplacer dans le fichier	
     
    	if ($autoLink[0] eq ''){
    	  next;
    	}
     
    	$span = '>'.$autoLink[0].'<span>'.$autoLink[2].'</span><';
    	$mot = '>'.$autoLink[0].'<';
     
        $text =~ s{$mot}{$span}mgsxi;
      }	  
     
      # on envoi le résultat 
      return $text;
    }
    Il subsiste un dernier problème : Les groupes de mots

    Les groupes de mots ne sont pas remplacés et je ne vois pas pourquoi ...

  18. #18
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    63
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 63
    Points : 33
    Points
    33
    Par défaut
    Merci de ton aide djibril, il ne me reste qu'un seul problème, c'est les groupes de mots ...

  19. #19
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    qu'entends tu par groupe de mots?

  20. #20
    Nouveau membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    63
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 63
    Points : 33
    Points
    33
    Par défaut
    Ben par exemple j'aimerai pouvoir remplacer les mots "club de football" par :

    <a href="http://www.fff.fr" target="_blank">club de football<span>Site de la Fédération Française de Football</span></a>

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

Discussions similaires

  1. Création de lien automatique
    Par Daniboom dans le forum Langage
    Réponses: 14
    Dernier message: 07/04/2014, 21h36
  2. Réponses: 0
    Dernier message: 04/03/2014, 14h44
  3. création des liens automatiques macro
    Par victoires dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 28/03/2012, 10h38
  4. 4D création de lien automatique en sql
    Par saturne27 dans le forum 4D
    Réponses: 1
    Dernier message: 26/02/2008, 10h57
  5. [Tableaux] Création de lien automatique
    Par GarGamel55 dans le forum Langage
    Réponses: 3
    Dernier message: 17/09/2005, 17h26

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