Come far sapere al mondo quel che c'è di nuovo
Ci sono un mucchio di modi per far sapere ai propri contatti che qualcosa sul sito è cambiato: si può scrivere sul proprio account di facebook, ci si può affidare alla curiosità dei visitatori più assidui. Oppure si può mettere in piedi un piccolo sistema di syndication RSS.
La prima cosa da fare se si vuole mettere a disposizione un feed delle notizie con Ruby on Rails è…estrarre le notizie. Sembra banale ma è proprio così, è necessario generare un controller che esponga un metodo atto a restituire un oggetto che rappresenta la lista di notizie da condividere:
class FeedController < ApplicationController
def posts
@posts = Post.find(:all,
:order => "updated_at DESC, created_at DESC",
:limit => 10)
response.headers['Content-type'] = "application/rss+xml"
respond_to do |format|
format.xml { render :layout => false}
end
end
end
E’ facile osservare che per generare un feed RSS non c’è bisogno di includere anche il layout della pagina che finirebbe per malformare il suo contenuto.
L’ XML vero e proprio del feed può essere generato in vari modi, uno dei quali coinvolge l’utilizzo di XML Builder e di un template rxml: questo template in particolare deve proprio avere il nome del metodo che fornisce le notizie e deve trovarsi nella cartella della vista associata al controller dei feeds (quindi ad esempio in questo caso si avrebbe “../views/feed/posts.rxml”).
xml.instruct!
xml.rss "version" => "2.0",
"xmlns:dc" => "http://purl.org/dc/elements/1.1/" do
xml.channel do
xml.title 'Digitalwaters.net'
xml.link url_for(:only_path => false,
:controller => 'posts' ,
:action => 'index' )
xml.pubDate CGI.rfc1123_date(@posts.first.updated_at)
xml.description h("A blog about coding and creativity.")
@posts.each do |post|
xml.item do
xml.title post.title
xml.link url_for(:only_path => false,
:controller => 'posts' ,
:action => 'show' ,
:id => post)
xml.description(RedCloth.new(post.content).to_html)
xml.pubDate CGI.rfc1123_date(post.updated_at)
xml.guid url_for(:only_path => false,
:controller => 'post' ,
:action => ' show' ,
:id => post)
xml.author h(User.find(post.user_id).username)
end
end
end
end
L’oggetto xml che viene messo a disposizione provvede a generare i tag xml conformemente ai parametri che gli vengono forniti.
E’ possibile permettere al browser di riconoscere che si mette a disposizione un feed aggiungendo nel tag
<%= auto_discovery_link_tag(:rss, {:controller => 'feed' , :action => 'posts' }) %>
Bibliografia
Fowler, C. (2006). Rails Recipes(Pragmatic Programmers). Pragmatic Bookshelf.
Category: blog
Back