Un moyen simple pour faire défiler du flux rss sur une page asp.

Soyez le premier à donner votre avis sur cette source.

Vue 15 354 fois - Téléchargée 621 fois

Description

Je m'arrache les tifs depuis trois jours pour faire défiler des news
dans une textbox ou n'importe quoi de lisible :
entre l'extraction XML du flux (réservée à une élite !) et cette charognerie de javascript qui marche jamais (avec les âneries habituelles du style 'ligne 561 il manque le car "}" alors que ton script fait trois lignes....), il faut être de "bonne composition"....
Or, un certain Dmitry Robsman a pondu un control qui lit les Rss, mais surtout qui
se comporte comme un datasource. ça s'appelle RSSToolKit et c'est une petite merveille.
Vous pouvez aller voir ça sur son blog : http://blogs.msdn.com/dmitryr/

ce control (RSSDataSource) permet de recuperer les infos de n'importe quel flux rss. il
suffit ensuite de les envoyer dans un marquee (une zone de texte defilante) et le tour est joué.

bon le probléme a été d'extraire les news, puis de trouver le moyen de modifier le texte
du marquee. vu que c'est impossible, j'insere carrément un nouveau control dans la page avec les balises et le texte a afficher. pour agrémenter le truc, j'ajoute en plus un hyperlien qui pointe vers la page de l'info affichée.

pour faire fonctionner tout ça, il faut :
télécharger la dll : http://blogs.msdn.com/dmitryr/attachment/561200.ashx
copier les bouts de code qui suivent dans votre IDE VS2006.

bon, c'est du direct : pas de controle d'erreur ni rien.
et y a surement des bugs, mais ça marche au moins chez moi !
si vous trouvez plus simple pour afficher des news RSS dans une scrolling box,
je suis preneur.

Source / Exemple :


code VB.NET :

Imports System

'remplissage d'un gridview à partir du Control RssDatasource
'(vous pouvez utilisez un autre moyen pour éplucher le XML du RSS
'mais j'ai pas le temps de tricoter sur le sujet)

        Dim gv As New GridView
        gv.AutoGenerateColumns = True
        gv.DataSource = RssDataSource1
        gv.DataBind()

        Dim info As String
        Dim i As Integer

	'on parcourt tous les éléments du Rss
        For i = 0 To gv.Rows.Count - 1

	'là on concatene les differents news trouvés dans le flux Rss
	'avec l'info elle meme, la date, et petite cerise sur le gateau,
	'un lien vers le site fabriqué a la manivelle avec un bout de javascript
 	    
            info = info + "&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Le " + gv.Rows(i).Cells(3).Text + "&nbsp;>>>&nbsp; " + gv.Rows(i).Cells(0).Text + "&nbsp; <a href=" & Chr(34) & gv.Rows(i).Cells(2).Text & Chr(34) & " onclick=" & Chr(34) & "yourfunction(); return false" & Chr(34) & ">Voir la suite</a>"
		
	    'en plus clair, l'info va ressembler à ça : le 25/12/2054 >>> le pere noel n'existe plus  [Voir la suite]     etc....

        Next

	'on balance le resultat (une string de 3 km de long mais on s'en fout)
	'dans un marquee, puis le tout dans un placeholder.  

        placeholder1.Controls.Add(New LiteralControl("<marquee>" & info & "</marquee>"))

	'vous pouvez modifier les attributs du marquee pour qu'il aille plus
	'vite, qu'il soit jaune ou vert ou bleu, qu'il saute au plafond etc...        
	'y a assez de doc la dessus sur le Web

    End Sub

Code a mettre dans la page Aspx :

/**** à mettre en declaration *********************/
<%@ Register Assembly="RssToolkit" Namespace="RssToolkit" TagPrefix="cc1" %>

/**** à mettre n'importe ou **********************/

<asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder> 

<cc1:RssDataSource ID="RssDataSource1" runat="server" MaxItems="0" 
Url="http://www.liberation.fr/interactif/rss/actualites/"></cc1:RssDataSource>

/***********************************************

  • note : vous pouvez bien sur mettre l'url que vous voulez suivant vos centres d'interet.
  • note 2 : oubliez pas non plus de déclarer la dll 'rsstoolkit.dll'
                                                                                              • /

Conclusion :


j'ai joint un exemple de site Web ultra simple que vous pouvez utiliser directement.

j'espere que ça servira a kekun....

bon developpement !

Lpg

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
28
Scott Guthrie est le "Chef" des developpeurs de la plate forme .net, il était le chef de la division asp.net lors de sa création, c'est un peu le papa d'ASP.net

Si je cite son blog c'est que c'est la seule documentation web qui existe sur le rss toolkit et sans son post c'est trés difficile de comprendre commment ca fonctionne et ta source n'aide pas non plus.

Bref, parlons plutot de ta source. Ce que tu veux faire c'est afficher les derniers news dans une horrible balise <marquee> (qui est obsolete et trés agacante), OK pourquoi pas.
Pour cela regardons comment tu t'y prends, tu as un mis <rssDatasource pour pouvoir binder la source de donnée a un gridview et ensuite tu boucles sur les lignes du gridview !!! :| te rend tu compte des cout que ca engendre de créer un gridview dynamique de le binder tout ca pour recuperer des données que tu aurais pu récuperer directement à partir du rssdatasource ??? niveau perf c'est vraiment horrible.

ensuite tu te sert de AutoGenerateColumns="true" (normal, créer des colonnes dynamiquement dans un gridview c'est pas facile) cela veut dire que si on a un RSS ou l'ordre des elements est différent de celui que tu attends cela plante ! Le RSSDataSource est beaucoup plus puissant que ta simple bidouille !

Je ne fais pas que critiquer sans raison, donc voici un exemple qui fait exactement la meme chose que toi et surtout qui fonctionnera sur tous les RSS ET avec des perfs bien meilleurs :

dans ta page tu mets :
<marquee id="HorribleBalise" runat="server"></marquee>

et dans le code behind :
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

Dim channel As RssToolkit.GenericRssChannel
channel = RssToolkit.GenericRssChannel.LoadChannel("http://blogs.developpeur.org/MainFeed.aspx")

Dim sb As New StringBuilder()

For i As Integer = 0 To channel.Items.Count - 1
Dim Item As RssToolkit.GenericRssElement = channel.Items(i)
sb.AppendFormat("Le {2:d} [ {1}]", Item("link"), Item("title"), CDate(Item("pubDate")))
If i < (channel.Items.Count - 1) Then
sb.Append(" - ")
End If
Next

HorribleBalise.InnerHtml = sb.ToString()

End Sub

En faisant comme cela on a utilisé 10% du RSSDatasource ! Là ou il est interessant c'est quand on utilise l'outil Rssdl qui permet de créer des rss typé donc pas besoin d'utiliser le item("title") mais directement item.title et surtout pas besoin de faire une conversion de la date avec un CDate puisque le flux sera typé. Les exemples d'utilisation de rssdl sont justement dans le blog de Scott Guthrie et je ne suis pas sur que tu l'avais vu ;-)

Maintenant il serait bien que tu modifies ta source en t'inspirant de mon code et ou en utilisant rssdl.


Cyril

PS : quand a tes propos sur JavaScript ce serait bien que tu les retire de l'introduction du code, je suis un fervent défenseur de ce merveuilleux langage et ce que tu écrit montre que tu ne le connais absolument pas.
Messages postés
6
Date d'inscription
dimanche 16 novembre 2003
Statut
Membre
Dernière intervention
29 septembre 2006

dis donc Jésus, tu te prends pas un peu pour le vrai ?
j'ai mis un lien vers le blog du créateur du RssToolkit : ton Scott je sais meme pas qui c'est...

et mon "ton" n'est qu'argotique, pas grossier ou agressif.
et puis quoi, tu vas pas nous faire un camembert pour ce pauvre bout de code dont tous le monde se fiche ! y a des choses beaucoup plus importantes dans la vie ! demande a un tetraplégique si il trouve mon code trop ceci ou trop cela ? et bin tu sais pas, y s'en bat les cacahuétes le pauvre ! et nous deux on est là comme des enfants gatés à tartiner des salades sur un sujet dont la portée dépasse pas la distance de planck...
Messages postés
6814
Date d'inscription
dimanche 15 décembre 2002
Statut
Modérateur
Dernière intervention
13 octobre 2010
28
C'est pas parce que tu as une mauvaise experience en JS que c'est une généralité. J'ai déjà écrit des classes javascript de plusieurs milliers de lignes et je n'ai pas mis beaucoup de temps ;-)

Mais je reconnais que le RSS toolkit est trés bien car justement c'est rapide et simple à mettre en place.

En ce qui concerne ta source ce serait bien de détailler un petit peu et d'employez un autre ton.

"entre l'extraction XML du flux (réservée à une élite !) et cette charognerie de javascript qui marche jamais (avec les âneries habituelles du style 'ligne 561 il manque le car "}" alors que ton script fait trois lignes....), il faut être de "bonne composition"...."

"'(vous pouvez utilisez un autre moyen pour éplucher le XML du RSS
'mais j'ai pas le temps de tricoter sur le sujet) "

Ensuite un lien vers le blog de Scott pour appronfondir le sujet aurait été pas mal :-)

http://weblogs.asp.net/scottgu/archive/2006/02/22/Awesome-ASP.NET-2.0-RSS-Tool_2D00_Kit-Released.aspx


PS : Proviste oui le rss toolkit n'existait pas quand tu avais fais le parseur pour CS ;-)
Messages postés
6
Date d'inscription
dimanche 16 novembre 2003
Statut
Membre
Dernière intervention
29 septembre 2006

j'ai mis un petit site web complet en zip : tu veux que je fasse quoi de plus ? ceux qui ont besoin du truc vont bien se débrouiller avec !

et si ce site n'est effectivement pas un "dépotoir", c'est pas non plus le sanctuaire de la perfection : on y colle nos snippets, et on echange nos astuces...

concernant vos remarques sur le javascript, vous oubliez un détail : si il faut passer trois jours pour faire fonctionner un code de 10 lignes, qu'on soit mauvais ou pas, autant faire de l'assembleur.

et pour le XML je reconnais que ça m'a vite pomper le jonglage entre les elements les nodes les items et toute la clique. j'suis pas seulement nul, mais pressé aussi !

bon WE les gars.
Messages postés
908
Date d'inscription
jeudi 26 juillet 2001
Statut
Modérateur
Dernière intervention
1 février 2015
2
ah oui mais le rsstoolkit est sorti bien après ce que j'ai fait !!
Afficher les 7 commentaires

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.