'getAttribute' tout bête, mais qui ne passe pas

'getAttribute' tout bête, mais qui ne passe pas - PHP - Programmation

Marsh Posté le 24-11-2010 à 11:58:33    

Bonjour :)
 
J'essaie de récupérer une balise enclosure dans un fichier rss. Cette balise étant enfant directe de la balise channel.
 
Dans mon fichier php j'essaie de construire la page, mais avant même de pouvoir faire ça, lors de la déclaration des variables de récupération
j'ai une fatal error, Call to a member function getAttribute() on a non-object.
Et celà à cause de la 3ème ligne de ce bout de code. Pourtant j'ai l'impression que le chemin pour récup l'attribut "url" est bon. non?
 

Code :
  1. $tnl = $item->getElementsByTagName("enclosure" );
  2. $enclosure = $tnl->item(0);
  3. $iurl = $enclosure->getAttribute("url" );

Reply

Marsh Posté le 24-11-2010 à 11:58:33   

Reply

Marsh Posté le 24-11-2010 à 12:08:20    

var_dump($enclosure) donne quoi?


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 25-11-2010 à 04:22:06    

comme je suis plutot noob en php, j'ai fait quelques recherches sur var_dump ce qui me balance quasi toujours sa définition absolue. et forcement ça m'aide pas. mais je vais creuser, si je peux avoir des réponses avec ça. :) et j ferai du feed ou du need bientot

Reply

Marsh Posté le 25-11-2010 à 10:49:29    

Par curiosité, t'utilises quelle lib pour parser ton xml?


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 26-11-2010 à 11:21:38    

rsslib.php que j'ai eu ici :
http://www.scriptol.fr/rss/lecteur-rss.php

Reply

Marsh Posté le 26-11-2010 à 11:36:31    

Bon et bien var_dump($enclosure) me donne ça :
object(DOMElement)#7 (0) { } NULL
 
Voilà comment je l'ai placé, j pense pas avoir fait de bêtise :
$tnl = $item->getElementsByTagName("enclosure" );
$enclosure = $tnl->item(0);
var_dump($enclosure);
 
j post quand même le bout de xml sur lequel je voudrais que la variable fasse sa recup :

Code :
  1. <item>
  2. <title>Online Survey for Web makers</title>
  3.    <link>http://uww.nbonlien.com</link>
  4.    <pubDate>Fri, 05 nov 2010 11:02:00 GMT</pubDate>
  5.    <description><![CDATA[This article form Eric Meyer will be use to make a world map of people who are working on the web or for it.<br />It will take you 10 min to fill in the form, and you could appreciate a very well done one.]]></description>
  6.    <enclosure url="http://images/blogImg/i-took-the-2010-survey.gif" length="1800" type="image/jpeg"/>
  7. </item>


Reply

Marsh Posté le 29-11-2010 à 15:23:43    

up please :)

Reply

Marsh Posté le 29-11-2010 à 17:52:29    

mais $item c'est quoi a la base ?

Reply

Marsh Posté le 30-11-2010 à 09:54:26    

$item c'est ça :

Code :
  1. $items = $channel->getElementsByTagName("item" );


Mais l'erreur n'est pas là puisque juste au dessus de là où la fatal error se déclenche j'ai ça qui récup sans prob ce qui est contenu dans la balise <title>

Code :
  1. $tnl = $item->getElementsByTagName("title" );
  2. $tnl = $tnl->item(0);
  3. $title = $tnl->firstChild->textContent;


Et ça marche très bien aussi pour les balises <link>, <description>, <pubdate>.

Reply

Marsh Posté le 07-12-2010 à 10:41:19    

Ouhla, c'est n'importe quoi cette utilisation de getElementsByTagName
 
Je te conseille urgemment d'utiliser les XPath avec DOMXpath car getElementsByTagName ne suit pas la hierarchie de l'arbre donc c'est surement pour ça que ça bug.


Message édité par smaragdus le 07-12-2010 à 10:42:29
Reply

Marsh Posté le 07-12-2010 à 10:41:19   

Reply

Marsh Posté le 10-12-2010 à 14:41:01    

Merci pour l'aide smaragdus.
Je viens juste de voir ta réponse et entre temps n'ayant pu résoudre le problème, je me suis penché vers une autre méthode pour afficher mon xml.
SimpleXML utilise la méthode cURL qu'on m'a conseillé lorsque j'avais demandé pourquoi rien ne passait une fois le site en ligne.
Avec ça, tout est niquel en local (je récupère balises et attributs sans prob), mais chez OVH j'ai une jolie erreur :

Code :
  1. Fatal error: Cannot instantiate non-existent class: simplexmlelement


Après qq recherches, j'ai cru comprendre qu'il avait des problèmes parce que ça utilisait le php5. Mais renommer mes fichiers .php en .php5 n'a rien changé.
Voila le code, mais j'ai plus l'impression que c'est un truc relatif à la configuration de php. Mais bon ça me dépasse encore le php ^^

Code :
  1. <?php
  2. $curl_hd = curl_init('http://www.maxiii.me/feedHomeBlog.xml');
  3. curl_setopt($curl_hd, CURLOPT_RETURNTRANSFER, true);
  4. curl_setopt($curl_hd, CURLOPT_HEADER, 0);
  5. $rss = curl_exec($curl_hd);
  6. curl_close($curl_hd);
  7. function parse_rss($doc)
  8. {
  9.     foreach($doc->channel->item as $item)
  10.                {
  11.  echo $item->title . "\n";
  12.                 echo $item->pubDate . "\n";
  13.  echo $item->description . "\n";
  14.  foreach($item->enclosure as $enc){
  15.   echo "<a href='".$item->link."'><img src='".$enc['url']."' /></a>" . "\n";
  16.  }
  17.     } 
  18. function parse_atom($doc)
  19. {
  20.     foreach($doc->entry as $item)
  21.     {
  22.         echo $item->title . "\n";
  23.         echo $item->link->attributes() . "\n";
  24.         echo $item->content . "\n\n";
  25.     } 
  26. }
  27. $rss_doc = new SimpleXmlElement($rss, LIBXML_NOCDATA);
  28. if(isset($rss_doc->channel))
  29. {
  30.     parse_rss($rss_doc);
  31. elseif(isset($rss_doc->entry))
  32. {
  33.     parse_atom($rss_doc);
  34. }
  35. ?>


 
Merci d'avance :) j'en profite que qq'un passe par là. Car je ne suis toujours pas sorti du problème

Reply

Marsh Posté le 13-12-2010 à 13:27:39    

Bon et bien, j'ai trouvé. simplexml nécessite php5 pour fonctionner et chez OVH c'est la version 4.4.x

Reply

Marsh Posté le 14-12-2010 à 13:41:09    

J'ai envoyé un message au support d'OVH qui m'a r'pondu très rapidement :
 
> Vous pouvez mettre à jour la version de votre php vers la php5.
>  
> Pour changer la version de php qui va exécuter un fichier .php, il suffit de créer un .htaccess dans le répertoire de votre site. Avec le bloc note de Windows ou tout autre éditeur de texte, tapez :
>  
> SetEnv PHP_VER 5
>  
> Enregistrez ce fichier et uploadez le sur votre ftp dans le répertoire concerné et renommez le en .htaccess. Les fichiers .php seront alors exécutés avec la version 5 de php.
>  
> http://guides.ovh.com/Php5ChezOvh
 
Et là tout roule :D enfin....

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed