HOME SwishMax est une marque déposée Vers le bas de la page

Génération de flux rss (xml php)

 On se propose de générer un fichier xml qui permet d'afficher un flux rss.
 La saisie des informations est effectuée dans une animation flash qui envoie celles-ci à un script PHP qui,
 aprés traitement va créer le fichier xml nécessaire au flux.

 Au final, votre navigateur affichera (par exemple) quelquechose comme :
 flux RSS

 Le contenu du fichier xml créé par le script php étant :  
                       ( je l'ai mis en arborescence pour plus de lisibilité )
 flux RSS

 Naturellement, ceci n'est qu'un exemple car il existe d'autres balises : image, guid, ....

 Cet exemple ne s'adresse pas à un débutant car il nécessite une bonne compréhension, et c'est pourquoi
 la méthodologie de création des objets sera succincte.
 
 Les différentes étapes vont être décrites maintenant.

Partie 1 : Création des Objets.

 1 - Définissez les dimensions générales 800x600. Couleur de fond quelconque.
 Frame rate = 25.

 2 - L'objectif est de créer cette boite de dialogue :

 boite de dialogue flux rss

 Cette boite va se composer ( voir arborescence ) de : 
 

 - d'une étiquette ( nom : Génération flux rss )  Arial 16 , largeur 160, hauteur 20, _x=400   _y=20
 - d'une étiquette ( nom : Titre )  Arial 16 , largeur 41, hauteur 18,   _x=15   _y=55
 - d'une étiquette ( nom : Url )    Arial 16 , largeur 33, hauteur 18,  _x=15   _y=80
 - d'une étiquette ( nom : Description )    Arial 16 , largeur 88,  hauteur 18, _x=15   _y=105
 - d'un champ ( nom : titre0_txt , type : Input, var : title0, target coché ) 
	_x=150   _y=55		w=357	h=18
   La 5ème icône sous var doit être cliquée pour obtenir un fond avec bordure.
 - d'un champ ( nom : url0_txt , type : Input, var : url0, target coché ) 
	_x=150   _y=80		w=357	h=18
   La 5ème icône sous var doit être cliquée pour obtenir un fond avec bordure.
 - d'un champ ( nom : descr0_txt , type : Input, var : descr0, target coché ) 
	_x=150   _y=190		w=555		12 lignes
   La 5ème icône sous var doit être cliquée pour obtenir un fond avec bordure.
 - d'une ligne de séparation
 - d'une étiquette ( nom : Titre )  Arial 16 , largeur 41, hauteur 18,   _x=15   _y=230
 - d'une étiquette ( nom : Url )    Arial 16 , largeur 33, hauteur 18,   _x=15   _y=255
 - d'une étiquette ( nom : Catégorie )    Arial 16 , largeur 90, hauteur 18,   _x=15   _y=280
 - d'une étiquette ( nom : Description )    Arial 16 , largeur 89,  hauteur 18, _x=15   _y=305
 - d'un champ ( nom : titre1_txt , type : Input, var : title1, target coché ) 
	_x=150   _y=230		w=357	h=18
   La 5ème icône sous var doit être cliquée pour obtenir un fond avec bordure.
 - d'un champ ( nom : url1_txt , type : Input, var : url1, target coché ) 
	_x=150   _y=255		w=357	h=18
   La 5ème icône sous var doit être cliquée pour obtenir un fond avec bordure.
 - d'un champ ( nom : cat1_txt , type : Input, var : cat1, target coché ) 
	_x=150   _y=280		w=357	h=18
   La 5ème icône sous var doit être cliquée pour obtenir un fond avec bordure.
 - d'un champ ( nom : descr1_txt , type : Input, var : descr1, target coché ) 
	_x=150   _y=390		w=555		12 lignes
   La 5ème icône sous var doit être cliquée pour obtenir un fond avec bordure.
 - d'une ligne de séparation
 - d'une étiquette ( nom : Titre )  Arial 16 , largeur 41, hauteur 18,   _x=15   _y=430
 - d'une étiquette ( nom : Url )    Arial 16 , largeur 33, hauteur 18,   _x=15   _y=455
 - d'une étiquette ( nom : Catégorie )    Arial 16 , largeur 90, hauteur 18,   _x=15   _y=480
 - d'une étiquette ( nom : Description )    Arial 16 , largeur 89,  hauteur 18, _x=15   _y=505
 - d'un champ ( nom : titre2_txt , type : Input, var : title2, target coché ) 
	_x=150   _y=430		w=357	h=18
   La 5ème icône sous var doit être cliquée pour obtenir un fond avec bordure.
 - d'un champ ( nom : url2_txt , type : Input, var : url2, target coché ) 
	_x=150   _y=455		w=357	h=18
   La 5ème icône sous var doit être cliquée pour obtenir un fond avec bordure.
 - d'un champ ( nom : cat2_txt , type : Input, var : cat2, target coché ) 
	_x=150   _y=480		w=357	h=18
   La 5ème icône sous var doit être cliquée pour obtenir un fond avec bordure.
 - d'un champ ( nom : descr2_txt , type : Input, var : descr2, target coché ) 
	_x=150   _y=590		w=555		12 lignes
   La 5ème icône sous var doit être cliquée pour obtenir un fond avec bordure.
 - d'un bouton ( nom : gen_btn , target coché ) 	_x=651  _y=40  w=150  h=22
 - d'un texte ( nom : msg_txt, type : dynamic, var message, target coché )
	_x=530  _y=60  w=268  h=20

Partie 2 : Le script de l'animation.

 Dans Scene_1, on va placer une fonction de création de date de publication.
 Le format d'affichage sera dd-mm-yyyy

 Entrez le script suivant dans Scene_1 :
 function makeDate():String
{
   var d:Date = new Date();
   
   var y:Number = d.getFullYear();
   var m:Number = d.getMonth()+1;
   var j:Number = d.getDate();
   var m_str:String = m.toString();
   if ( m <= 9 )       m_str = "0" + m_str;
   var j_str:String = j.toString();
   if ( j <= 9 )       j_str = "0" + j_str;
   
   return   ( j_str + "-" + m_str + "-" +  y.toString() );
}

 Remarque :
    SwishMax2 ne tolère que l'AS2. Par conséquent, le code suivant serait obsolète pour la dernière version de Flash,
 la classe XML a été renommée XMLdocument en AS3 pour des raisons de compatibilité.

 Entrez le script suivant pour le bouton gen_btn :

 on (release) 
{
    var ddd = makeDate();
    
    var rssXML:XML = new XML();
    // crée des données au format XML à envoyer au serveur
    rssXML.xmlDecl = '<?xml version="1.0" encoding="ISO-8859-1"?>';
    
    // Il faut envoyer   <rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
    var rssElement:XMLNode = rssXML.createElement("rss");
    rssElement.attributes.version = "2.0";  
    // L'attribut devrait être xmlns:dc !!! Le scriptPHP s'occupera de la correction;
    rssElement.attributes.xmlns = "http://purl.org/dc/elements/1.1/";      
       
    var rss_channel:XMLNode = rssXML.createElement("channel");
    
    var rss_title0:XMLNode = rssXML.createElement("title");
    rss_title0.appendChild(rssXML.createTextNode( title0 ));  // charge le contenu de la variable title0
    
    var rss_url0:XMLNode = rssXML.createElement("link");
    rss_url0.appendChild(rssXML.createTextNode( url0 ));  // charge le contenu de la variable url0
    
    var langue:XMLNode = rssXML.createElement("language");  // langage
    langue.appendChild(rssXML.createTextNode( "fr-fr" ));
    
    var ttl:XMLNode = rssXML.createElement("ttl");   // rafraichissement
    ttl.appendChild(rssXML.createTextNode( "30" ));
    
    var rss_descr0:XMLNode = rssXML.createElement("description");
    rss_descr0.appendChild(rssXML.createTextNode( descr0 ));  // charge le contenu de la variable descr0
    
    var wmaster:XMLNode = rssXML.createElement("webmaster");  // webmaster
    wmaster.appendChild(rssXML.createTextNode( "JohnDoe@koi29.info" ));
    
    var cpy:XMLNode = rssXML.createElement("copyright");  // webmaster
    cpy.appendChild(rssXML.createTextNode( "John Doe" ));
    
    var pubdate0:XMLNode = rssXML.createElement("pubdate");  // date de publication
    pubdate0.appendChild(rssXML.createTextNode( ddd ) );   
    
    
    var rss_item1:XMLNode = rssXML.createElement("item");
    var rss_title1:XMLNode = rssXML.createElement("title");
    rss_title1.appendChild(rssXML.createTextNode( title1 ));  // charge le contenu de la variable title1
    
    var rss_url1:XMLNode = rssXML.createElement("link");
    rss_url1.appendChild(rssXML.createTextNode( url1 ));  // charge le contenu de la variable url1
    
    var rss_cat1:XMLNode = rssXML.createElement("category");
    rss_cat1.appendChild(rssXML.createTextNode( cat1 ));  // charge le contenu de la variable cat1
    
    var rss_descr1:XMLNode = rssXML.createElement("description");
    rss_descr1.appendChild(rssXML.createTextNode( descr1 ));  // charge le contenu de la variable descr1
    
    var pubdate1:XMLNode = rssXML.createElement("pubdate");  // date de publication
    pubdate1.appendChild(rssXML.createTextNode( ddd ));   
    
    
    var rss_item2:XMLNode = rssXML.createElement("item");
    var rss_title2:XMLNode = rssXML.createElement("title");
    rss_title2.appendChild(rssXML.createTextNode( title2 ));  // charge le contenu de la variable title2
    
    var rss_url2:XMLNode = rssXML.createElement("link");
    rss_url2.appendChild(rssXML.createTextNode( url2 ));  // charge le contenu de la variable url2
    
    var rss_cat2:XMLNode = rssXML.createElement("category");
    rss_cat2.appendChild(rssXML.createTextNode( cat2 ));  // charge le contenu de la variable cat2
    
    var rss_descr2:XMLNode = rssXML.createElement("description");
    rss_descr2.appendChild(rssXML.createTextNode( descr2 ));  // charge le contenu de la variable descr2
    
    var pubdate2:XMLNode = rssXML.createElement("pubdate");  // date de publication
    pubdate2.appendChild(rssXML.createTextNode( ddd ));     
    
    rss_channel.appendChild(rss_title0);
    rss_channel.appendChild(rss_url0);
    rss_channel.appendChild(langue);
    rss_channel.appendChild(ttl);
    rss_channel.appendChild(rss_descr0);
    rss_channel.appendChild(wmaster);
    rss_channel.appendChild(cpy);
    rss_channel.appendChild(pubdate0);
    
    rss_channel.appendChild(rss_item1);
    rss_item1.appendChild(rss_title1);
    rss_item1.appendChild(rss_url1);
    rss_item1.appendChild(rss_cat1);
    rss_item1.appendChild(rss_descr1);
    rss_item1.appendChild(pubdate1);
    
    rss_channel.appendChild(rss_item2);
    rss_item2.appendChild(rss_title2);
    rss_item2.appendChild(rss_url2);
    rss_item2.appendChild(rss_cat2);
    rss_item2.appendChild(rss_descr2);
    rss_item2.appendChild(pubdate2);  
    
    rssElement.appendChild(rss_channel);
    rssXML.appendChild(rssElement);
   
   
   data = new LoadVars();
    // Ajoute notre document XML
   data["xml"] = rssXML.toString();
   
    var ReplyXML:XML = new XML();
    // les noeuds de texte qui ne contiennent que des espaces vierges sont supprimés au cours de l’analyse
    ReplyXML.ignoreWhite = true;
    // cette fonction se déclenche quand un paquet XML est reçu du serveur.
    ReplyXML.onLoad = function(success:Boolean) 
    {
       if (success) 
        {
            switch (this.firstChild.attributes.STATUS) 
            {
                case "OK" :  message = "Fichier généré avec succès.";   break;
                case "FAILURE" :  message = "Echec en création de fichier.";   break;
            }
        }  
    }
    // Poste la variable avec sendAndLoad
    data.sendAndLoad("generate.php", ReplyXML, "POST");
}


 L'objet rssXML, associé à data["xml"], va servir à envoyer un document xml à un script php nommé generate.php
 situé sur le serveur.
 Ce script php ( voir plus loin ) va retourner une réponse sous forme de document xml qui va être traité par ReplyXML.
 Cette dernière fonction va réagir en fonction de l'attribut du noeud xml REPLY.
 Si le texte est  <REPLY STATUS="OK" />   l'attribut STATUS a pour valeur OK et un message de succés est affiché.
 Si le texte est  <REPLY STATUS="FAILURE" />  l'attribut STATUS a pour valeur FAILURE et un message d'échec va s'afficher.

Partie 3 : Le script PHP generate

 Avec votre éditeur de texte préféré, entrez ce qui suit et sauvez sous le nom generate.php.
 
  <?
	$temp = stripslashes($_POST['xml']);
	// Correction pour avoir <rss xmlns:dc=
	$temp = str_replace( "xmlns", "xmlns:dc", $temp );
	// pour obtenir les caractères accentués corrects
	$temp = utf8_decode($temp);

	// Écrit les données dans un fichier
	$fp = fopen('fluxRSS.xml', 'w');
	// traitement 
	if ($fp)
	{
		fwrite($fp, $temp);
		fclose($fp);
		header("Content-Type: text/xml");
		$xml = '<?xml version="1.0" encoding="ISO-8859-1" ?>';
		$xml.= '<REPLY STATUS="OK">';
	}
	else
	{
		header("Content-Type: text/xml");
		$xml = '<?xml version="1.0" encoding="ISO-8859-1" ?>';
		$xml.= '<REPLY STATUS="FAILURE">';
	}
	echo $xml;  // ReplyXML récupérera ce xml
?>

 Et voilà, c'est terminé !

 ( Consultez aussi la rubrique PHP du site )
 




   
Retour MENU

Vers le haut de la page
Retour vers la page d'accueil de koi29

Dernière Modification : Sam 10 Avril 2010 6:58
Copyright © 1999-2010 Jean-Paul Molina Tous droits réservés.