[PHP5] Parser un document html

Fermé
canarder Messages postés 1714 Date d'inscription jeudi 28 août 2008 Statut Membre Dernière intervention 13 mai 2018 - 14 mai 2011 à 19:14
canarder Messages postés 1714 Date d'inscription jeudi 28 août 2008 Statut Membre Dernière intervention 13 mai 2018 - 5 juin 2011 à 17:48
Bonjour,

J'ai essayé de parser un document html comme un document xml avec la méthode suivante :
$xml = "http://site.com/xml.php";
$dom = new DOMDocument();
$dom->load($xml);


Sauf que j'obtiens plein d'erreurs (aucunes avec un xml).

Ici j'essaye de parser la page d'une vidéo de YouTube :
Pastebin des erreurs

Mon code :
<?php
$video = isset($_GET['v']) ? $_GET['v'] : "kvDMlk3kSYg";
$xml = "https://www.youtube.com/".$video;
$dom = new DOMDocument();
$dom->load($xml);
$meta = $dom->getElementsByTagName("meta");
foreach ($meta as $title){
if($title->getAttribute("name")=="title"){
$title = $title->getAttribute("content");
break;
}
}
?>


Il me semble qu'il y avait quelque chose de spécial pour l'html mais je ne sais plus où j'ai vu ça.

Merci pour votre aide.


A voir également:

5 réponses

canarder Messages postés 1714 Date d'inscription jeudi 28 août 2008 Statut Membre Dernière intervention 13 mai 2018 354
15 mai 2011 à 05:12
J'ai toujours l'impression que le php xml n'est pas vraiment facilement aidable quand je suis sûr ce forum. je vais essayer sur un autre (developpez) pour ces questions... demain.
0
Giorgiolino Messages postés 253 Date d'inscription vendredi 15 mai 2009 Statut Contributeur Dernière intervention 2 mars 2015 52
15 mai 2011 à 08:55
Bonjour,


parser un document html comme un document xml
Dès cette phrase tu donne déjà l'explication de ton problème.

Un document html n'est pas un document xml. Pourquoi utilises-tu une méthode qui n'êst pas adaptée pour t'étonner ensuite que cela ne fonctionne pas ?
La seule exception concerne les document XHTML qui peuvent être taités comme du XML. Mais encore faut-il être sûr que ton document soit du XHTML valide.

Tout ceci est d'autant plus étrange que l'objet DOMDOcument te fournit des méthodes telles que loadHTML ou loadHTMLFile qui te permettent de traiter du html.

plus d'infos --> https://www.php.net/manual/fr/class.domdocument.php



Sauf que j'obtiens plein d'erreurs (aucunes avec un xml).
--> Ben justement. Voir point précédent.
0
canarder Messages postés 1714 Date d'inscription jeudi 28 août 2008 Statut Membre Dernière intervention 13 mai 2018 354
Modifié par canarder le 15/05/2011 à 11:15
oui j'avais déjà vu quelque part. merci je vais tester et je mettrais la méthode (si elle change).
arf wamp démarre pas des fois c'est bizarre ....
0
mpmp93 Messages postés 6648 Date d'inscription mercredi 13 avril 2011 Statut Membre Dernière intervention 28 septembre 2015 1 339
16 mai 2011 à 09:53
Bonjour,

Il y a plusieurs pistes possibles, mais je ne les ai pas expérimenté.

1) la piste Tidy, c'est un outil qui valide le code HTML et il existe une extension PHP:
https://www.php.net/manual/fr/book.tidy.php

2) la piste Google CHROME

CHROME est le navigateur de Google. Il est possible d'accéder au DOM d'une page HTML - mais pas en PHP -. Google CHROME remet en forme certains éléments non conformes à XML.

Par exemple, si vous faites

<table><tr><td>test</table>


Chrome va reformater le code dans son environnement:

<table><tr><td>test</td></tr></table>


CHROME intègre un analyseur de document HTMKL similaire à Firebug qui montre le code corrigé.

Je pense - mais à confirmer - qu'il doit être possible de récupérer ce code corrigé pour analyse. Et ce code HTML passera sans encombre une analyse XML.

Cdlt
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
canarder Messages postés 1714 Date d'inscription jeudi 28 août 2008 Statut Membre Dernière intervention 13 mai 2018 354
5 juin 2011 à 17:48
1- Je bosse en PHP.
2- Firebug sur Firefox est mieux que Google Chrome, en plus on peut utiliser Greasemonkey pour modifier l'arbre DOM.

Avec loadHTMLFile, j'ai plein d'erreur. Pourtant mon code fonctionne.
Un petit erreor_reporting(0); ... Sauf que j'aimerais bien régler ces erreurs.

<?php
$video = isset($_GET['v']) ? $_GET['v'] : "kvDMlk3kSYg";
$html = "https://www.youtube.com/".$video;
$dom = new DOMDocument();
$dom->loadHTMLFile($html);
$meta = $dom->getElementsByTagName("meta");
foreach ($meta as $title){
if($title->getAttribute("name")=="title"){
$title = $title->getAttribute("content");
break;
}
}
?>
<p>
<a href="http://youtu.be/<?php echo $video; ?>">
<img src="http://i.ytimg.com/vi/<?php echo $video; ?>/default.jpg" style="border:0px;text-align:left;" title="<?php echo $title; ?>" alt="Video image" /><br />
<b><?php echo $title; ?></b>
</a>
</p>
0