Page 1 sur 1

Inclure/Parser le tableau HTML d'un distant sur sa page web

Posté : 27 avr. 2016, 16:59
par NonoFR
Bonjour,
j'essaie depuis plusieurs jours de récupérer/inclure un tableau depuis un site distant via la fonction DOMDocument, en vain. :(
J'utilise cette fonction car elle me parait être la plus simple à mettre en place et la plus "naturelle".
Je précise que je ne suis pas très à l'aise avec le PHP (webdesigner de formation : plutôt orienté graphisme et CSS).

Code sur site distant :
<div>
<div>
<div class="box">
    <div class="head">
        <a href="#">M1</a>
        <a href="#">M2</a>
    </div>

    <table class="grid">
        <thead>
            <tr>
                <td>T1</td>
                <td>T2</td>
                <td>T3</td>
                <td>T4</td>
                <td>T5</td>
                <td>T6</td>
                <td>T7</td>
                <td>T8</td>
                <td>T9</td>
                <td>T10</td>
                <td>T11</td>
                <td>T12</td>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>A1</td>
                <td>
                    <a href="#">B1</a>
                </td>
                <td>C1</td>
                <td>D1</td>
                <td>E1</td>
                <td>F1</td>
                <td>G1</td>
                <td>H1</td>
                <td>I1</td>
                <td>J1</td>
                <td>K1</td>
                <td>L1</td>
            </tr>
            <tr>
                <td>A2</td>
                <td>
                    <a href="#">B2</a>
                </td>
                <td>C2</td>
                <td>D2</td>
                <td>E2</td>
                <td>F2</td>
                <td>G2</td>
                <td>H2</td>
                <td>I2</td>
                <td>J2</td>
                <td>K2</td>
                <td>L2</td>
            </tr>
            <!-- etc.. -->
        </tbody>
    </table>

    <div class="foot">
        <a href="#">W1</a>
        <a href="#">W2</a>
    </div>
</div>
</div>
</div>
PHP sur mon site :
<?php
$file = "http://site-distant";

$doc = new DOMDocument();
$doc->loadHTMLFile($file);
$xpath = new DOMXpath($doc);

$elements = $xpath->query('//*/table[@class="grid"]');
if (!is_null($elements)) {
	foreach ($elements as $e) {
		$top = trim($xpath->query('thead//td', $e) [0]->nodeValue);
		echo $top;
		}
	}
?>
Via cette fonction, j'arrive à récupérer du contenu (titres ou textes si l'ID ou la Class sont uniques sur la page), mais cela ne fonctionne pas pour les données (<th> et <td>) du tableau.
Mon but final étant de complètement intégrer le tableau dans ma page web (en conservant la même structure/forme), en y ajoutant mon CSS perso.
Merci par avance pour votre aide. :oops:

Re: Inclure/Parser le tableau HTML d'un distant sur sa page web

Posté : 27 avr. 2016, 18:57
par yann18
bonjour,

tu peux faire une copie de l'élément table (y compris son contenu) au lieu de parser chacun des éléments de la table:
$doc = new DOMDocument(); 
$doc ->loadHTMLFile($file);

$xpath = new DOMXpath($doc );

$table = $xpath->query('//*/table[@class="grid"]')->item(0);

 $html = ""; 
    $children  = $table->childNodes;

    foreach ($children as $child) 
    { 
        $html .= $table ->ownerDocument->saveHTML($child); //construction des sous éléments de la table(thead, tr, td)
    }

//il est possible de mettre en cache les données pour éviter des requêtes http inutiles sur le serveur
//file_put_contents('cache.html', '<table>' . $html . '<table>');
 echo '<table>' . $html . '<table>'; //on affiche la table

Re: Inclure/Parser le tableau HTML d'un distant sur sa page web

Posté : 28 avr. 2016, 10:09
par NonoFR
Bonjour,
merci beaucoup pour ce retour.
En effet, la méthode proposée (copier toute la table telle qu'elle) à l'air beaucoup plus appropriée à mon besoin.
Par contre il doit y avoir une erreur dans le code, car seules les balises <table></table> apparaissent, mais sans aucun contenu à l'intérieur. :(

Re: Inclure/Parser le tableau HTML d'un distant sur sa page web

Posté : 28 avr. 2016, 11:14
par yann18
bonjour,
as-tu bien renseigné l'url du du fichier distant?
$file = "http://site-distant";
$doc = new DOMDocument(); 
$doc ->loadHTMLFile($file);

$xpath = new DOMXpath($doc );

$table = $xpath->query('//*/table[@class="grid"]')->item(0);

 $html = ""; 
    $children  = $table->childNodes;

    foreach ($children as $child) 
    { 
        $html .= $table ->ownerDocument->saveHTML($child); //construction des sous éléments de la table(thead, tr, td)
    }

//il est possible de mettre en cache les données pour éviter des requêtes http inutiles sur le serveur
//file_put_contents('cache.html', '<table>' . $html . '<table>');
 echo '<table>' . $html . '</table>'; //on affiche la table

Re: Inclure/Parser le tableau HTML d'un distant sur sa page web

Posté : 28 avr. 2016, 11:26
par NonoFR
Oui oui, bien sur.
J'ai essayé avec d'autres url même (et donc avec d'autres tableaux et d'autres Class), et même problème : le contenu n'apparait pas.

Re: Inclure/Parser le tableau HTML d'un distant sur sa page web

Posté : 28 avr. 2016, 14:36
par yann18
Et pourtant je viens d'essayer ce même code sur mes serveurs, il fonctionne très bien même si j'ai omis la la balise fermante de la table (</table>) mais ceci n'empêche nullement l'affichage souhaité.

Essaies d'activer le rapport d'erreurs dans le fichier de configuration pour analyser la source du problème
;activation & affichage des erreurs dans le fichier php.ini
error_reporting = E_ALL &  ~E_STRICT
display_errors = On

Re: Inclure/Parser le tableau HTML d'un distant sur sa page web

Posté : 28 avr. 2016, 16:41
par NonoFR
Suite à ton retour (et parce que le bout de code php.ini m'a fait flipper, c'est presque du chinois pour moi |*() ), je viens de refaire un test (avec l'appel du tableau d'un simple fichier .html hébergé sur l'un de mes autres sites) et ça fonctionne parfaitement !
Preuve que ton code est bon. =D>
Sauf que.. cela ne fonctionne toujours pas lorsque je veux récupérer les tableaux des sites qui m'intéressent.

La question est donc maintenant de savoir pourquoi cela marche super bien sur un fichier-distant lambda, mais que cela ne marche pas pour mon besoin ?
Cela serait-il dû au site en question ?
Pour info, voici le type de tableaux que je souhaite récupérer/incorporer directement dans ma page web :
http://www.fff.fr/championnats/fff/dist ... -resultats

Code : Tout sélectionner

<table class="classement">

Re: Inclure/Parser le tableau HTML d'un distant sur sa page web

Posté : 29 avr. 2016, 15:36
par yann18
La question est donc maintenant de savoir pourquoi cela marche super bien sur un fichier-distant lambda, mais que cela ne marche pas pour mon besoin ?
Cela serait-il dû au site en question ?
tu n'as certainement pas le droit de récupérer cette page sans l'accord du propriétaire. Il faut plutôt voir si ce site expose, des flux en rss, les infos dont tu souhaite récupérer.

Re: Inclure/Parser le tableau HTML d'un distant sur sa page web

Posté : 29 avr. 2016, 16:13
par NonoFR
Je viens d'en faire la demande à l'instant.
En tous les cas à première vue, rien ne laisse à penser qu'ils proposent un outil de partage style iframe ou flux rss. :(