Parsing Flux RSS

achoura Messages postés 36 Statut Membre -  
avion-f16 Messages postés 20368 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour,
j'ai utiliser LastRss (class php : http://lastrss.oslab.net/) pour parser un flux rss. le block xml a parser contient une tag <title>, une <description> voici un exemple :

<item rdf:about="https://nvd.nist.gov/vuln/detail/CVE-2010-1052">

		<title>CVE-2010-1052</title>
		
		<link>https://nvd.nist.gov/vuln/detail/CVE-2010-1052
		
		<description>Multiple cross-site scripting (XSS) vulnerabilities in index.php in AudiStat 1.3 allow remote attackers 			            to inject arbitrary web script or HTML via the (1) year and (2) mday parameters.  NOTE: the provenance of this            information is 	unknown; the details are obtained solely from third party information.
		</description>
		
		<dc:date xmlns:dc="http://purl.org/dc/elements/1.1/">2010-03-22</dc:date>

</item>


everything tourne à merveille sauf la balise contenant la date !!?? ici la balise est <dc:date>. le parser n'a pas accepté <date> ni <dc:date> {on remarque le namespace dans la balise date :voir l'exemple}

comment je fais pour pouvoir récupérer la date afin de l'afficher avec les autres données récupéres??

merci pour votre aide.
cordialement Achoura ;)

A voir également:

9 réponses

avion-f16 Messages postés 20368 Date d'inscription   Statut Contributeur Dernière intervention   4 510
 
Perso je ne vois pas trop l'intérêt de ces classes quand elles ne servent qu'à ça.
DOM permet de le faire aussi facilement.

<?php
$dom = new DOMDocument('1.0','utf-8');
$dom->load('flux.xml');

$items = $dom->getElementsByTagName('channel')->item(0)->getElementsByTagName('item');

foreach($items as $item) {
	$titre = $item->getElementsByTagName('title')->item(0)->nodeValue;
	$date = $item->getElementsByTagNameNS('http://purl.org/dc/elements/1.1/','date')->item(0)->nodeValue;
	$description = $item->getElementsByTagName('description')->item(0)->nodeValue;
	
	echo '<h3>'.$titre.' ('.$date.')</h3>';
	echo $description;
	echo '<hr />';
}
?>
0
achoura Messages postés 36 Statut Membre 1
 
bonjour, merci pour votre aide. c'est trés gentil ;)
sauf que votre code ne marche pas,,, peut être c'est ma faute j'ai oublié de mentionner que les données que je veut parser existe dans un feed RSS
https://nvd.nist.gov/download/nvd-rss.xml . voici le lien du fichier xml,,, j'ai essaié de changer $dom-load(url),,loadXML(url) ,, mais sans résultats :(

svp vous pouvez tester avec le lien du feed rss : http://nvd.nist.gov/download/nvd-rss.xm

merci encore une fois
@bientôt
0
avion-f16 Messages postés 20368 Date d'inscription   Statut Contributeur Dernière intervention   4 510
 
<?php
$url = 'http://nvd.nist.gov/download/nvd-rss.xml';
$xml = file_get_contents($url);

$dom = new DOMDocument('1.0','utf-8');
$dom->loadXML($xml);

$items = $dom->getElementsByTagName('channel')->item(0)->getElementsByTagName('item');

foreach($items as $item) {
	$titre = $item->getElementsByTagName('title')->item(0)->nodeValue;
	$date = $item->getElementsByTagNameNS('http://purl.org/dc/elements/1.1/','date')->item(0)->nodeValue;
	$description = $item->getElementsByTagName('description')->item(0)->nodeValue;
	
	echo '<h3>'.$titre.' ('.$date.')</h3>';
	echo $description;
	echo '<hr />';
}
?>
Avec beaucoup de chance ton hébergeur acceptera la fonction file_get_contents.
Si pas : https://www.php.net/curl
0
achoura Messages postés 36 Statut Membre 1
 
je m'excuse pour le dérangement :(

ça marche pas non plus, j'ai tester avec zendServer et Apache.

il est clair que le contenu du fichier xml est trop grand, c'est pourkoi j'ai utilisé au début une classe (lastRss) pour configurer combien de flux lire à la fois et la taille du cache à mettre.

merci koméme ;)
0

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

Posez votre question
avion-f16 Messages postés 20368 Date d'inscription   Statut Contributeur Dernière intervention   4 510
 
<?php
$url = 'http://nvd.nist.gov/download/nvd-rss.xml';
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$xml = curl_exec($curl);

$dom = new DOMDocument('1.0','utf-8');
$dom->loadXML($xml);

$rdf = $dom->firstChild;
$items = $rdf->getElementsByTagName('item');

$limite = 5;
$i = 0;
foreach($items as $item) {
	if($i < $limite) { $i++;
		$titre = $item->getElementsByTagName('title')->item(0)->nodeValue;
		$date = $item->getElementsByTagNameNS('http://purl.org/dc/elements/1.1/','date')->item(0)->nodeValue;
		$description = $item->getElementsByTagName('description')->item(0)->nodeValue;
	
		echo '<h3>'.$titre.' ('.$date.')</h3>';
		echo $description;
		echo '<hr />';
	}
}
?>
0
achoura Messages postés 36 Statut Membre 1
 
Veuillez svp vérifier votre code avant de le poster, ou citer les éventuelles problème ou manip à faire :(

VOTRE CODE NE MARCHE PAS.

merci merci merci mais c peut erroner autres gents, alors please ne poster plus avant de tester.

dsl d'être impoli, mais franchement j'ai raison :(
0
avion-f16 Messages postés 20368 Date d'inscription   Statut Contributeur Dernière intervention   4 510
 
Ben moi aussi j'ai raison puisque mon code fonctionne !
Même mon précédant fonctionne !
Et si ton XML était réellement un RSS, mon tout premier code aurait aussi fonctionnait !
0
achoura
 
bonjour,

Fatal error: Call to undefined function curl_init() in C:\wamp\www\ansiWebApp\lire_flux.php on line 3 


et même quand j'ai activé curl dans php.ini et j'ai rédemarrer le service wampapache, j'ai le message suivant:

Warning: DOMDocument::loadXML() [domdocument.loadxml]: Empty string supplied as input in C:\wamp\www\ansiWebApp\lire_flux.php on line 9

Fatal error: Call to a member function getElementsByTagName() on a non-object in C:\wamp\www\ansiWebApp\lire_flux.php on line 12


peut être c mon serveur qui ne marche pas,, donc voila le message d'erreur.
((peut être je dois activer qqe chose d'abord en php !!!))
maybe you have some answer.

merci
0
avion-f16 Messages postés 20368 Date d'inscription   Statut Contributeur Dernière intervention   4 510
 
Ton hébergeur ne doit pas permettre le chargement de fichier externe.
0