|
Comme nous l'avions annoncé lors de notre premier
article sur le sujet, nous revenons ici sur notre lecteur
RSS pour l'améliorer de manière substantielle,
à savoir l'ouvrir sur le monde plutôt que de
le limiter au serveur sur lequel il repose.
Ce qui change
Notre première version affichait très bien le
flux RSS que nous lui donnions (même si notre analyseur
XML était des plus basiques), mais se limitait aux
flux en provenance du même serveur, puisque Macromedia
a limité la capacité de charger des documents
en provenance d'autres domaines.
Plus spécifiquement, le Flash Player 6 a introduit
un "bac à sable" de sécurité
avec les restrictions suivantes :
1) une animation placée sur un domaine ne peut pas
charger de données depuis un autre domaine,
2) une animation placée sur un domaine ne peut pas
accéder aux propriétés/méthodes
d'une animation placée sur un autre domaine.
Pour la Flash Player 7, ces restrictions ont été
augmentées, et désormais l'animation doit charger
des données sur son propre sous-domaine uniquement
(par exemple, www).
A cela, deux solutions : créer
un fichier crossdomain.xml,
ou passer
par un script serveur (ou "proxy"). C'est la
deuxième que nous avons choisie, plus spécifiquement
la version PHP, que nous avons modifiée comme suit :
[proxy.php]
<?php
//note that this will not follow redirects
readfile($adresseFlux);
?>
Pourquoi ce choix plutôt qu'un autre ? Parce que nous
avons ici décidé de ranger les adresses des
différents flux que nous voulons rendre accessibles
par défaut dans un nouveau fichier XML, stocké
lui au même niveau que l'animation :
[flux.xml]
<?xml version="1.0" encoding="iso-8859-1"
?>
<flux>
<rss nom="JDN Développeurs" addr="http://www.journaldunet.com/developpeur/jdnetdev.xml"
/>
<rss nom="Mezzoblue" addr="http://www.mezzoblue.com/rss/index.xml"
/>
<rss nom="StopDesign" addr="http://www.stopdesign.com/index.xml"
/>
<rss nom="What Do I Know ?" addr="http://whatdoiknow.org/index.xml"
/>
<rss nom="Jeffrey Zeldman" addr="http://www.zeldman.com/feed/zeldman.xml"
/>
</flux>
Passer par le proxy nous permet donc de ne mettre à
jour qu'un seul fichier pour la gestion tant de notre bookmark
de flux que des flux auxquels notre animation peut accéder.
Ce
qui change... coté Flash MX
Passons maintenant en revue les modifications apportées
à notre lecteur RSS, à commencer par l'interface.
Nous laissons en place le champ texte adresseFlux,
qui continue d'être la zone centrale pour l'adresse
du flux, et créons une sorte de bookmark pour nos flux
sous la forme d'un composant ComboBox, dont nous nommerons
l'occurrence listeFlux. Le
reste de l'interface n'est pas modifié.
Le code, de son coté, subit quelques ajouts, a commencer
par le code nous servant à charger flux.xml,
et à placer le contenu de ce fichier dans listeFlux
a l'aide de sa méthode addItem().
flux_xml = new XML();
flux_xml.ignoreWhite = true;
flux_xml.onLoad = function(ok)
{
if (ok = true)
{
flux = this.firstChild.childNodes;
premier = this.firstChild.firstChild;
enCours = premier;
for (i = 0; i < flux.length; i++)
{
listeFlux.addItem(enCours.attributes.nom,
enCours.attributes.addr);
enCours = enCours.nextSibling;
}
}
};
flux_xml.load("flux.xml");
Nous ajoutons donc chaque attribut nom
de balise rss de notre fichier
flux.xml à une étiquette (label)
de listeFlux, et chaque attribut
addr de cette même balise
au champ data de cette même
étiquette.
Faisons maintenant en sorte que le choix d'un champ dans cette
liste remplisse addresseFlux
et charge ce flux :
listeFlux.setChangeHandler("selectFlux");
function selectFlux(liste)
{
adresseFlux = liste.getSelectedItem().data;
chargerFlux();
}
Nous plaçons donc le contenu du champ data
de l'étiquette choisie dans adresseFlux,
et lançons la fonction chargerFlux(),
qui rappelons-le lance le chargement de l'adresse indiquée
dans adresseFlux.
Cette fonction s'est d'ailleurs adaptée pour pouvoir
accéder à notre proxy.php
autant de fois que nécessaire :
function chargerFlux()
{
rss_xml.load("proxy.php?adresseFlux=" + escape(adresseFlux)
+ "&" + Math.random);
}
 |
Forum |
|
|
Réagissez
dans les forums
de JDN Développeurs
|
Plutôt que de charger directement le flux local, nous
chargeons notre proxy PHP en lui fournissant comme variable
le contenu de addresseFlux,
que nous aurons pris soin d'échapper pour éviter
les caractères dérangeants, et auquel nous ajoutons
un Math.random pour s'assurer
que plusieurs sélection de ce flux ne ramènerons
pas toujours le même flux stocké dans le cache.
Le résultat
est en ligne, et nos
sources sont disponibles sous forme de fichier .zip.
|