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 PHP Discussion :

Récupérer la liste des url des images - BBcode [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 126
    Points : 55
    Points
    55
    Par défaut Récupérer la liste des url des images - BBcode
    Bonjour,

    J'ai un message qui contient des balises BBcode (phpBB3), voici un exemple de message :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Ce message contient des [b:9nagshe3]images[/b:9nagshe3] :
     
    Cas 1 : Regarde ma super image :
    [img:3maguzm6]http://clipartof.com/nom_img.jpg[/img:3maguzm6]
     
    Cas 2 : Clic sur le lien pour voir l'image :
    [url=http://monsite.fr/imageFullHd.jpg:q5mkaq5m]lien vers l'image[/url:q5mkaq5m]
     
    Cas 3 : Clic sur la miniature pour voir l'image originale :
    [url=http://www.hiboox.fr/images/test,5f677f.jpg.html:37xw65br]
    [img:37xw65br]http://images4.hiboox.com/images/3708/5f677e8dd.jpg[/img:37xw65br]
    [/url:37xw65br]
    Ce qui m'intéresse c'est de récupérer la liste des URL de toutes les images contenues dans le message.

    Si l'image (balise [img]) est englobée dans un lien (balise [url]), c'est l'URL de [url] qui m'intéresse, pas celle de [img] qui est une simple miniature.



    Je souhaite faire ça en PHP avec des expressions Perl (preg, pas ereg), et je suis un peu pommé, ça dépasse de très loin mon niveau en expressions régulières.

    Est-ce qu'il est nécessaire de lire le message ligne par ligne ?
    Comment faire, pouvez vous me donner une expression au moins pour le cas 1 ?

    Merci

  2. #2
    Membre éclairé
    Avatar de hornetbzz
    Homme Profil pro
    Directeur commercial
    Inscrit en
    Octobre 2009
    Messages
    482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France

    Informations professionnelles :
    Activité : Directeur commercial

    Informations forums :
    Inscription : Octobre 2009
    Messages : 482
    Points : 773
    Points
    773
    Par défaut
    Salut,

    Pour une piste:

    Pour les URL, j'utilise la fonction native filter_var de PHP5, par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $bool = (filter_var($url, FILTER_VALIDATE_URL) === false)? false : true ;
    Encore te faut-il "découper" au préalable ta chaine en 2 :
    d'un coté l'url que tu mettras dans $url,
    de l'autre le nom de ton fichier image dans la variable $file

    En même temps, si tu lis la doc php sur le sujet des regex, et donc d'une des fonctions principales qui les accompagne: preg_match, tu verras qu'il y a même un magnifique exemple qui colle pratiquement à 100% à ton besoin.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 126
    Points : 55
    Points
    55
    Par défaut
    Merci pour ton aide, mais je en crois pas que ça réponde à ma question.

    Apparemment, filter_var sert à terminer si ce qu'on lui passe en paramètre correspond au format (flag). Dans ton exemple tu t'en sers pour voir si une chaine de caractère est une URL ou non.

    Moi c'est pas ça que je veux faire, c'est récupérer la liste des URL contenu dans le message correspondant à des images.

    Je ne peux pas me servir de l'extension du fichier dans l'URL pour déterminer si c'est une image ou du HTML parce que certains sites comme ImageShack ont des URL dynamiques (exotique), où il n'y a pas d'extension .jpg, .png...


    Donc la seule façon de déterminer si c'est une image ou non, c'est le contexte.

    Si l'URL est entourée par une balise [img], c'est une image, par exemple (pour le moment je vais me limiter à ce cas de figure, le cas n°1 dans mon code d'exemple).


    Comment faire ça, récupérer la liste des URL entourées par [img] ?

  4. #4
    Membre extrêmement actif
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Points : 1 658
    Points
    1 658
    Par défaut
    Bonjour,



    J'ai une première moûture:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    '#\[(?:url=((?:http://)?.+?)(:.*?]).+?\[/url\\2|(img:.*?])((?:http://)?.+?)\[/\\3)#'



    La regex crée avec cette RE délivre 4 groupes.

    Dans le cas 1, l'adresse voulue sort dans le groupe 4, tandis que les groupes 1 et 2 sont vides.

    Dans les cas 2 et 3, l'adresse se trouve dans le groupe 1, tandis que les groupes 3 et 4 sont vides

    cela nécessite donc un petit test pour obtenir finalement l'adresse.



    En Python ça donne:

    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
    #Ce message contient des [b:9nagshe3]images[/b:9nagshe3] :
     
    #Cas 1 : Regarde ma super image :
    cas1 = '[img:3maguzm6]http://clipartof.com/nom_img.jpg[/img:3maguzm6]'
     
     
    #Cas 2 : Clic sur le lien pour voir l'image :
    cas2 = "[url=http://monsite.fr/imageFullHd.jpg:q5mkaq5m]lien vers l'image[/url:q5mkaq5m]"
     
     
    #Cas 3 : Clic sur la miniature pour voir l'image originale :
    cas3 = "[url=http://www.hiboox.fr/images/test,5f677f.jpg.html:37xw65br]"\
           "[img:37xw65br]http://images4.hiboox.com/images/3708/5f677e8dd.jpg[/img:37xw65br]"\
           "[/url:37xw65br]"
     
    import re
    RE = '\[(?:url=((?:http://)?.+?)(:.*?]).+?\[/url\\2|(img:.*?])((?:http://)?.+?)\[/\\3)'
    pat = re.compile(RE)
    for cas in (cas1,cas2,cas3):
        print pat.search(cas).groups()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    (None, None, 'img:3maguzm6]', 'http://clipartof.com/nom_img.jpg')
    ('http://monsite.fr/imageFullHd.jpg', ':q5mkaq5m]', None, None)
    ('http://www.hiboox.fr/images/test,5f677f.jpg.html', ':37xw65br]', None, None)


    J'ai une idée pour améliorer et sortir l'adresse voulue toujours dans un même groupe, ce qui éliminerait le test. Dis moi si ça t'intéresse vraiment car ce sera un peu plus compliqué à faire, je pense.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 126
    Points : 55
    Points
    55
    Par défaut
    Ok, merci beaucoup !

    De mon côté j'avais reussi à écrire la REGEX du cas 1, mais mon problème c'était de récupérer la liste des correspondances (matches).

    En fait c'est tout simple, il suffit de donner un 3éme paramètre à la fonction PHP preg_match_all, et cette variable est automatiquement remplie avec les correspondances.

    J'avais prévu d'écrire 3 regex (une par cas) et de les appliquer successivement, mais tu as fournis une REGEX qui marche pour les 3 donc je vais l'utiliser à la place.

    Citation Envoyé par eyquem Voir le message
    J'ai une idée pour améliorer et sortir l'adresse voulue toujours dans un même groupe, ce qui éliminerait le test. Dis moi si ça t'intéresse vraiment car ce sera un peu plus compliqué à faire, je pense.
    T'embête pas, la solution avec le test fonctionne, c'est le principal.

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

Discussions similaires

  1. Liste déroulante dépendantes des unes des autres
    Par julius870 dans le forum IHM
    Réponses: 5
    Dernier message: 05/09/2012, 21h02
  2. Listes des URLs des pages d'un site
    Par Schnapse dans le forum Langage
    Réponses: 0
    Dernier message: 13/04/2012, 18h50
  3. Réponses: 1
    Dernier message: 08/09/2011, 20h25
  4. validé des url des images
    Par ANISSS dans le forum Langage
    Réponses: 1
    Dernier message: 12/06/2007, 20h05
  5. [Tableaux] exclure des URL des stats
    Par planete dans le forum Langage
    Réponses: 10
    Dernier message: 09/06/2007, 19h40

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