skip to main | skip to sidebar
Code 18
Manuel du savoir-faire à l'usage des geeks et des curieux
RSS
  • Accueil
  • Le web au Québec
  • Liens
  • Twitter
  • Facebook
  • À propos

samedi 28 mars 2009

Poster son statut Twitter avec PHP

Publié par Infinite Loop, à 10 h 32 4 commentaires

Pour moi, en dépit de la popularité du service de micro-blogging Twitter, c'est encore resté au stade de curiosité. Peut-être parce que j'ai le verbe facile et que j'ai de la difficulté à être contraint à 140 caractères! Non, sans blague, on est habitué à ce genre de fonctionnalité, que ce soit dans le statut MSN (Share a quick message), dans celui de Facebook ou dans les SMS (160 caractères), donc je comprends l'engouement des gens à vouloir résumer leur pensée en une courte phrase.

Alors que la demande est grandissante, les utilisateurs veulent pouvoir intégrer le contenu à partir d'une interface unique. Qu'en est-il si on veut faire en sorte de poster un message vers Twitter à partir de notre propre application ?

En utilisant cUrl (à supposer qu'il est installé), on sait qu'on peut appeler la commande par le shell pour s'authentifier et poster le statut:

curl http://twitter.com/statuses/update.xml -u username:password -d status="message"

Sachant cela, rien ne nous empêcherait de lancer la commande PHP shell_exec(), mais pour des raisons de sécurité, les administrateurs réseaux ne sont jamais très friand à débloquer ce type d'appel. Souvent, le mieux qu'ils puissent faire est d'autoriser l'exécution de certains programmes, en les spécifiants comme sudoers.

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

Donc il est préférable d'utiliser la librairie cUrl et d'instancier l'appel à l'API REST directement par PHP:

// url qui pointe vers l'action update, en xml ou json
$api_url = 'http://twitter.com/statuses/update.xml';

// l'information de votre compte
$username = 'usr';
$password = 'pwd';

// le message
$args = array( 'status' => 'Mon premier statut par curl');

// initialiser une session cUrl
$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $api_url);

curl_setopt($ch, CURLOPT_HEADER, True);
curl_setopt($ch, CURLOPT_NOBODY, False);

curl_setopt($ch, CURLOPT_POST, True);
curl_setopt($ch, CURLOPT_POSTFIELDS, $args);

// information de login
curl_setopt($ch, CURLOPT_USERPWD, $username.':'.$password );

// en secondes
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 2);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

// pour éviter l'erreur HTTP 417 - Expectation Failed
$headers = array('Expect:', 'X-Twitter-Client: ', 'X-Twitter-Client-Version: ', 'X-Twitter-Client-URL: ');
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);

// envoyer le message
$response = curl_exec($ch);
$info = curl_getinfo($ch);

curl_close($ch);
Une fois l'envoi terminé, on récupère l'information retournée dans une variable et on peut regarder le statut par le code HTTP reçu:
if( intval( $info['http_code'] ) == 200 )
echo 'Message envoyé';
else
echo 'Erreur HTTP ' . $info['http_code'];
Notez que si vous faites des tests et que vous avez du mal à vous authentifier, votre compte sera bloqué temporairement et provoquera une erreur 401. Vous devrez patienter un certain temps pour qu'il soit dévérrouillé.


Tags: PHP

4 réponses à "Poster son statut Twitter avec PHP"

  1. Unknown a dit...
    25 juin 2010 à 05 h 37

    Bonjour

    sympa ce script pour poster sur twitter. je cherche à faire la même chose pour facebook tu aurai des pistes?

    Infinite Loop a dit...
    25 juin 2010 à 13 h 16

    Malheureusement je n'ai jamais essayé de faire ça. Je jeterai un oeil pour voir comment ça fonctionne.

    Yann a dit...
    3 septembre 2010 à 08 h 31

    Bonjour,
    Cette méthode ne fonctionne plus depuis le 1er septembre 2010, car Twitter a désactivé l'authentification basique (ce que fait Curl).
    Il faut maintenant utiliser OAuth, Il y a un tuto ici pour expliquer une méthode :
    http://yanncochard.com/tuto/envoyer-un-tweet-en-php-avec-oauth-sur-twitter

    Infinite Loop a dit...
    3 septembre 2010 à 09 h 56

    Tu as raison, ça utilise maintenant l'authentification oAuth. As-tu essayé Zend_Service_Twitter ? Est-ce que je me trompe où depuis la version 1.10 du framework, le composant de Zend le supporte aussi ?

    J'ai vu ça dedans :

    require_once 'Zend/Oauth/Consumer.php';

    const OAUTH_BASE_URI = 'http://twitter.com/oauth';


Publier un commentaire

Message plus récent Messages plus anciens Accueil
S'abonner à : Publier des commentaires (Atom)
    Suivre @code18 sur Twitter

    Catégories

    • Apache (21)
    • Citations (167)
    • Club Vidéo (24)
    • Coffre à outils (56)
    • CSS (8)
    • Curiosités (117)
    • Design Pattern (2)
    • Drupal (8)
    • Easter Eggs (22)
    • Extensions Firefox (20)
    • GIMP (7)
    • Histoire (21)
    • HTML (32)
    • Humour (57)
    • Intégration (34)
    • iPod (12)
    • JavaScript (110)
    • Jeu de combat (6)
    • Le coin du geek (128)
    • Liens (12)
    • Linux (56)
    • Livres (78)
    • Lois et principes (46)
    • Marché des saveurs (26)
    • Mathématique (18)
    • Mobile (5)
    • Montréal (32)
    • Musique (112)
    • Pancartes et écriteaux (16)
    • Perl (8)
    • Pérou (1)
    • PHP (130)
    • PostgreSQL (44)
    • Programmation (105)
    • Saviez-vous que (55)
    • Sécurité (22)
    • SEO (5)
    • SQL Server (22)
    • Vieilles publicités (6)
    • Virtualisation (8)
    • Voyages (1)
    • Zend Framework (26)

    Divers

    Archives

    • ►  2015 (6)
      • ►  août 2015 (1)
      • ►  juillet 2015 (1)
      • ►  février 2015 (3)
      • ►  janvier 2015 (1)
    • ►  2014 (8)
      • ►  décembre 2014 (1)
      • ►  novembre 2014 (1)
      • ►  octobre 2014 (1)
      • ►  août 2014 (2)
      • ►  juillet 2014 (2)
      • ►  janvier 2014 (1)
    • ►  2013 (53)
      • ►  décembre 2013 (2)
      • ►  novembre 2013 (1)
      • ►  octobre 2013 (3)
      • ►  septembre 2013 (2)
      • ►  août 2013 (5)
      • ►  juillet 2013 (3)
      • ►  juin 2013 (5)
      • ►  mai 2013 (3)
      • ►  avril 2013 (7)
      • ►  mars 2013 (7)
      • ►  février 2013 (11)
      • ►  janvier 2013 (4)
    • ►  2012 (105)
      • ►  décembre 2012 (8)
      • ►  novembre 2012 (5)
      • ►  octobre 2012 (4)
      • ►  septembre 2012 (1)
      • ►  août 2012 (8)
      • ►  juillet 2012 (7)
      • ►  juin 2012 (7)
      • ►  mai 2012 (10)
      • ►  avril 2012 (13)
      • ►  mars 2012 (15)
      • ►  février 2012 (15)
      • ►  janvier 2012 (12)
    • ►  2011 (146)
      • ►  décembre 2011 (14)
      • ►  novembre 2011 (11)
      • ►  octobre 2011 (12)
      • ►  septembre 2011 (13)
      • ►  août 2011 (15)
      • ►  juillet 2011 (17)
      • ►  juin 2011 (18)
      • ►  mai 2011 (15)
      • ►  avril 2011 (9)
      • ►  mars 2011 (7)
      • ►  février 2011 (3)
      • ►  janvier 2011 (12)
    • ►  2010 (398)
      • ►  décembre 2010 (29)
      • ►  novembre 2010 (28)
      • ►  octobre 2010 (32)
      • ►  septembre 2010 (34)
      • ►  août 2010 (22)
      • ►  juillet 2010 (35)
      • ►  juin 2010 (42)
      • ►  mai 2010 (36)
      • ►  avril 2010 (37)
      • ►  mars 2010 (34)
      • ►  février 2010 (32)
      • ►  janvier 2010 (37)
    • ▼  2009 (430)
      • ►  décembre 2009 (32)
      • ►  novembre 2009 (34)
      • ►  octobre 2009 (33)
      • ►  septembre 2009 (37)
      • ►  août 2009 (37)
      • ►  juillet 2009 (39)
      • ►  juin 2009 (38)
      • ►  mai 2009 (37)
      • ►  avril 2009 (35)
      • ▼  mars 2009 (37)
        • Étui pour ordinateur portatif
        • Pagination des résultats sous SQL Server
        • Calendrier jQuery UI
        • Citation no. 23 sur l'ambidextrie
        • Poster son statut Twitter avec PHP
        • Informatique du film Jurassic Park
        • XML valide pour RSS
        • Gadgets électroniques et informatiques
        • Redéfinition de classe PHP
        • Origines du Hello World
        • Diaporama de photos en JavaScript, partie 2
        • Citation no. 22 sur la simplicité
        • Diaporama de photos en JavaScript, partie 1
        • Sortie officielle de Internet Explorer 8
        • Convertir l'encodage d'une page avec Dreamweaver
        • Comparaison de texte PostgreSQL
        • Lister les fichiers d'un répertoire en PHP
        • Pages 404 originales
        • Erreur curieuse en PHP : Paamayim Nekudotayim
        • Citation no. 21 sur les mots de passe
        • Manipuler une archive TAR compressée (gzip)
        • Une histoire de pixel brûlé
        • Il n'y a pas d'Easter Eggs dans ce programme
        • Adresse de courriel temporaire jetable
        • Bande dessinée sur la sécurité informatique
        • Populer un formulaire automatiquement
        • Interface countable en PHP
        • Conteneurs HTML à coins ronds
        • Citation no. 20 sur les consommateurs mécontents
        • Conférence PHP Québec 2009 - Jour 3
        • Manipuler une archive TAR
        • Conférence PHP Québec 2009 - Jour 2
        • Conférence PHP Québec 2009 - Jour 1
        • Analyser et configurer les paramètres GET et POST
        • Protéger son code PHP avec Zend Guard
        • Hébergement PHP gratuit
        • Citation no. 19 sur la consommation d'alcool
      • ►  février 2009 (32)
      • ►  janvier 2009 (39)
    • ►  2008 (84)
      • ►  décembre 2008 (34)
      • ►  novembre 2008 (39)
      • ►  octobre 2008 (11)

    Abonnés

Copyright © All Rights Reserved. Code 18 | Converted into Blogger Templates by Theme Craft