Blog developpeur

[Zend Framework] Twitter sur votre site avec Zend_Service_Twitter et le protocole OAuth

Ecrit par Guillaume 1 commentaire
Le but de ce post est, dans un premier temps, de découvrir comment intégrer une timeline Twitter avec Zend Framework sur son site web ainsi que de tweeter à partir de celui-ci. Encore une fois, Zend Framework vole à notre secours mais il y a quelques notions à assimiler avant de débuter.

Pour récupérer votre timeline, il est nécessaire de suivre 3 étapes : la mise en place de l'espace de travail, l'authentification avec OAuth, la connexion et la récupération de la timeline. Nous réaliserons cela sous la forme d'une classe dédiée afin que vous puissiez la réutiliser dans d'autres projets et évenuellement la compléter avec d'autres méthodes. Notre classe possèdera en attribut les différentes informations de connexion (elles pourraient être récupérer dans la base de données ou dans un fichier de configuration), un constructeur qui gérera la connexion, et une ou plusieurs méthodes gérant les différents appels à Twitter.

Mise en place de l'espace de travail

Tout d'abord, il vous faut un compte Twitter (j'espère que vous en avez déjà un). Voici le mien @SarramegnaG.

Ensuite il vous faut configurer un nom de domaine local car Twitter n'accepte pas les requêtes provenant de localhost ou 127.0.0.1. Pour ce faire, vous irez dans /etc/hosts pour les linuxiens ou C:WindowsSystem32driversetchosts pour les windowsiens et vous ajouterez la ligne suivant (avec le nom de domaine de votre choix) :
127.0.0.1	monsiteweb.tld
127.0.0.1 www.monsiteweb.tld

Vous pourrez ensuite accéder avec votre site local (accessible à l'adresse http://localhost/ ou http://127.0.0.1/) en tapant http://monsiteweb.tld dans votre navigateur.
Si votre site se trouve dans un sous répertoire, vous voudrez peut-être jouer avec le VirtualHost pour aller taper directement dans le bon répertoire.

Troisième étape, il vous faut déclarer votre application web chez Twitter. Ce n'est pas obligatoire, mais c'est mieux.
Rendez-vous à l'adresse https://dev.twitter.com/apps et connectez-vous.
Créez une nouvelle application et nommez la comme vous le désirez. Une fois valider, vous pourrez modifier l'accès en lecture/écriture si vous souhaitez pouvoir tweeter depuis votre site web. Vous pouvez maintenant générer votre jeton en cliquant dans l'onglet "Détails" et sur le bouton "Créer mon jeton d'accès" ("Create my access token").

Authentification avec OAuth

Qu'est ce que OAuth ?

OAuth est un protocole libre [...] qui permet l'authentification à une API sécurisée d'une façon simple et standard depuis son bureau ou une application web. Pour les développeurs d'une application accédant à une API, OAuth est une façon de publier et d'interagir avec des données protégées. Pour les développeurs fournissant une API, OAuth permet de donner accès aux données tout en protégeant le pseudonyme et le mot de passe des utilisateurs.
Source

En d'autres termes, OAuth sert à authentifier un utilisateur depuis votre site web en ne fournissant ni pseudonyme, ni mot de passe. Du coup votre site se retrouve avec un jeton d'accès qui autorise l'accès aux données du service concerné (Twitter ici). Il peut donc être facilement révoqué si vous le désirez.

Pour obtenir ce jeton, une série d'étapes se met en place : pour avoir accès à vos données, le site web va demander à Twitter un jeton non autorisé. Vous êtes ensuite redirigé vers Twitter pour confirmer ou non la demande de jeton (le lien se fera grâce au jeton non autorisé qui sera fourni dans l'url). Si vous confirmez, vous serez redirigé vers le site qui a fait la demande en fournissant (grâce à l'URL) le code de confirmation associé à ce jeton. Le site fait enfin une demande à Twitter avec le jeton fraichement approuvé et le code de confirmation afin de récupérer le jeton qui permettra au site de récupérer vos données de Twitter.

Schéma des communications entre serveur et Twitter
En noir, les appels serveur à serveur. En rouge, les redirections de l'utilisateur.

Dans notre cas, nous ne gèrerons qu'un compte Twitter, celui associé à notre site web. On va donc pouvoir sauter les étapes de demande de jeton et de redirection de l'utilisateur. Ces informations nous sont données dans l'onglet "OAuth tool" de l'application que nous venons de créer sur Twitter aux rubriques "Jeton d'accès" ("Access Token") et "Jeton d'accès secret" ("Access token secret").

Le squelette de notre classe :
<?php

class MyApp_Service_Twitter {

public function __construct() {
}
}


Ajoutons-y les informations de notre compte :
<?php

class MyApp_Service_Twitter {

private $accountEmail = 'monadresse@email.com'; // Email du compte
private $accessToken = '123456789-abcdefghijklmnopqrstuvwxyz0123456789abcd'; // Access token
private $accessTokenSecret = 'abcdefghijklmnopqrstuvwxyz0123456789abcdefg'; // Access token secret

public function __construct() {
}
}


La connexion à Twitter se fait en deux étapes. La création d'un jeton OAuth avec la classe Zend_Oauth_Token_Access puis la connexion au compte Twitter grâce à la classe Zend_Service_Twitter.

<?php 

class MyApp_Service_Twitter {

private $accountEmail = 'monadresse@email.com'; // Email du compte
private $accessToken = '123456789-abcdefghijklmnopqrstuvwxyz0123456789abcd'; // Access token
private $accessTokenSecret = 'abcdefghijklmnopqrstuvwxyz0123456789abcdefg'; // Access token secret
private $token = null;
private $twitter = null;

public function __construct() {
// Création du jeton
$this->token = new Zend_Oauth_Token_Access();
$this->token->setToken($this->accessToken);
$this->token->setTokenSecret($this->accessTokenSecret);

//Connexion au compte Twitter
$this->twitter = new Zend_Service_Twitter(array(
'username' => $this->accountEmail,
'accessToken' => $this->token
));
}
}


A partir de là, l'appel aux méthodes de Zend_Service_Twitter est enfantin. Il suffit de créer autant de méthode à notre classe que nous souhaitons. Créons par exemple deux méthodes, une qui nous renverra notre timeline, et une autre qui nous permettra de tweeter sur notre compte par exemple.

<?php 

class MyApp_Service_Twitter {

private $accountEmail = 'monadresse@email.com'; // Email du compte
private $accessToken = '123456789-abcdefghijklmnopqrstuvwxyz0123456789abcd'; // Access token
private $accessTokenSecret = 'abcdefghijklmnopqrstuvwxyz0123456789abcdefg'; // Access token secret
private $token = null;
private $twitter = null;

public function __construct() {
// Création du jeton
$this->token = new Zend_Oauth_Token_Access();
$this->token->setToken($this->accessToken);
$this->token->setTokenSecret($this->accessTokenSecret);

//Connexion au compte Twitter
$this->twitter = new Zend_Service_Twitter(array(
'username' => $this->accountEmail,
'accessToken' => $this->token
));
}

public function getMyTimeLine() {
return $this->twitter->status->userTimeline(
array('id' => 'SarramegnaG')
);
}

public function postTweet($message) {
return $this->twitter->status->update($message);
}
}


Il ne vous reste plus qu'à utiliser vos méthodes fraichement créées dans votre contrôleur par exemple.
<?php

class TwitterController extends Zend_Controller_Action {

public function indexAction() {
$twitter = new MyApp_Service_Twitter();
$this->view->timeline = $twitter->getMyTimeLine();
}
}


Voilà, j'espère que ce tutoriel vous aura aider et que vous avez pris autant de plaisir à le lire que moi à l'écrire.

Commentaires :

  • DimitriBocquet a dit :
    Bonjour, Tout d'abord merci pour ce petit tuto, fort simple mais efficace. Je tente de comprendre un peu le fonctionnement global de l'utilisation de Twitter sous Zend (ou tout simplement de l'API Twitter), et sous Google, hormis votre article, je suis tombé sur un tuto (sur developpez.net) qui utilise une "méthode" différente. J'ai du mal à comprendre la différence entre les clés "consumerKey" + "consumerSecret" et celles que vous utilisez : "accessToken" + "accessTokenSecret". Dans quel cas utilise-t-on l'une ou l'autre? Dans votre article, le résultat attendu est bon, mais dans l'autre tuto, je m'y perds un peu. A vrai dire, je ne sais pas le but de ce dernier. Je ne sais pas si je peux mettre un lien vers ce tuto, mais dans tous les cas je pense qu'il est facile à retrouver sur Google. Merci d'avance de m'avoir lu !
Ajouter un commentaire :

Vous devez être connecté pour ajouter un commentaire à cet article.