Un plugin pour intéragir avec Twitter

Nous avons profité de la demande d’un client, qui souhaitait publier automatiquement un nouveau message sur Twitter après chaque publication d’un article sur son site, pour créer un plugin capable d’intéragir avec le plus connu des services de micro-blogging.

ATTENTION : ce plugin devient obsolète le 30 juin 2010, car Twitter n’acceptera plus l’authentification basique utilisée dans ce plugin. Nous invitons le lecteur à utiliser la nouvelle version du plugin avec prise en charge d’OAuth.

1. Installation

Le code source du plugin Twitter est hébergé sur Github.com : http://github.com/kalt/twitter/tree/master

Pour l’installer, nous tapons la commande suivante depuis le dossier {app}/plugins :

git clone git://github.com/kalt/twitter.git

Attention, comme le plugin utilise la DataSource Twitter d’Alex Ciobanu, installée en tant que dépendance (git submodule), nous devons la télécharger en tapant les deux commandes :

git submodule init
git submodule update

2. Mise en place

2.1. Paramètres du compte Twitter

Nous dupliquons le fichier twitter/config/twitter.default et renommons cette copie en twitter.php. Nous ouvrons ce fichier avec un éditeur, et nous remplaçons les valeurs ‘username’ et ‘password’ par nos identifiants Twitter.

2.2. Lier à un Modèle

Le plugin inclut un Comportement (Behavior) qui peut être lié à un Modèle. La seule configuration à définir est si l’on veut poster un status lors d’une création d’un nouvel enregistrement de ce modèle (‘on’ => ‘create’), lors d’une mise à jour (‘on’ => ‘update’) ou les deux (‘on’ => ‘both’).

class Post extends AppModel
{
	var $actsAs = array('Twitter.Twitterable' => array(
		'on' => 'create'
	));
}

Dans cet exemple, chaque fois qu’un Post sera créé, une notification sera envoyée sur notre compte Twitter, avertissant ainsi nos abonnés.

2.3. Création d’une méthde Model::twitterStatus()

Le Behavior va chercher l’existence d’une méthode de modèle nommée twitterStatus(). Le fonctionnement de cette méthode est à l’entière convenance du lecteur, elle doit simplement renvoyer une chaine de caractères qui sera postée sur Twitter. N’oublions pas qu’un status est limité à 140 caractères.

Afin de rendre les choses simples, nous avons fourni une méthode qui va formater un status comme l’attend Twitter. Cette méthode prend 3 arguments :

  • $message : (requis) il s’agit du texte qui sera envoyé ;
  • $url : URL facultative, un lien vers l’article complet par exemple. Elle sera automatiquement raccourcie (nous avons choisi le service http://is.gd) ;
  • $ending : chaine de caractère optionnelle : si $message est trop long, il sera coupé et $ending sera ajoutée après la coupure. Vaut ‘…’ par défaut.

Exemple complet :

class Post extends AppModel
{
	var $actsAs = array('Twitter.Twitterable' => array(
		'on' => 'create'
	));
 
	function twitterStatus()
	{
		$title = $this->data['Post']['title'];
		$url   = Router::url(array('controller' => 'posts', 'action' => 'view', $this->id), true);
 
		return $this->twitterFormatStatus($title, $url, '...');
	}
}

Ici nous choisissons de composer le status qui sera envoyé avec le titre du Post (coupé et suivi de ‘…’ si trop long), suivi de l’url vers l’article complet.

3. Autres interactions avec Twitter

Dans la mesure ou le plugin se sert d’une DataSource bien complète, nous pouvons accèder aux autres méthodes de l’API Twitter. Nous renvoyons le lecteur à l’article de la Bakery sur la DataSource Twitter pour prendre connaissance des fonctions disponibles.

Par exemple, nous cherchons le mot « cakephp » sur Twitter et affichons les résultats :

class TrucsController extends AppController
{
	var $uses = array('Truc', 'Twitter.Twitter');
 
	function index()
	{
		$ds = ConnectionManager::getDataSource('twitter');
 
		$test = $ds->search('cakephp');
 
		debug($test);
	}
}

Tous les commentaires et critiques sont les bienvenus !

Pierre-Emmanuel Fringant

Articles connexes

Commentaires

Excellent

[...] Un plugin pour intéragir avec Twitter [...]

Super ! Il ne me manquait plus que ça pour enrichir mon site !

Un plugin super merci.

Comment peut-on faire pour gérer plusieurs comptes twitter dynamiquement (c-à-d l’internaute peut entrer ses login & pwd) ?

Merci.

ça à l’air super..

J’aimerais juste qu’on me confirme quelque chose. Cela implique donc d’avoir une table Twitter dans laquelle on enregistre les Tweets ?

"Erreur:  La table twitters pour le modèle Twitter est introuvable"

S’il faut crée une table personnellement je ne vois pas la structure à appliquer concernant la création cette table.

Participez

Pour insérer une portion de code, utilisez <pre lang="php">...</pre>