Class rss2parser (lecteur de flux rss 2.0)

Soyez le premier à donner votre avis sur cette source.

Snippet vu 7 581 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

agsirhk
Messages postés
6
Date d'inscription
jeudi 23 février 2006
Statut
Membre
Dernière intervention
28 décembre 2006
-
Merci à tous pour l'info j'ai solutionner le problème grace à la source de Loubidou "CONTOURNEMENT DU PROBLÈME DE SÉCURITÉ CROSSDOMAIN DE FLASH POUR LE CHARGEMENT DE DONNÉES !" enfin voila encore bravo et merci à tous.
BlackWizzard
Messages postés
1277
Date d'inscription
mercredi 21 mars 2001
Statut
Modérateur
Dernière intervention
21 juin 2009
2 -
agsirhk
Messages postés
6
Date d'inscription
jeudi 23 février 2006
Statut
Membre
Dernière intervention
28 décembre 2006
-
Bonjour,
J'ai le fameux problème de sécurité flash sur le chargement distant d'un flux rss.
Deux points : le flux ce présente sous la forme "http://DOMAINE/source.php?Id=id&Mdp=mdp&Rubrique=NEWS"
J'essaie donc de charger tout ca, ca fonctionne en local puis sur le serveur de ma boite plus rien ne s'affiche. Je ne sais pas quoi faire je suis réelement coincé et n'est pas les connaissances Black ou autre :p

Bon si vous pouvez m'aider c'est urgentissime :'(

Contact diredct : lhauck@putsch-paris.fr
snakeeater1
Messages postés
176
Date d'inscription
vendredi 14 mai 2004
Statut
Membre
Dernière intervention
7 mars 2008
-
up ( dsl )
voila l'astuce du loadVars ne marche pas !
un exemple ici : http://labo.bkcreation.info/flashtest/rss.html
et voila mon code source :

import bkcore.strlibs.str;

System.useCodepage = true;
var x:XML = new XML();
x.ignoreWhite = true;
__x = new LoadVars();
x.onLoad = function()
{
_root.txt.text = str.parseHTML(_root.x.toString());
}
__x.sendAndLoad("http://www.flashkod.com/rss.aspx?type=code", x);

Y aurait-il une autre astuce ? car j'ai vraiment besoin de faire une lecteur de flux RSS :/
BlackWizzard
Messages postés
1277
Date d'inscription
mercredi 21 mars 2001
Statut
Modérateur
Dernière intervention
21 juin 2009
2 -
non, aucune difference.
Juste plus clair je trouve...

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.