Parser et mettre en page php un gros flux xml

Consultez la formation au référencement naturel Google de WebRankInfo / Ranking Metrics

bibou2635
WRInaute discret
WRInaute discret
 
Messages: 56
Inscription: Lun Mai 02, 2005 12:19

Parser et mettre en page php un gros flux xml

Message le Mar Jan 02, 2007 22:03

Bonsoir à tous,

et bonne année à toute l’équipe de WRI et les Wrinautes

Je suis depuis plus d'une semaine à la recherche d'info pour parser et mettre en page un gros fichier xml et j'avoue que j'ai le cerveau en bouillie (completement novice dans ce langage).

J'ai fait toutes sortes d'essais mais en vain (magierss ne donne rien). J'en suis à tel point que je ne sais plus quoi, comment ni où (tellement j'ai lu et essayé des trucs que je ne sais pas faire fonctionner)

Si quelqu'un peut m'aider s'il vous plaît (la version php du serveur est la 4.4.4)

Et la structure du xml est :

Code: Tout sélectionner
<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>

</products><product>
<id></id>
<name></name>
<manufacturer></manufacturer>
<description></description>
<category></category>
<number-of-retailers></number-of-retailers>
<image-url width="1024" height="768"></image-url>
<image-url width="1024" height="768"></image-url>
<category-url></category-url>
<prices-url></prices-url>
<details-url></details-url>
<reviews-url></reviews-url>
<expertreviews-url></expertreviews-url>
<rating type="professional">
<average></average>
<num-ratings></num-ratings>
</rating>
<lowest-price currency="EUR"></lowest-price>
<retailer>
<name></name>
<info-url></info-url>
<link></link>
<logo height="50" width="69"></logo>
<lead-time></lead-time>
<price currency="EUR"></price>
<source-type></source-type>
<source-date></source-date>
<price-with-shipping-min currency="EUR"></price-with-shipping-min>
<price-with-shipping-max currency="EUR"></price-with-shipping-max>
</retailer>
<retailer>
<name></name>
<info-url></info-url>
<link></link>
<logo height="28" width="150"></logo>
<lead-time></lead-time>
<price currency="EUR"></price>
<source-type></source-type>
<source-date></source-date>
<price-with-shipping-min currency="EUR"></price-with-shipping-min>
<price-with-shipping-max currency="EUR"></price-with-shipping-max>
</retailer>
</product>
</products>


Pour ou commencer ? A quoi doit ressembler la structure de la page ? Si vous pouviez m'aider en me montrant le chemin s'il vous plaît ?

bibou

[Edit HawkEye: ajouté [ code] et [ /code]... c'est plus lisible ;)]


athoms
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 243
Inscription: Jeu Avr 22, 2004 2:04

Message le Mer Jan 03, 2007 8:05

Bonjour,

Je te conseille personnellement de passer par une solution comme magpierss. Cette librairie open source permet de parser un fichier xml et utilise un système de cache. après tu n'as qu'une fonction a appeler (et modifier) pour parser et afficher (ou encore stocker) ton fichier/flux XML.

fais une recherche google, sur magpierss tu devrais trouver ton bonheur :-)

bibou2635
WRInaute discret
WRInaute discret
 
Messages: 56
Inscription: Lun Mai 02, 2005 12:19

Message le Mer Jan 03, 2007 9:01

Bonjour athoms et merci de ta réponse :D

En fait j'ai testé magpierss et ça marche pour le flux RSS de WRI mais pour mon fichier xml rien :?

J'ai bien compris qu'il fallait adapter le fichier nommé feedparser.php dans le tuto de WRI et du dico du net mais je ne sais pas faire (et à force de chercher, je me suis complètement embrouillé)

J'ai lu aussi en fouillant sur le net qu'il pouvait y a avoir des bugs avec les fichiers inclus dans magpierss portant l'exention .inc et qu'il fallait les modifier en .inc.php (selon la version php du serveur)

Ce que j'ai fait et ça marche toujours avec le RSS de WRI mais pas avec mon flux XML.

Je vous assure, j'ai fouillé tout ce que l'on trouve sur ce sujet mais par où commencer ? certains parlent de DOM, SAX, XSL mais tout ça c’est du langage de programmeur et pour un novice 8O

Quel est le chemin à suivre pour un débutant ? Y a t’il un bouquin du genre pour les nuls ? Ou quelqu’un peut me faire un devis de réalisation ?

Merci de votre aide s'il vous plaît

bibou

DomicilePC
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 210
Inscription: Lun Jan 17, 2005 15:50

Message le Mer Jan 03, 2007 9:16

Ca vient peut-être de la grandeur du fichier à parser (>4Mo).
Essaie d'en faire un plus petit (une dizaine de référence) et vois si ça fonctionne).
Si oui, il ne te reste plus qu'à faire plusieurs fichiers xml plus petits (<4Mo)

bibou2635
WRInaute discret
WRInaute discret
 
Messages: 56
Inscription: Lun Mai 02, 2005 12:19

Message le Mer Jan 03, 2007 9:38

Bonjour DomicilePC

Mon fichier XML ne fait que 47 ko :?


athoms
WRInaute occasionnel
WRInaute occasionnel
 
Messages: 243
Inscription: Jeu Avr 22, 2004 2:04

Message le Mer Jan 03, 2007 11:18

A titre d'info, pour magpierss j'ai eu un petit soucis, de majuscule. j'ai installé la distrib courante sur mon pc windows, ça marchait bien mais en transferrant sous unix ça ne marchait plus. Simplement le Snoopy.inc.machin avait perdu sa majuscule. a verifier donc.

Tiens je te copie colle la solution proposée poar le site nord-cinema (tres bien fait ce site à tout point de vue) pour parser dux XmL sans magpierss.


Code: Tout sélectionner
<!-- Exemple d'utilisation de l'uns de nos fils RSS pour afficher uniquement les titres des films de la semaine - Attention : Votre hébergeur doit supporter le PHP pour pouvoir utiliser ce code sur votre site-->
<?php
$site = "http://www.nord-cinema.com/rss.php";
$fp = @fopen($site,"r");
while(!feof($fp)) $raw .= @fgets($fp, 4096);
fclose($fp);
if( eregi("<item>(.*)</item>", $raw, $rawitems ) ) {
$items = explode("<item>", $rawitems[0]);
for( $i = 0; $i < count($items)-1; $i++ ) {
  eregi("<title>(.*)</title>",$items[$i+1], $title );
  eregi("<link>(.*)</link>",$items[$i+1], $url );
  eregi("<description>(.*)</description>",$items[$i+1], $description);
  echo "<li><a href='".$url[1]."' title='".$description[1]."'target=\"_blank_\">$title[1]</a></li>";
}
}
echo "<li><a href=\"http://www.nord-cinema.com\" title=\"Toutes les sorties cinéma cette semaine et à venir\" target=\"_blank_\">Toutes les sorties cinéma</a></li>";
?>


Par contre pas de cache (:-() mais ça peut être la solution. Pour ton fichier xml, celui-ci n'est pas du rss, c'est pourquoi tu dois remplacer dans le code ci dessus pour gerer les emelents de ton flux.

Par exemple remplacer
Code: Tout sélectionner
eregi("<title>(.*)</title>",$items[$i+1], $title );

par
Code: Tout sélectionner
eregi("<name>(.*)</name>",$items[$i+1], $name );


En fait remplacer les balises par défaut du rss, par les balises de ton xml. C'est très simple : au lieu d'item, ton xml est structuré par products. remplacer donc items par products ainsi que les autres balises :
Code: Tout sélectionner
eregi("<name>(.*)</name>",$items[$i+1], $name );
eregi("<manufacturer->(.*)</manufacturer>",$items[$i+1], $name )
etc..

Voila ça devrait marcher. Tu englobes le tout dans une petite fonction, et le tour est joué ;-)

enfin j'espere pour toi.
voila


ecocentric
WRInaute accro
WRInaute accro
 
Messages: 3577
Inscription: Mar Fév 10, 2004 16:40

Message le Mer Jan 03, 2007 11:43

regarde pê simplexml en PHP5

bibou2635
WRInaute discret
WRInaute discret
 
Messages: 56
Inscription: Lun Mai 02, 2005 12:19

Message le Mer Jan 03, 2007 12:01

Merci athoms pour cette source d'info, allez je vais remetrre les mains dans le cambouie :?

Je vous tiens au courant :D

ecocentric, je ne suis pas en php 5 mais en 4 mais merci quand même du tuyau :wink:

bibou2635
WRInaute discret
WRInaute discret
 
Messages: 56
Inscription: Lun Mai 02, 2005 12:19

Message le Mar Jan 23, 2007 10:21

J'ai laissé tomber ce truc de fou, j'ai tout essayé dans mes possibilités mais là c'est de l'ordre de développeur :(

Merci à vous quand même :wink:

Didier_S
WRInaute passionné
WRInaute passionné
 
Messages: 563
Inscription: Mar Aoû 24, 2004 22:25

Message le Mer Jan 24, 2007 2:00

euh, même pour un développeur, gérer du xml en php4, ça a toujours été une tannée... à tel point qu'on a organisé une migration sur un site du boulot (800k VU/mois, ça fait cher de l'heure de coupure) notamment pour arrêter avec ça. grosse galère.

en bref, si vraiment tu veux manipuler du xml, tourne-toi vers le php5: les différences ne sont pas énormes (si on utilise "basiquement"), et ta vie sera facilitée.


Malaiac
WRInaute impliqué
WRInaute impliqué
 
Messages: 357
Inscription: Mer Mai 04, 2005 21:42

Message le Mer Jan 24, 2007 8:24

php4 => www.simplepie.org est ton ami.
php5 => simplexml + eventuellement XML to Array (pour passer l'objet simplexml en array php classique)


WebRankInfo
Administrateur du site
Administrateur du site
 
Messages: 15883
Inscription: Ven Avr 19, 2002 19:51

Message le Mer Jan 24, 2007 8:29

Merci Malaiac pour simplepie je ne connaissais pas et ça semble pas mal du tout


ecocentric
WRInaute accro
WRInaute accro
 
Messages: 3577
Inscription: Mar Fév 10, 2004 16:40

Message le Mer Jan 24, 2007 9:11

WebRankInfo a écrit:Merci Malaiac pour simplepie je ne connaissais pas et ça semble pas mal du tout


Après pas mal de tests, ça fonctionne bien mieux que Zend Feed (qui ne propose pas d'interface homogène pour l'accès aux propriétés des flux et semble bloquer sur les RDF) et même que MagpieRSS (qui semblerait plus sensible à la formation du flux).

gabriel_f
Nouveau WRInaute
 
Messages: 19
Inscription: Ven Jan 12, 2007 14:26

Message le Mer Jan 24, 2007 10:43

Salut.

Ton fichier xml me semble mal formé de base, ca doit pas plaire au parseur :
</products><product>
Avoir un element fermé en racine ca craint un peu

pour le reste bin il te reste toujours la possibilité d'y appliquer un xslt
http://www.w3schools.com/xsl/xsl_intro.asp
(beaucoup plus simple qu'il n'y parait)

Courage ! le xml ca à l'air chiant mais une fois qu'on met un peu les mains dedans on fait des choses tres performantes tres vite ! =)


Formation recommandée sur ce thème :

Formation Référencement naturel Google : apprenez une méthode efficace pour optimiser à fond le référencement naturel dans Google de façon durable... Formation animée par Olivier Duffez et Fabien Facériès, experts en référencement naturel.

Tous les détails sur le site Ranking Metrics : programme, prix, dates et lieux, inscription en ligne.

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités