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 contenu d'une page avec file_get_contents MAIS 1 partie seulement


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2007
    Messages : 17
    Points : 10
    Points
    10
    Par défaut Récupérer contenu d'une page avec file_get_contents MAIS 1 partie seulement
    Bien que j'essaie toujours de me débrouiller tout seul avant d'appeler à l'aide, je me trouve cette fois-ci devant un problème qui dépasse de loin mes maigres connaissances.

    Je dois récupérer une partie du contenu d'une page externe à mon site. Après quelques recherches et pas mal de manipulations, j'ai réussi à récupérer le contenu de toute la page comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $recuperation = trim(file_get_contents("http://exemple.com/externalpage.php")); //récupère le texte de la page
    Cette page contient quelque chose qui ressemble à ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    {{Ligne 1 bla bla bla}}
    {{Ligne 2 bla bla bla}}
    {{Ligne 3 bla bla bla}}
    {{en|bla bla bla}}
    {{fr|BLA BLA BLA}} // <-- C'est CE "BLA BLA BLA" que je veux récupérer
    {{de|bla bla bla}}
    {{es|bla bla bla}}
    bla bla bla
    bla bla bla
    bla bla bla
    etc.
    Il n'y a qu'une seule chose que j'aimerais récupérer: le BLA BLA BLA que j'ai mis en majuscules.

    Le nombre de lignes avant et après varie ainsi que le contenu de chacune d'entre elles évidemment. Les seuls repères fixes sont les préfixes en, fr, de, es, it, pt, ... et les accolades {{ }}

    Donc, il me faudrait indiquer à ma fonction de prendre uniquement:

    --> tout ce qui se trouve juste après {{fr|, jusqu'aux deux prochaines prochains }}.

    {{fr|BLA BLA BLA}}

    Petite difficulté supplémentaire: Il se peut qu'il n'y ait pas toujours une ligne avec le préfixe fr ({{fr| ... }}). Dans ce cas, il ne faut rien prendre du tout, ou alors renvoyer quelque chose de vide.

    Comment compléter ma fonction présentée plus haut pour y parvenir? Merci infiniment à celui ou celle qui saura m'aider.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Bonjour,

    Avec une expression régulière :

    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
    <?php
    $fichier = "{{Ligne 1 bla bla bla}}
    {{Ligne 2 bla bla bla}}
    {{Ligne 3 bla bla bla}}
    {{en|bla bla bla}}
    {{fr|BLA BLA BLA}}
    {{de|bla bla bla}}
    {{es|bla bla bla}}
    bla bla bla
    bla bla bla
    bla bla bla
    etc.
    ";
    preg_match('`(({{fr\|)(.*)(}}))`', $fichier, $matches);
    echo $matches[3];
    ?>

  3. #3
    Membre à l'essai
    Inscrit en
    Juin 2007
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 18
    Points : 21
    Points
    21
    Par défaut
    si non "explode" est plus simple pour un débuton !! explode va être utiliser 2 fois à toi de voir et de nous dire qui est la plus performante

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2007
    Messages : 17
    Points : 10
    Points
    10
    Par défaut
    Merci pour vos réponses.

    La première solution proposée fonctionnait hier, mais plus aujourd'hui. Pourtant, je n'ai rien changé de mon côté. Le texte que j'essaie de récupérer, lui, a changé par contre. N'y a-t-il peut-être pas un problème avec certains caractères spéciaux contenus dans le texte d'aujourd'hui et qui n'étaient pas présents hier?

    Voici une copie du texte d'aujourd'hui (en rouge, c'est ce que je dois récupérer).


    {{Featured picture}}
    {{picture of the day|year=2008|month=08|day=29}}
    {{Information
    |Description={{en|Nectarine (''Prunus persica'') fruit development over a 7½ month period, from early winter to midsummer; East Gippsland, Victoria, Australia.
    #Bud formation can be observed on new growth on the plant (early winter) ([[:Image:0.-Nectarine-pre-bud,-SC,-Vic,-Aust.jpg|individual image]])
    #Flower buds clearly formed and leaves start to develop (early spring, ≈ 3 months) ([[:Image:1. Nectarine flower bud, SC, Vic, Aust.jpg|individual image]]).<br>
    #Flowers fully develop and are pollinated by wind or insects (early spring, ≈ 3½ months) ([[:Image:2. Nectarine flower, SC, Vic, Aust.jpg|individual image]]).<br>
    #If successfully pollinated, flowers die back and incipient fruit can be observed; leaves have quickly grown to provide tree with food and energy from photosynthesis (mid-spring, ≈ 4 months) ([[:Image:3. Nectarine wilted flower, SC, Vic, Aust.jpg|individual image]]).<br>
    #Fruit is well developed and continues to grow (late spring, ≈ 5½ months) ([[:Image:5. Nectarine developed fruit, SC, Vic, Aust.jpg|individual image]]).<br>
    #Fruit fully ripens to an edible form to encourage spreading of seed contained within by animals (midsummer, ≈ 7½ months) ([[:Image:6. Nectarine ripened fruit, SC, Vic, Aust.jpg|individual image]]).}}<br>

    fr|{{Développement d'une [[:fr:nectarine|nectarine]] sur une période de 7,5 mois, du début de l'hiver au milieu de l'été. Est du [[:fr:Gippsland|Gippsland]], Victoria (Australie).
    #Formation d'un bourgeon sur une tige de l'année (t0, début de l'hiver).
    #Différentiation de l'aspect des bourgeons floraux et végétatifs (t + 3 mois, début du printemps).
    #Les fleurs sont ouvertes et sont fécondées par le pollen amené vent et les insectes (t + 3,5 mois, début du printemps).
    #Formation des fruits. Le feuillage est pleinement développé et permet la photosynthèse (t + 4 mois, milieu du printemps).
    #Fruit en plein développement (t + 5,5 mois, fin du printemps).
    #Le fruit murit, devenant comestible, ce qui permet de répandre au loin la graine qu'il contient.(t + 7,5 mois, milieu de l'été).
    }}
    |Source=Self-made
    |Date=Early winter to midsummer, 2007/2008
    |Author= [[User:Jjron|jjron]]
    }}

    {{jjron}}


    == Licensing ==
    {{self|GFDL}}


    [[Category:Fruit]]
    [[Categoryrunus]]
    [[Categoryrunus persica]]
    [[Category:Montages]]

    Merci pour vos conseils.

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2007
    Messages : 17
    Points : 10
    Points
    10
    Par défaut
    En fait, c'est de la sytnaxe wiki. Il peut donc facilement y a voir ce genre de caractères:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     ' { } [] | = * : # < > /
    En faisant quelques recherches, je suis tombé par hasard sur qqun qui avait aussi des difficultés avec la fonction preg_match avec les ligatures comme "œ". Est-ce une piste?

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    C'est le retour à la ligne qui le génait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    preg_match('`(({{fr\|)(.*)(}}))`s', $fichier, $matches);
    un petit "s" a la fin et tout remarche bien.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2007
    Messages : 17
    Points : 10
    Points
    10
    Par défaut
    Super, ça marche.

    Petit hic: Le preg_match ne "s'arrête" pas assez tôt. Il me retourne ça:

    Développement d'une [[:fr:nectarine|nectarine]] sur une période de 7,5 mois, du début de l'hiver au milieu de l'été. Est du [[:fr:Gippsland|Gippsland]], Victoria (Australie). #Formation d'un bourgeon sur une tige de l'année (t0, début de l'hiver). #Différentiation de l'aspect des bourgeons floraux et végétatifs (t + 3 mois, début du printemps). #Les fleurs sont ouvertes et sont fécondées par le pollen amené vent et les insectes (t + 3,5 mois, début du printemps). #Formation des fruits. Le feuillage est pleinement développé et permet la photosynthèse (t + 4 mois, milieu du printemps). #Fruit en plein développement (t + 5,5 mois, fin du printemps). #Le fruit murit, devenant comestible, ce qui permet de répandre au loin la graine qu'il contient.(t + 7,5 mois, milieu de l'été).}} |Source=Self-made |Date=Early winter to midsummer, 2007/2008 |Author= [[User:Jjron|jjron]] }} {{jjron}} == Licensing == {{self|GFDL

    Alors qu'il devrait s'arrêter aux deux premiers }} et donc me retourner que le texte en rouge.

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2007
    Messages : 17
    Points : 10
    Points
    10
    Par défaut
    Bon, d'un côté un autre repère pour la fin pourrait être le premier retour à la ligne. ce serait même mieux puisque je me rends compte que le texte qui m'est retourné est souvent trop long. Ce serait peut-être aussi plus simple à résoudre comme ça?

  9. #9
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Petit hic: Le preg_match ne "s'arrête" pas assez tôt. Il me retourne ça:
    ba c'est bien ce que tu voulais non ?

  10. #10
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2007
    Messages : 17
    Points : 10
    Points
    10
    Par défaut
    Non, comme je l'ai dit, il me retourne ça:

    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
    Développement d'une [[:fr:nectarine|nectarine]] sur une période de 7,5 mois, du début de l'hiver au milieu de l'été. Est du [[:fr:Gippsland|Gippsland]], Victoria (Australie).
    #Formation d'un bourgeon sur une tige de l'année (t0, début de l'hiver).
    #Différentiation de l'aspect des bourgeons floraux et végétatifs (t + 3 mois, début du printemps).
    #Les fleurs sont ouvertes et sont fécondées par le pollen amené vent et les insectes (t + 3,5 mois, début du printemps).
    #Formation des fruits. Le feuillage est pleinement développé et permet la photosynthèse (t + 4 mois, milieu du printemps).
    #Fruit en plein développement (t + 5,5 mois, fin du printemps).
    #Le fruit murit, devenant comestible, ce qui permet de répandre au loin la graine qu'il contient.(t + 7,5 mois, milieu de l'été).}}
    |Source=Self-made
    |Date=Early winter to midsummer, 2007/2008
    |Author= [[User:Jjron|jjron]]
    }}
    
    {{jjron}}
    
    
    == Licensing ==
    {{self|GFDL
    Ce que j'ai signalé en rouge ci-dessus est de trop. Il ne s'est pas arrêté aux deux premiers }}

    Mais de toute manière, s'il était possible de s'arrêter au premier retour à la ligne, ce serait encore mieux. Quelque chose comme ça donc:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    preg_match('`(({{fr\|)(.*)(PREMIER RETOUR A LA LIGNE RENCONTRE))`s', $fichier, $matches);

    Je suis en train de faire des recherches mais n'aboutis à rien

  11. #11
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    preg_match('`({{fr\|{{)(.*)(}})`Us', $fichier, $matches);
    echo $matches[2];
    Le "U" c'est pour rendre la recherche non-gourmande.
    Dans une expression gourmande, il cherche la plus grande chaine possible ; donc dans notre cas il cherchait le "}}" le plus loin possible.

    Pour prendre la premiere ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    preg_match("`({{fr\|{{)(.*)(\r?\n)`Us", $fichier, $matches);
    echo $matches[2];
    \r c'est le retour chariot.
    \n c'est une nouvelle ligne.
    ? c'est pour dire l'un ou l'autre car même s'il vont normalement ensemble certains systemes les inverse.

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2007
    Messages : 17
    Points : 10
    Points
    10
    Par défaut
    Je suis désolé mais aucune de ces deux solutions ne semble fonctionner.

    Cela ne me retourne plus rien.

  13. #13
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2007
    Messages : 17
    Points : 10
    Points
    10
    Par défaut
    Ok, je crois avoir trouvééé... je reviens aux nouvelles d'ici deux minutes

  14. #14
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    preg_match("`({{fr\|)(.*)(\r?\n)`Us", $description_fichier, $match_fr);
    y'a une série de {{ qui s'etaient incrustés.

  15. #15
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2007
    Messages : 17
    Points : 10
    Points
    10
    Par défaut
    Voilà, donc ça fonctionne maintenant. J'ai simplement repris ta dernière proposition en enlevant les {{ que tu avais ajouté après fr|. Maintenant ça marche et cela me retourne la première ligne.

    Code qui fonctionne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    preg_match("`({{fr\|)(.*)(\r?\n)`Us", $description_fichier, $match_fr);
    Je t'envoie un message en privé pour te montrer le résultat

    Et merci beaucoup pour ce coup de pouce!

  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Septembre 2007
    Messages : 17
    Points : 10
    Points
    10
    Par défaut
    Nos messages se sont croisés

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 20/05/2015, 19h54
  2. [Débutant] Récupérer contenu d'une page web
    Par diaz987 dans le forum VB.NET
    Réponses: 6
    Dernier message: 02/05/2014, 11h12
  3. Réponses: 6
    Dernier message: 22/08/2012, 00h23
  4. Réponses: 2
    Dernier message: 31/08/2011, 14h05
  5. Récupérer contenu d'une page HTML
    Par ArHacKnIdE dans le forum Langage
    Réponses: 9
    Dernier message: 07/11/2006, 08h56

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