J’ai récemment eu besoin d’intégrer les données d’un flux RSS dans 36000.fr, Ruby nous facilite tellement la tâche que c’est presque trop simple…
Lecture du flux
Commençons par ajouter les bibliothèques utilisées :
require 'rss' require 'open-uri'
Voici un exemple de code qui va récupérer les informations dans le fichier RSS et préparer une chaine pour l’affichage :
feed_url = "http://www.url_du_flux" output = "<h1>Lecture d'un flux RSS</h1>" open(feed_url) do |http| response = http.read result = RSS::Parser.parse(response, false) output += "Titre du flux : #{result.channel.title}<br />" result.items.each_with_index do |item, i| output += "#{i+1}. #{item.title}<br />" if i < 10 end end
Explications :
- feed_url est bien sûr l’adresse du flux
- output est une chaine qui contiendra le code à afficher dans notre page web
On commence par lire le flux avec http.read puis on le parse avec RSS::Parser.parse, cette étape permet de transformer le flux en un objet simple d’utilisation, par exemple, pour obtenir le titre du flux, un result.channel.title suffit.
Ce n’est pas plus compliqué que ça et de plus il existe un tutoriel en anglais pour RSS Parser si vous voulez approfondir.
Mise en cache
Pourquoi pas utiliser le petit système de cache que j’ai présenté dernièrement ? Voici comment faire :
if CachedItem.check_for("RSS") # Disponible depuis le cache flux_rss = CachedItem.get_cached("RSS") else feed_url = "http://www.url_du_flux..." open(feed_url) do |http| flux_rss = http.read flux_rss = RSS::Parser.parse(flux_rss, false) CachedItem.store_data("RSS", flux_rss) end end
On commence par vérifier si le flux à déjà été parsé récemment et si ce n’est pas le cas, on le récupère et on le stocke dans le cache.
Je me suis inspiré d’un article de Robby pour le sujet de ce billet.

3 commentaires ↓
Tombé sur ton article apres qq recherches, je me demandais comment lire par ce biais ou simple rss l’attribu d’un element, a savoir une valeur du type <enclosure url="urlimage.qqchose" />, tuojours dasn le but d’afficher justement cette url, ou bien encore de recuperer cette valeur et de la placer dans des balises img.
Je viens de faire quelques essais : l’accès à un attribut se fait de la même façon qu’à un élément, ex avec mon flux rss :
<channel rdf:about= »http://www.sbnet.fr/blog/index.php/ »>
<title>Le blog SBNET</title>
<description />
un simple puts result.channel.about.to_s permet d’afficher le about
<ul>
<li> <%=@result5.channel.title%></:li>
<li><%=link_to(image_tag(@result5.channel.image.url.to_s, :border => 1,:title =>@result5.channel.description),@result5.channel.link)%>
<%= @result5.channel.link%>
<h6 style="font-size:8pt; color:#804000">
<%=@result5.items.size%> items Date : <%=@result5.channel.pubDate%></:li>
</h6>
<% total = 0%>
<% @result5.items.size .times do %>
<li><%= link_to @result5.items[total].title, @result5.items[total].link%></li>
<% i=0%>
<% if @result5.items[total].enclosure !=nil%>
<li><%=link_to(image_tag(@result5.items[total].enclosure.url.to_s, :border => 1,:title =>@result5.items[total].description),@result5.items[total].link)%></li>
<% end %>
<% total = total + 1 %>
<% end %>
</ul>
def rss1
$fichier_xml = "http://www.lemonde.fr/rss/sequen...
response = open( $fichier_xml)
xml1 = response.read
@result5 = RSS::Parser.parse(xml1, false)
end
je complète avec la page web qui va afficher les items du flux
içi exemple d’un flux RSS du journal Le Monde
Laisser un commentaire