Class rss2parser (lecteur de flux rss 2.0)

Soyez le premier à donner votre avis sur cette source.

Snippet vu 7 543 fois - Téléchargée 25 fois

Contenu du snippet

hello voici une class qui permet d'analyser un flux rss 2.0
Elle ne charge pas le flux, vous devez lui fournir un object XML lors de l'initialisation.

var x:XML = new XML();
x.ignoreWhites = true;
x.load("http://fluxrss2");
x.onLoad = function() {
var rss2 = new rss2Parser(x);
}

La methode rssInfo() retourn un objet {title, link, description} qui decrit le flux rss.

la methode parse() permet de parser le fichier, et de stoquer les infos dans un array. la methode retourne true quand elle a fini.

la methode getValue() permet de recuperer l'array créé par parse().
Chaque item de cet array est un object {titre, description, link, source}.

Source / Exemple :


// rss2Parser.as 
// 
// @author: BlackWizzard 
// @description: analyse un flux rss 2.0 
class rss2Parser { 
    public var xmlFile:String; 
    public var x:XML; 
    public var nObject:Object; 
    public var nArray:Array; 
    // 
    function rss2Parser(xml:String) { 
        System.useCodepage = true; 
        nObject = new Object(); 
        nArray = new Array(); 
        x = new XML(); 
        x.ignoreWhite = true; 
        x.parseXML(xml); 
        parse(); 
    } 
    // 
    function rssInfo() { 
        var tmpO:Object = new Object(); 
        tmpO.title = getValueByRef(x.childNodes[0].childNodes[0], "title"); 
        tmpO.link = getValueByRef(x.childNodes[0].childNodes[0], "link"); 
        tmpO.description = getValueByRef(x.childNodes[0].childNodes[0], "description"); 
        return tmpO; 
    } 
    // 
    function parse() { 
        var i:Number = getNodeNumberByRef(x.childNodes[0].childNodes[0], "item"); 
        while (x.childNodes[0].childNodes[0].childNodes[i] != undefined) { 
            var tmpO:Object = new Object(); 
            tmpO.titre = getValueByRef(x.childNodes[0].childNodes[0].childNodes[i], "title"); 
            tmpO.description = ereg_replace(getValueByRef(x.childNodes[0].childNodes[0].childNodes[i], "description"), "n", ""); 
            tmpO.description = ereg_replace(tmpO.description, "a>", "a>"); 
            tmpO.description = ereg_replace(tmpO.description, "<a", "<a"); 
            tmpO.description = ereg_replace(tmpO.description, "u>", "u>"); 
            tmpO.description = ereg_replace(tmpO.description, "<u", "<u"); 
            tmpO.description = ereg_replace(tmpO.description, "i>", "i>"); 
            tmpO.description = ereg_replace(tmpO.description, "<i", "<i"); 
            tmpO.description = ereg_replace(tmpO.description, "b>", "b>"); 
            tmpO.description = ereg_replace(tmpO.description, "<b", "<b"); 
            tmpO.description = ereg_replace(tmpO.description, "img>", "img>"); 
            tmpO.description = ereg_replace(tmpO.description, "<img", "<img"); 
            tmpO.description = ereg_replace(tmpO.description, "&apos;", "'"); 
            tmpO.description = ereg_replace(tmpO.description, """, """); 
            tmpO.link = getValueByRef(x.childNodes[0].childNodes[0].childNodes[i], "link"); 
            tmpO.source = getValueByRef(x.childNodes[0].childNodes[0].childNodes[i], "source"); 
            nArray.push(tmpO); 
            i++; 
        } 
        return true; 
    } 
    // 
    function getValueByRef(xm:XML, s:String) { 
        var i:Number = 0; 
        while (xm.childNodes[i] != undefined) { 
            if (xm.childNodes[i].nodeName == s) { 
                return (xm.childNodes[i].childNodes[0].toString()); 
            } 
            i++; 
        } 
        return ""; 
    } 
    // 
    function getNodeNumberByRef(xm:XML, s:String) { 
        var i:Number = 0; 
        while (xm.childNodes[i] != undefined)  
            if (xm.childNodes[i].nodeName == s) { 
                return i; 
            } 
            i++; 
        } 
    } 
    // 
    function getValue():Object { 
        return nArray; 
    } 
    // 
    function isLoaded() { 
        if (x.getBytesLoaded() == x.getBytesTotal()) { 
            return 100; 
        } else { 
            return x.getBytesLoaded()/x.getBytesTotal()*100; 
        } 
    } 
    // 
    function ereg_replace(s, str, rep, chr) { 
        var t = (chr<0) ? s.substr(chr) : s.substr(0, chr); 
        var s = str.length; 
        var r = rep.length; 
        var p = t.indexOf(str); 
        while (p != -1) { 
            t = t.substr(0, p)+rep+t.substr(p+s); 
            p = t.indexOf(str, p+r); 
        } 
        return (chr) ? (chr<0) ? s.substr(0, s.length+chr)+t : t+s.substr(chr) : t; 
    } 
}

A voir également

Ajouter un commentaire

Commentaires

cs_TomQuick
Messages postés
119
Date d'inscription
jeudi 3 juillet 2003
Statut
Membre
Dernière intervention
11 juillet 2006
-
Génial, que dire de plus avec toi...
Ahhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh fabuleux, 10/10...
BlackWizzard
Messages postés
1277
Date d'inscription
mercredi 21 mars 2001
Statut
Modérateur
Dernière intervention
21 juin 2009
2 -
J'ai oublié de dire, toutes les balises html s'afficherons tel-quel, sauf b, i, u et a qui seront interpretés (du moins, si le champ de texte est html enabled)
afad
Messages postés
715
Date d'inscription
samedi 29 mars 2003
Statut
Membre
Dernière intervention
10 septembre 2009
-
Salut, excuse moi de te dire ça mais je te vois parser ton XML façon Flash MX, tu fais une boucle et tu recuperes les noeuds xml, c'est obsolête par rapport aux fonctionnalités de MX2004 ton truc !!!!!

Ya bien plus simple dans les datas components de MX2004 ça s'appelle XMLConnector(chargement du xml) et DataSet(collecte les noeuds et les parse)...

Regarde ici, si c'est pas clair : http://www.macromedia.com/fr/devnet/mx/flash/data_integration02.html#xml

A+
aFaD
afad
Messages postés
715
Date d'inscription
samedi 29 mars 2003
Statut
Membre
Dernière intervention
10 septembre 2009
-
ta fonction ereg_replace, je trouve ça purement génial, aahhhh des fois, on aimerait bien avoir les fonctionnalités d'un bon PHP pour certaines actions, bien vu :)

A+
aFaD
cs_tom
Messages postés
1511
Date d'inscription
samedi 8 décembre 2001
Statut
Modérateur
Dernière intervention
11 juin 2009
-
Juste un truc black, quand parse a fini de trier, tu devrais faire appel à une fonction non définie, du style onparsecomplete(), comme ca il n'y a plus qu'a faire rss2.onparsecomplete() = function{};
mais bon, c'est un detail... Et ca tue...

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.