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 :

Petit soucis avec Preg_match


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Inscrit en
    Février 2003
    Messages
    234
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 234
    Par défaut Petit soucis avec Preg_match
    Bonjour à tous,
    Afin de poursuivre mon petit projet, j'ai besoin de récupérer une valeur affiché sur une page de l'intranet de mon entreprise pour l'afficher sur ma mage et effectuer un calcul avec cette valeur par la suite.

    Pour commander, voici un extrait du code de la page intranet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <td class="cell_data cell2">CET</td><td class="cell_label cell3">Dernier</td><td class="cell_data cell4"><strong>4525.12</strong><span class="pricetime">04 Jan 2016 14:50</span></td>
    J'ai besoin de récupérer le chiffre [i]4525.12[i].
    Pour ce faire, j'ai donc voulu utiliser le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php $sitefutcac = file_get_contents("http://collaboratif/sites/Intranet/SitePages/intranet_avotreservice.aspx");
    preg_match('#Dernier</td><td class="cell_data cell4"><strong>(.*?)</strong>>#', $sitefutcac, $cotefutcac);
     
    print_r($cotefutcac[1]);
    ?>
    Malheureusement rien ne s'affiche.

    Pour essayer, j'ai essayé le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php echo $sitefutcac;?>
    La page intranet s'affiche comme attendu.

    Je suppose qu'il doit encore s'agit d'une petite erreur toute bête, mais je ne trouve pas.

    Quelqu'un aurait une idée ?
    Merci d'avance.

  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
    Par défaut
    Tu as mis ">>" dans ton expression.

    Sinon, les expressions régulières ne sont pas idéales pour lire du HTML. Il vaut mieux utiliser des classes spécialisés comme Domdocument ou SimpleXML.
    Et pour le fond du sujet, le chiffre affiché sur l'intranet doit provenir de quelque part, je ne pense pas qu'il soit mis à la main.
    Il serait plus logique soit d'aller le lire directement à sa source, soit d'avoir une interface pour transmettre la valeur d'un site à l'autre.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre très actif
    Inscrit en
    Février 2003
    Messages
    234
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 234
    Par défaut
    Bonjour Sabotage et merci de t'intéresser à mon problème.
    J'ai corrigé mon code comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    preg_match('#Dernier</td><td class="cell_data cell4"><strong>(.*?)</strong>#', $sitefutcac, $cotefutcac);
    Mais rien n'y fait, il ne semble toujours pas fonctionner.
    Je n'y connais pas grand chose en programmation je me dépatrouille tout seul en regardant les exemples sur le net. je ne sais donc pas comment utiliser des classes spécialisés comme Domdocument ou SimpleXML. Aurais tu un exemple à me proposer ?

    Le chiffre que je récupère est effectivement issus d'un calcul à partir de données entrées par les utilisateurs d'un autre service. J'avais essayé de creuser de ce coté là, mais c'est une usine à gaz pour dépatouiller les tenants et les aboutissants. D'autant plus que la personne qui avait fait ces codes n'est plus là.
    Honnêtement, le plus simple est de récupérer la valeur directement sur la page web.
    En réalité il y a plusieurs valeurs sur différentes pages, mais seule celle-ci me bloque.

  4. #4
    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
    Par défaut
    Ca donnerait ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $doc = new DOMDocument();
    $doc->loadHTMLFile('http://collaboratif/sites/Intranet/SitePages/intranet_avotreservice.aspx');
    $xpath = new DOMXpath($doc);
    $elements = $xpath->query('//td[@class="cell_data cell4"]/strong');
    echo $elements[0]->nodeValue;
    Je suppose que le problème de ton expression regulière est que le vraie code HTML n'est pas sur une seule ligne.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre très actif
    Inscrit en
    Février 2003
    Messages
    234
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 234
    Par défaut
    Merci pour cet exemple !
    Une petite question : je ne comprends pas vraiment la syntaxe de ton code pour sélectionner l'information que je veux extraire de la page :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $xpath->query('//td[@class="cell_data cell4"]/strong');
    Dans le code que j'utilisais, j'utilisais (.*?).
    L'info que je dois extraire est exactement placé après le code suivant Dernier</td><td class="cell_data cell4"><strong>
    et arrêter juste à la balise </strong>

    Je ne comprends pas non plus pourquoi tu indiques [@ Qu'est ce que ça représente ?

    Encore merci de t'intéresser à ma question et merci d'avance pour tes lumières

  6. #6
    Membre très actif
    Inscrit en
    Février 2003
    Messages
    234
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 234
    Par défaut
    J'ai une autre petite question :
    Par exemple, dans une autre page, je dois récupérer une valeur derrière le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <span source="lightstreamer" table="Shm_FullArea_ctl00_PushTable" item="C1DE000CW40VT7" field="bid">
    Le truc c'est la référence DE000CW40VT7 n'est pas fixe mais provient d'un champs utilisateur.
    Ce code est déjà dans une variable PHP ($CodePos1) que j'utilise ailleurs dans mon code.

    Je pensais faire un code du genre suivant, mais bien évidement ça le fonctionne pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    preg_match('<span source="lightstreamer" table="Shm_FullArea_ctl00_PushTable" item="C1' echo $CodePos1; ' field="bid">(.*?)</span>#', $sitebeta, $cotebeta);
    Quelqu'un aurait une idée ?
    Sans doutes qu'avec la solution de me propose Sabotage, ça sera plus simple ?

Discussions similaires

  1. petit soucis avec mon graveur
    Par Vador dans le forum Périphériques
    Réponses: 8
    Dernier message: 02/11/2005, 14h58
  2. petit soucis avec les listes
    Par Death83 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 03/09/2005, 10h08
  3. Petit souci avec clause where
    Par ybruant dans le forum SQL
    Réponses: 1
    Dernier message: 21/07/2005, 22h10
  4. petit souci avec des variables avec des fonctions psql
    Par dust62 dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 02/04/2005, 13h45
  5. [DEBUTANT] petits soucis avec un prgm de chat
    Par LechucK dans le forum MFC
    Réponses: 8
    Dernier message: 19/01/2004, 16h52

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