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 :

PHP Simple HTML DOM


Sujet :

Langage PHP

  1. #1
    Membre averti
    Homme Profil pro
    Technicien HelpDesk & développeur php
    Inscrit en
    Mai 2009
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Technicien HelpDesk & développeur php

    Informations forums :
    Inscription : Mai 2009
    Messages : 40
    Par défaut PHP Simple HTML DOM
    Bonjour,

    Je me suis lancé dans un nouveau projet, récupérer certaines informations depuis un site internet en php.

    Le but final est de d'afficher ces informations sous la forme d'une page web qui s'affiche sur mon MagicMirror.

    Pour ce faire, je suis parti sur PHP Simple Html Dom.

    Voici le script à l'état actuel :

    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
     
    <?php include_once('simple_html_dom.php');?>
    <!doctype html>
    <html>
      <head>
    	 <meta charset="utf8">
    	 <meta http-equiv="X-UA-Compatible" Content="IE=edge">
         <title>---</title>
    	 <link href="http://getbootstrap.com/dist/css/bootstrap.min.css" rel="stylsheet">
    </head>
     
    <body>
    <?php
    $html = file_get_html('https://six-group.com/exchanges/funds/security_info_fr.html?id=GREEN');
    echo ("Titre : ");
    foreach($html->find('<h1>') as $numero) {
    echo $numero->plaintext.'  ';
    }
    echo ("<br>Dernier cours : ");
    echo $html->find('SIP_OV_ClosingPrice');
    echo ("<br>Variation quotidienne : ");
    echo $html->find('SIP_OV_ClosingPriceSpecial');
    ?>
    </body>
    </html>
    L'information à récupérer est le prix dont le libellé est "le dernier cours" (en dessus du graphique OU à droite du graphique"
    Vous pouvez voir le site ici : https://six-group.com/exchanges/fund....html?id=GREEN

    Dans l'état actuel, j'arrive à récupérer le "titre" mais lorsque j'appelle l'id pour le prix, j’obtiens "Array"...

    Pourriez-vous m'indiquer quel est le souci ?

    Merci d'avance
    Math11
    Images attachées Images attachées  

  2. #2
    Expert confirmé
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Par défaut
    Sans connaître la bibli, j’imagine que $html->find() renvoie un Array même quand il n’y a qu’un seul ou zéro élément. Il faut donc accéder au contenu du tableau.
    À titre provisoire, tu peux vérifier ce que contient le tableau en utilisant print_r() ou var_dump() à la place de echo.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    echo ("<br>Dernier cours : ");
    var_dump( $html->find('SIP_OV_ClosingPrice') );
    Vu que 'SIP_OV_ClosingPrice' a l’air d’être un id, et vu comment fonctionnent les sélecteurs CSS habituellement, il faudra sans doute que tu ajoutes un # :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var_dump( $html->find('#SIP_OV_ClosingPrice') );
    Enfin, si ton tableau contient bien quelque chose, ce sera un objet de la bibli html, qui ne produit peut-être pas de sortie textuelle utile, même avec var_dump(). On peut sans doute utiliser la propriété plaintext.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $coursArray = $html->find('#SIP_OV_ClosingPrice');
    if (isset($coursArray[0])) {
        echo $coursArray[0]->plaintext;
    }
    else {
        echo 'Élément non trouvé';
    }
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  3. #3
    Membre averti
    Homme Profil pro
    Technicien HelpDesk & développeur php
    Inscrit en
    Mai 2009
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Technicien HelpDesk & développeur php

    Informations forums :
    Inscription : Mai 2009
    Messages : 40
    Par défaut
    Merci Watilin pour ta réponse,

    Mais lorsque j'utilise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var_dump($html->find('#SIP_OV_ClosingPrice'));
    , j'obtiens "array(0) { }".

    Et lorsque j'utilise

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $coursArray = $html->find('#SIP_OV_ClosingPrice');
    if (isset($coursArray[0])) {
        echo $coursArray[0]->plaintext;
    }
    else {
        echo 'Élément non trouvé';
    }
    Plus rien ne s'affiche sur la page.

    Ai-je oublié quelque chose ?

    Merci d'avance,

    Math11
    Images attachées Images attachées  

  4. #4
    Expert confirmé
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Par défaut
    Ah, j’aurais dû y penser… L’élément que tu cibles est créé via JavaScript. Il y a de fortes chances que la bibliothèque PHP Simple Html Dom ne soit pas équipée d’un interpréteur JS.
    Si tu as de la chance, le site a une API à laquelle tu peux demander les données ; sinon, tu vas devoir examiner le code JS de la page en espérant qu’il ne soit pas trop complexe.

    Sinon tu peux aussi tenter de :
    1. lancer un navigateur depuis ton script PHP ;
    2. le faire aller sur la page, interpréter le JS et récupérer la donnée qui t’intéresse ;
    3. là, un userscript ou une extension que tu auras installée préalablement interviendra pour envoyer la donnée vers ton serveur.


    J’ai vu des gens utiliser la technique du navigateur, mais je ne sais plus exactement comment ils faisaient (peut-être tout bêtement avec exec()). Dans tous les cas il faut la permission d’exécuter un logiciel sur le serveur, donc il te faut un serveur dédié ou un micro ordi (type Raspberry Pi).
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  5. #5
    Membre averti
    Homme Profil pro
    Technicien HelpDesk & développeur php
    Inscrit en
    Mai 2009
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Technicien HelpDesk & développeur php

    Informations forums :
    Inscription : Mai 2009
    Messages : 40
    Par défaut
    Merci Watilin pour ton indication,

    Je m'étais lancé dans cette fonction en php; avant j'avais testé avec Jquery, mais sans succès...

    Je regarderais ça probablement demain...

    Math11

  6. #6
    Membre averti
    Homme Profil pro
    Technicien HelpDesk & développeur php
    Inscrit en
    Mai 2009
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Technicien HelpDesk & développeur php

    Informations forums :
    Inscription : Mai 2009
    Messages : 40
    Par défaut
    Resalut,

    Finalement, après quelques essais, j'ai trouvé que le prix que je cherche peux être atteint avec la commande javascript suivante dans la console du navigateur.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementById("mop_ClosingPrice").textContent;
    Du coup, ma question est : comment avec php_simple_dom on peux obtenir le contenu de cet élément ?

    Merci d'avance,

    Math11

  7. #7
    Expert confirmé
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Par défaut
    Le problème c’est que la console te montre une version « vivante » du DOM après que les scripts de la page aient été exécutés. php_simple_dom, lui, ne récupère qu’une version HTML pure et n’exécute pas les scripts. C’est pour ça que je te disais que tu allais devoir examiner le code JS de la page pour faire un peu de rétro ingénierie. Peut-être que tu y trouveras les données en dur sous une forme sérialisée (JSON, CSV ou autre), ou alors une adresse de requête vers une API qui sert les données.
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

Discussions similaires

  1. PHP Simple HTML DOM Parser
    Par PaskoPHP dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 07/01/2019, 20h47
  2. PHP Simple HTML DOM parser
    Par Beruco dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 0
    Dernier message: 17/06/2017, 18h15
  3. Parser une page HTML avec Simple html dom parser
    Par thelover2fr dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 3
    Dernier message: 24/05/2012, 13h26
  4. PHP Simple HTML DOM Parser
    Par almoha dans le forum Langage
    Réponses: 11
    Dernier message: 02/03/2012, 21h40
  5. API simple html dom
    Par ryodo dans le forum Bibliothèques et frameworks
    Réponses: 0
    Dernier message: 26/07/2011, 03h35

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