Crear un bot sencillo para twitter


Este post es más que nada un apunte personal, por si algún día necesito recuperarlo, pero lo dejo a disposición de la gente por si a alguien le interesa. Lo que veremos es el código mínimo necesario para crear un bot que actualice el status de una cuenta de twitter a partir de una fuente sencilla en PHP.

El código mostrado es el usado para actualizar el usuario de twitter @tiempo_bcn. Una cuenta que simplemente va mostrando cada cierto tiempo el tiempo actual en la ciudad de Barcelona. Para realizarlo usamos la Google Weather Api y como no, la Api de twitter.

De esta forma, cada vez que se lanza el script se crea un nuevo tweet con el clima actual en Barcelona para @tiempo_bcn… Muestro el código de forma lineal, sin funciones ni clases para que se entienda más facilmente, pero esta claro que para hacer un bot más completo sería bueno usar alguna clase PHP creada para la api de twitter (o crear una propia) y organizar el código de forma un poco más seria.

weather->current_conditions;
$status = "#tiempo en #Barcelona : " . $current_conditions->temp_c["data"] . "º, " . $current_conditions->condition["data"] . ". " .$current_conditions->wind_condition["data"];

// Variables de configuracion de la cuenta de twitter
$twitterUsername  = 'tiempo_bcn';
$twitterPassword  = '1234567890';
$twitterUserAgent = 'API';
$twitterRequestUrl = 'http://twitter.com/statuses/update.xml';
$twitterPost = 'status='.urlencode($status);

// iniciamos curl
$c = curl_init($twitterRequestUrl);

// configuramos la llamada
curl_setopt($c, CURLOPT_POST, true);
curl_setopt($c, CURLOPT_POSTFIELDS, $twitterPost );
curl_setopt($c, CURLOPT_USERPWD, $twitterUsername . ':'. $twitterPassword);
curl_setopt($c, CURLOPT_VERBOSE, 1);
curl_setopt($c, CURLOPT_NOBODY, 0);
curl_setopt($c, CURLOPT_HEADER, 0);
curl_setopt($c, CURLOPT_USERAGENT, $twitterUserAgent );
curl_setopt($c, CURLOPT_FOLLOWLOCATION,1);
curl_setopt($c, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($c, CURLOPT_HTTPHEADER, array('X-Twitter-Client: ', 'X-Twitter-Client-Version: ', 'X-Twitter-Client-URL: '));


// lanzamos la llamada y sacamos los datos
$response = curl_exec($c);
$curlInfo = curl_getinfo($c);
if(intval($curlInfo['http_code'])==200)
{
   $response = new SimpleXMLElement($response);
}

// cerramos curl
curl_close($c);

19 respuestas a “Crear un bot sencillo para twitter”

  1. Googleando para hacer un bot para twitter, resulta que voy a encontrarlo en el blog de Iñaki :), gracias compañero!
    Me viene de perlas el codigo, y además con doble alegría porque sea tu post el que me de la solución, gracias gatuno!

  2. Pedro, es que siempre tendrías que buscar en google primero con «site:blog.ikhuerta.com » delante de la búsqueda… todo lo encontrarías antes! 😉

  3. Lo he probado y va genial, un aplauso, solo me queda una duda (soy aficionado, por lo que esto me viene algo grande).
    Solamente publica el estado del tiempo (en mi caso de León) cuando pongo la url en el navegador y entro.
    ¿Que debería de hacer para que ese script se ejecute solo?
    No pretendo parecer un hoigan de esos, es que no encuentro toda la información y para un aficionado, fragmentos de código no es suficiente información, y es lo único que encuentro por google.

  4. Para que vaya haciendo este tipo de tareas solo, debes poder configurar tareas programadas (‘cron’ se llaman en linux) que ejecuten ese script cada vierto tiempo por ti.

    Si surfeas por Google buscando sobre cron encontrarás facilmente como configurarlos. Si no puedes (porque tu hosting no te lo permite) tendrás que conseguir alguna forma para emularlos. Una tarea programada desde tu equipo o algo similar.

  5. Muy interesante! tenía una ligera idea de como funcionaba un bot y ahora me ha quedado mucho más claro.

    Para los perezosos está la web de Botize.com que no hay que programar, pero siempre se pueden hacer cosas mucho más flexibles y personalizadas cuando eres programador.

  6. Voy iniciando en el mundo del twitter y con los bots, googleando me tope con tu web que me ayuda a comprender en parte como trabajan los bots.

    Aparte de que buscaba este bot del clima para mi ciudad, ya que estoy implementando una pequeña web de ella, QUITO.

    Si me puedes ayudar a ingresar este código en mi API para que funcione como tu cuenta @tiempo_bcn.

    Gracias por la ayuda.

  7. Buenas,

    Esto no se integra en una api, es un codigo PHP que debes copiar en tu servidor web con PHP para que haga las solicitudes a la API de twitter.

  8. Muchas gracias por este post, muy bueno y muy completo. Lo encontré tarde para lo que estaba haciendo, porque ya tengo un código armado.
    Lo único que me falta es saber como configurar, creo que mediante Cron, para que el código que hice se ejecute automáticamente cada X tiempo.

  9. Hola!, la verdad está muy interesante, me gustaría empezar a hacer este ejercicio, pero tengo varias dudas.. por ejemplo: ¿Dónde debo poner el archivo? ¿Puedo hacerlo en mi hosting? ¿Cómo hago para que se ejecute?

    De veras, me gustaría poder aprender de esto..

    Ahh! Me gustaría tener un enlace de tu blog en el mío 😀

  10. @creamha
    – El archivo debes ponerlo en un hosting
    – Si tu hosting dispone de PhP, entonces puedes ponerlo allí.
    – Para ejecutarlo debes entrar en el script utilizando por ejemplo un navegador. Si lo que quieres es que se ejecute automáticamente y en tu hosting no dispones de acceso a un cron o programa similar no puedes automatizar la ejecución en el servidor.

    Sin embargo si usas linux como sistema operativo en casa, puedes poner en tu propio cron de sistema que haga wget del script y así estarás haciendo lo mismo que si abres un navegador y entras tu. Lo único malo es que tendrás que tener tu ordenador encendido.

    Un saludo y gran aporte Iñaki.

  11. Iñaki una pregunta….. Podrías sincronizarte a varias webs y programar esos tweets de forma automática pero incluyendo hashtags??

  12. Por casualidad no existe un tutorial de como hacer un bots para cuando yo reciba un DM este se publique en mi TL? Gracias

Responder a American Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *