dimanche 17 janvier 2010

Interface Sinatra en #ruby pour #twitter


Sinatra (lien ici) est un framework léger pour ruby. Léger n'est pas un terme galvaudé pour un framework de moins de 2000 lignes de code. Il repose sur le produit 'Rack' pour la partie serveur WEB.

L'installation se fait par un gemme : gem install sinatra

Et voci le code d'une page minimaliste:
a) Lancer le programme suivant:
(imsinatra.rb)
require 'rubygems'
require 'sinatra'
get '/' do
"Hello,I'm Sinatra!"
end

Puis pointer votre navigateur sur
http://localhost:4567
Sinatra n'est un framework MVC comme Rails , simplement il décompose et traduit une URL en appel de fonction du programme en Ruby.

Le programme en question est composé de clause de type
'ordre HTTP' 'motif' do
#some actions here
end

Ex :
get '/about' do
"exemple de page"
end

Un peu à la manière des langages fonctionnel, c'est la première reconnaissance de motif valide qui traitera la requête. Il faut donc veiller bien ordonnée ses clauses.
Le système est construit sur des routes de type REST, à savoir:
L'url /projets/lemonldap pourra est interceptée par :
get '/projets:nom_du_projet'
#ici la variable params[:nom_du_projet] aura la valeur "lemonldap"


Il est possible d'enrichir la recherche de motif par l'utilisation de mot clé comme :capture combiné avec des expressions régulières.
Ex: get %r{motif_a_rechercher}
puis params[:captures]

Et d'utiliser des caractères 'joker' comme '*' avec le symbole :splat

La reconnaissance de motif peut s'utiliser en conjonction avec le contenu des entêtes HTTP comme par exemple le header 'User-Agent' lié à la variable :agent , et le header 'accept' lié au symbole :provides.
Il est possible d'appeler des vues et des templates depuis un script Sinatra et même de se servir Activerecord pour gérer ses accès aux bases de données. C'est peut là où doit s'arrêter l'usage de Sinatra pour passer à une infrastructure MVC avec Ruby On Rails.
A mon avis Sinatra doit être réservé à l'écriture d'interface web de configuration ou comme frontal à des applications sans base de données.
On peut l'utiliser pour visualiser les tweets collectés sur l'échantillon twitter.

voici un exemple:
On commence par lancer la commande curl de cette manière:
rl http://stream.twitter.com/1/statuses/sample.json -uuser:password -o /tmp/twitter.json


Puis lancer le script suivant:


#!/usr/bin/ruby
require 'rubygems'
require 'json'
require 'tweet'
require 'sinatra'
get '/' do
chaine="<html><body>"
File.open("/tmp/twitter.json" ).each_line do |line|
line.chomp!

next if !line[-1].respond_to?(:chr)

if (line[-1].chr == "}") then
jo= JSON.parse(line)
my_tweet=Tweet.new do |t|
t.tweet = jo
end
if (my_tweet.text) then
chaine += "<p><hr>"
chaine += my_tweet.user["screen_name"]
chaine +="(#{my_tweet.user["followers_count"]}):"
chaine += my_tweet.text

end
end
end
chaine+="</body></html>"
chaine
end

(remarque : la classe 'tweet' a déja détaillée dans des posts précédents)
Ci tout va bien vous devez voir ceci :(clic pour élargir)



Ou ce bon message d'erreur:(clic pour élargir)

Aucun commentaire: