Twatt-wiitt on Rails

édité Le 10/06/2010 à 09:39 par Trinoo

Association des Amis des Oiseaux

Avec le nouveau compte de Trinoonet sous Twitter, j'ai pensé à ajouter un peu de contenu dynamique pour animer cet espace isolé. Cela peut aussi être une bonne stratégie de référencement du fait que le contenu de la page ne sera plus statique au yeux de Google Bot.

Pas la peine de réinventer la roue, on va utiliser un Gem qui porte bien son nom "Twitter".

sudo gem install twitter

voilà c'est fais !!! ...

Mais non !, il reste quand même quelques lignes à éditer, RoR c'est magique, mais pas à ce point.

Il nous faut une requête dans le contrôleur pour ramasser les tweets et une petite boucle dans la vue.
Pour cette dernière j'opterais pour une vue "partial" à inclure dans le "Layout". Mais avant tout, il faut se connecter à l'API de Twitter avec notre paire (login/password). Ne pas oublier d'appeller la librairie 'twitter' soit dans le contrôle en question ou bien sous application_controller.rb

class tweetreader < ApplicationController
 
  require 'twitter'

  def tweets
     httpauth = Twitter::HTTPAuth.new('username', 'password')
     client = Twitter::Base.new(httpauth)
     ......
  end
end

notre objet est instancié, et prêt à recevoir les méthodes appropriées.
On va lancer une lecture des Tweet de Trinoo dans le contrôleur

@tweets =  client.user_timeline

Un petit rappel sur les méthode:
home_timeline : les tweets de l'utilisateur et ses 'pots' qui incluent les retweets.
friends_timeline : les tweets de l'utilisateur et ses 'pots' sans les retweets.
user_timeline : uniquement les tweets édités par l'utilisateur authentifié.

et d'autres méthodes, dont le nom explique bien leur fonctionnalité comme :

retweeted_by_me
retweeted_to_me
retweets_of_me

Le retour de ces méthodes (ou requêtes si on veut) se limite aux 20 resultats rescents.
Par la suite, dans la vue, il y aura une petite boucle pour la lecture et l'affichage

<% @tweets.each do |tweet| %>
<%= image_tag "#{tweet.user[:profile_image_url]}" %>
<%= tweet.user[:screen_name] %> <br/>
<%= tweet.text %><br/>
<% end %>

Vous pouvez visiter API Twitter pour trouver toutes les méthodes et attributs
Dans mon cas, j'ai utilisé la "console" (script/console) pour avoir une idée sur la structure du Hash reçu

>>  @user = Twitter::Base.new(Twitter::HTTPAuth.new('login', password')).user_timeline

Ce qui me reste à faire c'est d'isoler les Tweets générés par TwitterFeed pour ne pas les afficher sur le site (DRY oblige ! ) par un petit test du genre:

if  !(tweet.source == "<a href=\"http://twitterfeed.com\\" rel=\"nofollow\\">twitterfeed</a>")
....
end

Les possibilités par la suite pour jongler avec des recherches sous Twitter ou bien programmer des Tweets en fonction des événements, sont énormes, amusez-vous bien avec.

SOURCES:

http://twitter.rubyforge.org
http://apiwiki.twitter.com