3 étapes pour parser et afficher un flux XML d’affiliation avec SPIP


Il y a bon nombre de marchands sur internet qui vous proposent de rentabiliser votre trafic grâce à l’affiliation. Le principe est simple, vous disposez d’un visitorat et les affilieurs disposent de produits à vendre à ces internautes. Parmis les solutions offertes par les plateformes d’affiliation ou affilieurs certains vous proposeront d’afficher directement des informations sous forme de flux d’information, flux XML.
Voyons comment grâce à Spip vous allez pouvoir exploiter ce flux XML et permettre un affichage en toute simplicité.


Vous disposez d’un flux XML qui se présente par exemple ainsi :

<?xml version="1.0" encoding="ISO-8859-1"?>
<flux>
<item>
<link>http://www.url-cible-du-flux-xml.com/produit1.html</link>
<nom>Le nom de votre produit 1</nom>
<description>La description de votre premier produit.</description>
</item>
<item>
<link>http://www.url-cible-du-flux-xml.com/produit2.html</link>
<nom>Le nom de votre produit 2</nom>
<description>La description de votre second produit.</description>
</item>
</flux>

Voici donc ce que vous allez faire afin d’afficher les informations présentées au format brut, format XML dans vos pages de façon plus présentable.

1) Créer une table dans votre base de donnée Spip pour y accueillir les données de votre flux XML :

CREATE TABLE `flux_xml` (
`id_item` INT( 11) NOT NULL AUTO_INCREMENT ,
`link` VARCHAR( 255 ) NOT NULL ,
`nom` VARCHAR( 255 ) NOT NULL ,
`description` TEXT NOT NULL ,
PRIMARY KEY ( `id_item` )
)

Attention : lorsque vous créez une table autre qu’une table Spip et pour l’exploiter dans Spip ensuite il faut :
- que le titre de la table soit en minuscule
- que le titre des champs soit en minuscule et sans autres caractères que de a à z et underscore.

2) Parser le flux XML et l’insérer en base de donnée :

Utilisons pour cela un parseur XML php5 pour simplifier l’exploitation des données XML, il faut pour cela que vous ayez php5 installé sur votre serveur. De nombreux hébergeurs fournissent php5 installé en CGI, il vous suffit donc dans ce cas là de créer un fichier avec l’extension .php5

<?php
//connection a la base de donnee
$dbhost = "";
$dbuser = "";      // mysql user
$dbpass = "";       // mysql password
$dbname = "";     // mysql database
$conn=mysql_connect($dbhost,$dbuser,$dbpass) or die(erreurServeurMySQL());
mysql_select_db($dbname,$conn) or die('Erreur de selection '.mysql_error());

$flux = simplexml_load_file('http://url-de-votre-flux-xml.com/flux.xml');


foreach ($flux->item as $item) {

   $link = $item->link;
   $nom = $item->nom;
   $description = $item->description ;
   
   echo 'link : '.$link.'<br />';
   echo 'nom : '.$nom.'<br />';
   echo 'description : '.$description.'<br />';
   $sql = "INSERT INTO `flux_xml` (`id_item`, `link`, `nom`, `description`) VALUES ('', '$link', '$nom', '$description')";
   $req = mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
   echo 'données inserées en base';

}

?>

Les données de votre flux XML sont maintenant en base de données. Il ne reste plus qu’à afficher ces informations dans vos pages Spip.

3) Créer un template Spip ou ajouter une boucle Spip dans l’un de vos templates pour afficher les données ainsi colléctées :

Une boucle , contenant un code html formaté de façon à respecter la charte de votre site vous permettra d’afficher tout simplement les données de votre flux XML. Remarquez ici que le nom de la table est le nom utilisé dans la boucle et apparait en Majuscules (convention de nommage des boucles Spip habituelle).

Vous pouvez passer des critéres à cette boucle de la même façon que sur toute autre boucle Spip, comme par exemple ici le critére de limite 0,10. On pourrais imaginer ordonner les données par prix, par nom de produit en fonction des données récupérées dans le flux.

<ul>
<BOUCLE_mon_flux_xml(FLUX_XML){0,10}>
<li><a href="#LINK" title="#NOM"><b>#NOM</b></a><br />
description : #DESCRIPTION
</li>
</BOUCLE_mon_flux_xml>
</ul