20
MARS

[Tutorial] Twitter API #1 Comment poster un message sur Twitter en PHP ?

Publié le 20/03/09 à 07h29 par DJo

Voici un nouveau tutorial mêlant à la fois twitter et PHP, donc deux fois plus intéressant !

Tutorial Twitter API

Introduction

Objectif de ce tutorial

L'objectif du tutorial est d'apprendre à manipuler l'API Twitter afin de créer notre propre service twitter ou tout simplement pour faire interagir nos applications web PHP avec le réseau social.

Plan du tutorial:

  • Envoyer un message basique sur twitter avec PHP
  • Suite à déterminer prochainement ...

 

Pré requis:

Vous devez avoir le module cURL activé sur votre serveur web, et disposer de PHP 5 pour pouvoir faire le tutorial qui suivra (Utilisation de classes etc).

 

Comment poster un message sur Twitter en PHP ?

Pour la première partie de ce tutorial, nous allons déjà voir un truc très basique qui vous donnera une idée de comment marche l'API Twitter.

Nous allons créer un formulaire pour HTML qui nous permettra d'envoyer directement nos messages sur Twitter.

Tweeter en PHP avec l'API Twitter

L'appel de l'API:

L'essentiel du système, pour tweeter en PHP, repose dans le code suivant:

$result = shell_exec('curl http://twitter.com/statuses/update.xml -u login:pass -d status="message a envoyer"');

Dans une requête HTTP executée par cURL, nous appelons les serveurs de Twitter, et plus particulièrement le service update (celui qui permet d'envoyer un message).

curl http://twitter.com/statuses/update.xml

Dans cette URL, on passe en argument le login et mot de passe de l'utilisateur pour qu'il soit authentifié au service (Impossible sans désormais):

-u login:pass

Et bien sûr le message à tweeter:

-d status="message a envoyer"

 

Une fois la requête executée, Twitter va retourner un résultat:

  • Soit XML si vous appelez http://twitter.com/statuses/update.xml
  • Soit JSON si vous appelez http://twitter.com/statuses/update.json

A vous de voir quel format de retour choisir suivant vos préférences.

Voilà le retour en XML lorsque je valide mon message:

<status>
  <created_at>Thu Mar 19 22:32:07 +0000 2009</created_at>
  <id>1357070413</id>
  <text>Marche bien mon ptit script PHP :P</text>
  <source>web</source>
  <truncated>false</truncated>
  <in_reply_to_status_id></in_reply_to_status_id>
  <in_reply_to_user_id></in_reply_to_user_id>
  <favorited>false</favorited>
  <in_reply_to_screen_name></in_reply_to_screen_name>
  <user>
    <id>25397594</id>
    <name>Mr DJo</name>
    <screen_name>DrDJo</screen_name>
    <location></location>
    <description></description>
    <profile_image_url>http://static.twitter.com/images/default_profile_normal.png</profile_image_url>
    <url></url>
    <protected>false</protected>
    <followers_count>1</followers_count>
  </user>
</status>

Notre message à bien été envoyé !

Rien d'autre à faire ! Simple non ?

Voilà un aperçu de l'API Twitter. Pour interragir avec le service, il suffira de faire des requêtes HTTP sur les serveurs twitter et de récupérer le résultat au format XML ou JSON.

 

Un peu de pratique:

Voici le script que j'ai utilisé pour faire mes tests, vous pouvez à votre tour essayer le script et voir les différents retours JSON ou XML possibles.

<?php
	if ( isset($_POST) ) {
		$login = $_POST['login'];
		$pass = $_POST['pass'];
		$type =$_POST['type'];
		$msg = str_replace('"','"',$_POST['msg']);
		$result = shell_exec('curl http://twitter.com/statuses/update.'.$type.' -u '.$login.':'.$pass.' -d status="'.$msg.'"');
		
		echo "<pre>";
		if ($type == 'json')
			echo var_dump(json_decode($result));
		else
			echo var_dump(htmlentities($result));
		echo "</pre><br /><hr />";
	}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<title>Twittos</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta name="description" content="" />
<meta name="keywords" content="" />
</head>
<body>
	<form action='?' method='POST'>
	<table style='width: 500px; margin: 0 auto'>
		<tr>
			<td>Login Twitter:</td>
			<td><input type='text' name='login' /></td>
		</tr>
		<tr>
			<td>Pass Twitter:</td>
			<td><input type='password' name='pass' /></td>
		</tr>
		<tr>
			<td>Format du message de retour:</td>
			<td>
				<select name='type'>
					<option value='xml'>XML</option>
					<option value='json'>JSON</option>
				</select>
			</td>
		</tr>
		<tr>
			<td>Message Twitter:</td>
			<td><input type='text' name='msg' maxlength='140' width='40' value='Vive la @lafermeduweb !' /></td>
		</tr>
		<tr>
			<td align='center'><input type='submit' value='Poster !' /></td>
		</tr>
	</table>
	</form>
</body>
</html>

Mettez ce code dans un fichier PHP et uploadez le sur votre serveur puis testez ! (Cliquez sur "view plain" pour récupérer le code propre)

Suivez la ferme du web sur Twitter !

La semaine prochaine, nous commencerons à créer notre propre client web twitter.

Si vous avez des idées de service, ou de client originaux, n"hésitez pas à poster un commentaire, le nom du service sera twittos.

Commentaire intelligent ! Prix com' intelligentBaraguiné par Xeon le 20/03/09 à 12h20
Xeon sur La Ferme du Web
Ah oui t'es comme ça toi, pour faire du cURL t'utilise shell_exec ? ^^
Risqué je trouve, pourquoi ne pas utiliser les fonctions php disponible via la librairie cURL ? Une limitation quelconque ?

Cordialement,
Xeon :)
Baraguiné par DJo le 20/03/09 à 12h57
DJo sur La Ferme du Web
Oui, c'est un peu bourrin je te l'accorde, surtout qu'il faut avoir accès à la commande shell_exec sur son serveur, ce qui n'est pas le cas des mutualisés !
Donc c'est effectivement mieux d'utiliser les fonctions cURL PHP comme curl_exec(); (après init, set des variables etc :P).

En fait là c'était juste pour le test, j'optimiserais bien pour la suite. Il n'y'a aucune sécu ni rien pour le moment non plus.

Merci pour ta remarque.
Baraguiné par Xeon le 23/03/09 à 09h51
Xeon sur La Ferme du Web
D'accord, oui c'est sur que sur du mutualisé faut pas rêver pour avoir shell_exec ... dommage !
Mais même sur dédier, je pense qu'il faut limiter le plus possible l'utilisation de se genre de commande voir même la désactiver par stricte sécurité.

Mais je comprend que c'était juste pour l'explication, le plus important est la commande, pas la façon dont tu l'appelles.

Faudrait que je fasse un tour sur twitter un de ces quatre ...
Bonne journée :)
Baraguiné par sea_67 le 10/04/10 à 14h39
sea_67 via Twitter
Twitter c'est super !!!
Baraguiné par test67500 le 03/06/10 à 10h50
test67500 via Twitter
super, exactement ce que je cherchais, mais je cherche aussi la même chose pour facebook et/ou wordpress, connaissez vous un tuto pour ? merci
Baraguiné par japacademy le 12/08/10 à 04h10
japacademy via Twitter
Hello,
Merci pour ce petit tuto bien sympathique.

Comme Xeon, je trouve également que l'exécution de la commande avec un "shell_exec" n'est pas super adapté (mon serveur mutualisé vient de me le confirmer ! :-) )

En tout cas, merci ! Tuto simple et précis !

Ajouter un Commentaire

Pour poster un commentaire, vous devez être identifié. Vous pouvez choisir parmi ces trois méthodes d'identification:

Compte la Ferme du Web

Identifiez-vous
Inscrivez-vous

Compte Facebook

Compte Twitter

Connexion avec votre compte twitter
Rechercher sur la Ferme du web