Actu geek trouvailles internet fun

Dans un précédent article ( poster sur twitter via php et bit.ly ) comment poster sur twitter via PHP (en raccourciçant les liens avec bit.ly). Cette méthode fonctionne toujours. Cependant, je trouvais peu esthétique de voir « via API » sous chacun de mes twitts posté avec cette méthode.

Aussi, j'ai mis en place un système utilisant Oauth ( en partant de sources que j'ai adaptées pour cet usage ) afin que « API » soit remplacer par « Gpenverne.fr » . Bien entendu, libre à vous de personnaliser cette expression: elle correspond, en fait, au nom de votre Application twitter.

1) Créer une application twitter.

Pour vous guider dans la création de votre application twitter, je vous conseille ce guide, sur « la ferme du web » ( un très bon site, de surcoî) : Création de l'application sur le site de Twitter

Pour ce tutorial, partons du principe que vous avez déjà créé votre application twitter
(via le tutorial de la ferme du web, en utilisant l'outil de création d'applications de twitter)

Une fois votre application créée, vous obtenez 2 clés:

  • Consumer key
  • Consumer secret

Vous en aurez besoin à chaque utilisation de votre application via votre site.

2) Télécharger les classes nécessaires (TwitterOauth)

Pour poursuivre, nous allons utiliser la classe TwitterOauth, créée par Abraham William, téléchargeable ici.

Je vous ai joins le fichier en question dans l'archive liée à cet article.

Cette classe est à inclure dans tous les scripts ci-dessous !

<?php include « twitteroauth.php »; ?>

3) Récupérer les « token » de connexion

Pour vous connecter à votre compte twitter via votre application, nous allons devoir récupérer des « tokens » de connexion. Ceux-ci permettront à votre application twitter de se poster sur votre timeline.

Il va s'agir, en réalité, de mettre en place un système provisoire de connexion via twitter, à partir duquel nous pourrons générer et récupérer (et stocker) les tockens nécessaires.

Appelons ce fichier : connexion.php

<?php

session_start();

include « twitteroauth.php »;

define(‘CONSUMER_KEY','votre consumer key citée plus haut');
define(‘CONSUMER_SECRET' ,'votre consumer_secret cité plus haut');
define(« OAUTH_CALLBACK », « http://votresite.tld/callback.php »);

/* Créer une connexion twitter avec les accès de l'application */
$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET);

/* On détermine quelle sera l'URL de callback, en utiliasant la constante OAUTH_CALLBACK créée ci-dessus */

$urlRedi = OAUTH_CALLBACK;

/* On demande les tokens à Twitter, et on passe l'URL de callback */
$request_token = $connection->getRequestToken($urlRedi);

/* On sauvegarde le tout en session */
$_SESSION['oauth_token'] = $token = $request_token['oauth_token'];
$_SESSION['oauth_token_secret'] = $request_token['oauth_token_secret'];

/* On test le code de retour HTTP pour voir si la requête précédente a correctement fonctionné */
switch ($connection->http_code) {
case 200:
/* On construit l'URL de callback avec les tokens en params GET */
$url = $connection->getAuthorizeURL($token);
header(‘Location: ‘ .$urlRedi);
break;
default:
$contenu= ‘<div class= »error »>Impossible de se connecter à twitter … Merci de renouveler votre demande plus tard.</div>';
break;
}

?>

Cette page permet de se connecter à notre application twitter, et vous demander d'autoriser l'application à intéragir avec vous. Bien entendu, il faut « accepter » (était-ce utile de le préciser ? :) )

 

Une fois l'autorisation effectuée, twitter nous redirige vers la page callback.php (car c'est ainsi que nous l'avons spécifier ci-dessus)

Voici le code source de callback.php :

<?php

session_start();

include « twitteroauth.php »;

define(‘CONSUMER_KEY','votre consumer key citée plus haut');
define(‘CONSUMER_SECRET' ,'votre consumer_secret cité plus haut');
define(« OAUTH_CALLBACK », « http://votresite.tld/callback.php »);

 

$isLoggedOnTwitter = false;

if (!empty($_SESSION['access_token']) && !empty($_SESSION['access_token']['oauth_token']) && !empty($_SESSION['access_token']['oauth_token_secret'])) {

// On a les tokens d'accès, l'authentification est OK.
$access_token = $_SESSION['access_token'];

/* On créé la connexion avec twitter en donnant les tokens d'accès en paramètres.*/
$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $access_token['oauth_token'], $access_token['oauth_token_secret']);

/* On récupère les informations sur le compte twitter du visiteur */
$twitterInfos = $connection->get(‘account/verify_credentials');
$isLoggedOnTwitter = true;
}

elseif(isset($_REQUEST['oauth_token']) && $_SESSION['oauth_token'] === $_REQUEST['oauth_token']) {

// Les tokens d'accès ne sont pas encore stockés, il faut vérifier l'authentification
/* On créé la connexion avec twitter en donnant les tokens d'accès en paramètres.*/
$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $_SESSION['oauth_token'], $_SESSION['oauth_token_secret']);

/* On vérifie les tokens et récupère le token d'accès */
$access_token = $connection->getAccessToken($_REQUEST['oauth_verifier']);

/* On stocke en session les token d'accès et on supprime ceux qui ne sont plus utiles. */
$_SESSION['access_token'] = $access_token;
unset($_SESSION['oauth_token']);
unset($_SESSION['oauth_token_secret']);

if (200 == $connection->http_code) {
$twitterInfos = $connection->get(‘account/verify_credentials');
$isLoggedOnTwitter = true;

}
else {
$isLoggedOnTwitter = false;
}

}
else {
$isLoggedOnTwitter = false;
}

?>

Si tout se passe bien, grâce à cette page, vous avez récupéré vos tocken d'accès, qui sont, respectivement, $access_token['oauth_token'] et $access_token['oauth_token_secret']

 

Il vous faut les stocker !

Pour cela, soit vous les stocker dans un fichier, soit en BDD, ou alors vous les indiquerez dans votre future fonction de post (que nous allons voir juste après ^)

 

Pour les afficher, rajoutez, en fin de script (callback.php) :

<?php

echo ‘token : ‘.$access_token['oauth_token'].'<br />';

echo ‘token_secret : ‘.$access_token['oauth_token_secret'].'<br />';

?>

 

4) Création d'une fonction permettant de poster

<?php

function postToMyTwitter($message){

include « twitteroauth.php »;

$token = ( la variable récupérée dans callback.php : $access_token['oauth_token']);
$token_secret  = ( la variable récupérée dans callback.php : $access_token['oauth_token_secret']);

$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $token, $token_secret);
$twitterInfos = $connection->get(‘account/verify_credentials');

if (200 == $connection->http_code) {
$parameters = array(‘status' => $message);
$status = $connection->post(‘statuses/update', $parameters);
}

}

?>

Utilisation de la fonction :

<?php postToMyTwitter(‘Hello World ! ‘); ?>

Affichera donc « Hello World » dans votre timeline !

 

Je vous ai joins les fichiers nécessaires dans l'archive zip, téléchargeable [ ici ]. J'ai juste inséré un fichier config.php qui doit être modifié avec vos consumer_key et consumer_secret ainsi que l'url de callback (qui doit être, par exemple : http://votresite.ext/callback.php)

 

En joy ^

 

 

Réactions à cet article
  • http://Votresiteinternet? Corentin

    Bonjour,
    J’ai développé y’a presque un an une sorte de tableau collaboratif utilisant Twitter : les gens tweetent des coordonnées @monappli et mon appli dessine un carré en utilisant ces coordonnées. J’utilisais Basic Auth pour me connecter aux flux des mentions du compte de l’application et tout fonctionnait parfaitement.
    Seulement depuis le 1 Septembre seule OAuth est utilisable avec Twitter. Et là j’avoue que je me retrouve complètement dépassé.

    Grâce à votre article, j’ai réussi à récupérer les Access Key et Key Secret (je les ai notées) mais je n’arrive pas à poster de message sur Twitter et encore moins à récupérer des flux.
    J’ai créé un fichier poster.php5 (.php5 car chez OVH, c’est le seul moyen d’avoir du PHP5) contenant le code de votre point 4 et une ligne postToMyTwitter(‘Blah’);.
    J’ai aussi configuré les deux lignes au début de la fonction avec les clés récupérées juste avant :
    $token = (‘monaccesskey’);
    $token_secret = (‘monaccesssecret’);

    Malgré tout ça, le chargement de poster.php5 ne poste rien du tout sur le compte de l’application.
    Une idée d’où pourrait venir le problème ? Et par la même, connaissez-vous une méthode (la plus simple possible) pour récupérer les mentions ?

    Merci d’avance,

    Corentin

  • http://gregoire-penverne.fr GPenverne

    Bonjour ^
    Avez vous bien défini CONSUMER_KEY, CONSUMER_SECRET ? (les constantes contenant les informations de votre application)

    Pour récupèrer les mentions je ne m’y suis jamais penché, donc je ne sais pas. Je vais regarder cela dans la journée, si je trouve quelque chose, je le publierai à la suite de cette article :)

  • http://Votresiteinternet? Corentin

    Merci beaucoup pour votre réponse.

    J’ai bien défini toutes les clés, pour être sûr je vous copie-colle le code source entier de mon poster.php5 :

    Par ailleurs, une fois que j’ai récupéré les accesskey et accesssecret : plus besoin de connexion.php5 ou de callback.php5 ? (sachant que mon application n’utilise les données que d’un seul utilisateur, à savoir moi).

  • http://Votresiteinternet? Corentin

    Les balises PHP ont due empêcher la publication du code, je reformule :

    function postToMyTwitter($message){

    include « twitteroauth.php5″;

    $token = ‘maaccesskey’;
    $token_secret = ‘maaccesssecret’;
    $c_key = ‘maconsumerkey’;
    $c_secret = ‘maconsumersecret’;

    $connection = new TwitterOAuth($c_key, $c_secret, $token, $token_secret);
    $twitterInfos = $connection->get(‘account/verify_credentials’);

    if (200 == $connection->http_code) {
    $parameters = array(‘status’ => $message);
    $status = $connection->post(‘statuses/update’, $parameters);
    }

    }

    postToMyTwitter(‘Hello World ! ‘);

  • http://Problemecodephp ftholomier

    Bonjour,
    J’ai suivi à la lettre cette doc et j’ai le message d’erreur suivant :
    Parse error: syntax error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or ‘}’ in /var/www/vhosts/belfort.cci.fr/httpdocs/twitter/twitteroauth.php on line 15

    Quelqu’un a t’il une idée ? Merci d’avance.

    Fred

  • http://gregoire-penverne.fr GPenverne

    Il doit manquer un } quelque part. Si tu m’envoies tes fichiers php par mail je pourrai te dire ce qui cloche …

  • http://Votresiteinternet? Olivier

    Bonjour,
    Je teste actuellement votre API.
    J’ai donc tous les fichiers dans un répertoire. J’ai renseigné les KEYs
    Après avoir lancé connexion.php, il semble que je me connecte à Twitter, ensuite, retour sur mon site et j’ai juste /rep/callback.php?oauth_token=xxxxxxxxxxxxxxxxxxxx
    et une page blanche.
    De quelle manière appelle t-on function.posttomytwitter.php, svp ?

    Merci par avance (et pour votre travail).
    Cordialement,

  • http://gregoire-penverne.fr GPenverne

    Bonjour Olivier :)
    Il suffit, sur la page callback.php d’insérer : if($isLoggedOnTwitter )postToMyTwitter(« message »);

    (en incluant la fonction, évidemment )

  • http://Votresiteinternet? Votre Pseudo ?

    Bonjour Grégoire,
    J’ai effectué les modifs. Par contre, impossible d’envoyer un tweet. Je vous ai envoyé un mail avec les fichiers. Merci par avance. Cordialement, Olivier

  • http://Votresiteinternet? Olivier

    Merci pour votre intervention rapide et efficace. Le problème est résolu.
    Très cordialement,
    Olivier

  • Guillaume

    Bonsoir Grégoire,
    J’ai décompressé l’archive, installé les docs sur mon serveur et j’ai de suite une erreur :
    Parse error: syntax error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or ‘}’ in /homez.116/authentiy/www/twitteroauth.php on line 15

    Avez-vous une idée ?
    Cordialement, Guillaume

  • http://gregoire-penverne.fr GPenverne

    Bonjour :)
    Le fichier twitteroauth.php est extrait de http://github.com/abraham/twitteroauth/tree/master/twitteroauth/

    A priori le code que ce fichier contient est correct.

    Vous n’avez rien modifié dans les fichiers de l’archive de l’article ? (fichier .zip)
    Est-ce un hébergement mutualisé ou votre serveur dédié ?

  • Guillaume

    Grégoire,
    C’est un hébergement mutualisé : OVH (j’ai regardé aussi avec 1and1 mais j’ai les mêmes erreurs).

    J’ai juste modifié 2-3 trucs :
    - j’ai indiqué mes clés (config.php)
    - j’ai indiqué : http://www.mon_nom_de_domaine.fr/twitter/callback.php (config.php)
    et dans le fichier function.posttomytwitter.php, j’ai modifié :
    $token = ( la variable récupérée dans callback.php : $access_token['oauth_token']);
    $token_secret = ( la variable récupérée dans callback.php : $access_token['oauth_token_secret']);
    par
    $token = $access_token['oauth_token'];
    $token_secret = $access_token['oauth_token_secret'];
    car j’avais ça comme erreur :
    Parse error: syntax error, unexpected T_STRING in /homez.116/authentiy/www/twitter/function.posttomytwitter.php on line 7

    Merci pour ton aide :)
    Guillaume

  • http://jcray.com,http://ilik.ithttp://deedil.com GPenverne

    Pourrais tu m’envoyer tes fichiers par mail ?
    (en mettant des clefs bidon si tu le souhaites)

  • Guillaume

    Grégoire, je viens de te les transmettre via Gmail.
    Merci ! J’ai laissé les bonnes clés.

  • Guillaume

    Grégoire,
    je préfère ajouter un retour via votre site pour que tout le monde puisse en prendre connaissance. J’ai peut-être trouvé une solution à mon problème car j’arrive a afficher les tokens dans l’url et je n’ai plus l’erreur habituelle.
    J’ai ajouter dans mon htaccess la ligne suivante : SetEnv PHP_VER 5
    Je vais toutefois tester probablement ce soir si j’arrive à faire un changement de statut sur twitter :) Je vous tiens au courant !

  • http://jcray.com,http://ilik.ithttp://deedil.com GPenverne

    Ah vi je n’avais penser à préciser que je n’ai testé le script que sous php5 …

  • Guillaume

    C’était bien ça :) Merci encore pour votre aide Grégoire !

J'ai selectionné ce produit geek pour vous: j'ai pensé qu'il vous intéresserait ;) Je vous recommande donc "Clavier holographiques pour iphone et ipad"...

D'ailleurs, en parlant de trucs de geeks, saviez vous que Geekndev vous propose une sélection de produits geek du même genre, dans la "boutique geek" ?