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 :
Le contenu du fichier xml créé par le script php étant :
( je l'ai mis en arborescence pour plus de lisibilité )
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 :
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 )
|