Enviar tweets automáticamente en PHP con la API OAuth de Twitter y un Cron job

Desde hace aproximadamente un mes que vengo usando la API OAuth de Twitter https://dev.twitter.com/docs/api/1.1. Para cualquier técnico o programador que tenga unos conocimientos básicos de OOP, programación orientada a objetos, podrá usar la API sin problema, es super sencillo.

A continuación explicaré todos los pasos que hay que llevar a cabo.

Crear tu aplicación en Twitter

En primer lugar lo que tendrás que hacer es crear una aplicación en Twitter. Ve al siguiente link https://dev.twitter.com/apps/new, entra con tu cuenta de Twitter.

Sigue los pasos que te indican para crear tu aplicación.

  • Introduce el nombre que deseas darle a tu aplicación. Después podrás editar y escoger otro nombre si el que has puesto no te gusta.
  • Una breve descripción, siempre puedes poner algo como “Mi super aplicación” y luego lo podrás cambiar.
  • Introduce la url de tu página.
  • La url de Callback es opcional, y la podrás completar más tarde. A parte para este ejemplo no será necesario
  • Acepta las condiciones legales y completa el captcha.

Después ya tendréis vuestra aplicación creada.

Permisos de la aplicación

Debes dar permisos de “Read and write” a tu aplicación para que puedas enviar tweets automáticos como propongo en este artículo.

Ir al menú “Settings” dentro de tu aplicación y en la sección “Application Type”, selecciona la 2ª opción “Read and Write”.

El código PHP y uso de la API OAuth

A continuación indico el código PHP que será necesario.

<?php

$consumerKey    = 'Consumer-Key';
$consumerSecret = 'Consumer-Secret';
$oAuthToken     = 'OAuthToken';
$oAuthSecret    = 'OAuth Secret';

// incluimos la librería para usar la API OAuth
require_once('twitteroauth.php');

$tweet = new TwitterOAuth($consumerKey, $consumerSecret, $oAuthToken, $oAuthSecret);

# aqui tu lógica para recoger el contenido del tweet, ya sea de tu bbdd, feed, rss o fichero

$tweet->post('statuses/update', array('status' => 'Aqui contenido de tu tweet, tambien puedes enviar urls o hashtags'));
?>

Como se puede observar es algo super simple, en la que se instancia el objeto TwitterOAuth y llamamos a un método “post” con una serie de atributos.
Para ver el listado completo de métodos y usos de la API, ir a la documentación oficial https://dev.twitter.com/docs/api/1.1.

Como indico, esto sólo es un ejemplo, al cual se le puede dar muchos usos. Puedes enviar tweets automáticamente, comprobar quien te ha dejado de seguir, seguir, dejar de seguir, crear listas, etc… la versatilidad de este ejemplo se puede adaptar a los conocimientos de cada uno o funcionalidades que se desee, siempre y cuando se pueda hacer con la API.

La peculiaridad de este ejemplo, es que al constructor del objeto pasamos como 3º y 4º parámetro los tokens de acceso manualmente, por defecto en muchas aplicaciones hay que loguearse en twitter y se genera un token que los almacenamos en sessión.
Pues bien, si esta aplicación sólo la vamos a usar nosotros, podemos incluir los token de acceso de que podemos conseguir en nuestra aplicación que hemos creado anteriormente.
Haciendo esta técnica es como conseguimos no tener que loguearnos en twitter y poder meter este archivo en un cron para que se ejecute desde un sevidor sin la necesidad de una administración manual de twitter, o por lo menos quitar parte de la carga de trabajo que conlleva administrar esta red social.

Configurar el cronjob o cron tab

Los usuarios con conocimientos de sysadmin, podrán acceder por consola y configurar el cronjob. Los usuarios que no tengan conocimientos de administración de sistemas o no se sientan valientes para entrar en la máquina, es posible que su servidor tenga algún panel de control donde configurar los crons desde algún interface web.

Una vez logueado con tu usuario en el sistema, ejecuta el siguiente comando

# crontab -e 

Y una vez que estés dentro del editor de texto introduce tu sentencia para ejecutar el archivo php. En este ejemplo voy a indicar para ejecutar el envío automáticos a Twitter cada 2 horas.

0 */2 * * * php /path/absoluto/archivo/auto-tweet/index.php

Otra idea: Puedes hacer que el cron se ejecute cada hora, y dentro del php hacer una administración mas compleja de las horas a las que se tiene que publicar.

Mi secreto: Voy a compartir mi secreto con todos, que no es más que enviar los tweets por email a bufferapp.com, y dentro de este servicio tengo configurado un horario muy concreto de cuando publicar mis tweets.

Conclusión

Con el “bot” que propongo, podemos mandar al comunity manager al carajo!! jeje… Es broma!! Administrar bien una red social es algo que lleva un cierto trabajo, depende de todo lo que queramos explotarla, y un programa como el que estoy proponiendo sólo va a hacer parte de ese trabajo, el factor humano es fundamental, por lo menos para contestar a los reply 😉

Ver y Descargar desarrollo en GitHub

https://github.com/elpeter/pv-auto-tweets

54 opiniones en “Enviar tweets automáticamente en PHP con la API OAuth de Twitter y un Cron job”

  1. Hola Pedro, mi consulta es la siguiente, te explico: el cuerpo de bomberos de Perú ha creado una cuenta de twitter para publicar todas las emergencias que se producen. Esas emergencias se publican de forma automatica en la pagina web. Por lo que la cuenta de twitter que te menciono deberia leer desde esa pagina y publicar los tweets de forma automatica. Qué necesito y como lo hago? Oauth sirve para eso?
    Gracias

    1. Buenas,

      Lo mejor es que utilices un sistema de automatización tipo: https://ifttt.com/ y conectes el feed o RSS de publicación con la cuenta de twitter. Lo podrás hacer de manera muy sencilla a través del interfaz de la herramienta sin tener que meterte en código.

      Saludos!

  2. Tengo una duda, como hago para no repetir el tweet? Por ejemplo si yo busco con un criterio específico (un hashtag por ejemplo) el cron job volverá a buscar y me va a traer el mismo resultado o sea que le enviaré otro tweet automáticamente?

  3. Estimados, aquí se explica como publicar twitter con php y la API. Pero, como se podrá publicar un twitter con una imagen, también via php.

  4. Hola Pedro,
    lo primero, muchas gracias por la info!! aunque debo estar olvidando algo porque me publica el tweet y tampoco me da ningun error.

    -he puesto el read and write en mi app
    -tokens
    -la modificación de api.twitter.com/1.1/ en twitteroauth.php

    y despues de todo esto no me publica nada en twitter!!!
    lo de cronjob no es necesario verdad???

    Muchas gracias y un saludo!!!!!

    1. ya habían publicado la solución, es la siguiente

      En la linea 21 del twitteroauth.php tenia

      public $host = “https://api.twitter.com/1/”;

      y la correcta es:

      public $host = “https://api.twitter.com/1.1/”;

  5. Estimados buendia,
    tengo un software a la venta que lo estan utilizando varias personas (software libre es decir, lo compran y pueden distribuirlo) Utiliza necesariamente php+mysql+api rest+cronjob
    Este realiza pagos de seguidores mediante Retweets, Recomendaciones y Promociones, utilizando las cuentas grandres de twitter, y fakes (todas propias de cada usuario).
    Cualquier consulta o inquietudes a german.quisbert@gmail.com directamente
    Un abrazo

  6. Aupa Pedro!

    Como podrás comprobar en tus analytics, he llegado a este post desde unos 5 o 6 sitios diferentes, con lo que concluyo que algo estoy haciendo mal porque se ve que mucha gente lo ha conseguido siguiendo tu tutorial sobre esto.

    Estoy siguiendo, tengo los tokens y los archivos, y he subido a mi servidor los archivos oauth, twitteroauth e index.php.

    Al llamar directamente desde el navegador a la página no devuelve nada, y en twitter no se publica nada.

    No se donde tengo el fallo. Como a alguno que te ha comentado, también en mi twitteroauth.php, en mi caso en la linea 17, se hacia referencia a la v1, no a la 1.1. Cambiado esto y vuelto a subir al servidor, vuelvo a llamar a index con el mismo resultado.

    En detalles de la app tengo puesto que no se loggee.
    En Request uri, he probado poniendo la dirección en mi servidor del index, y dejarlo tal como está, añadirle el parametro tweet, y en request query he probado poniendo tweet, no poniendo nada…

    Alguna idea? Me resulta muy interesante y me gustaría poder conseguir esto.
    Gracias de antemano por el manual, y por lo que veo, por hacer buen feedback con la gente. Un saludo. David.

  7. Saludos, felicitaciones por este post, la verdad me ha interesado mucho y tengo una consulta haber si me puedes ayudar, tengo una estacion de radio online, en el reproductor se muestra el titulo de la cancion y el artista, hace poco implemente igual en la pagina unos botones que permite compartir esa informacion en twitter y facebook.. ahora todo esto lo hago con un fichero streaming.php, mi inquietud en el fichero index.php y en especial la linea $tweet->post(‘statuses/update’, array(‘status’ => ‘Aqui contenido de tu tweet, tambien puedes enviar urls o hashtags’)); como le llamaria a mi archivo?? gracias tu contestacion.

  8. He seguido los pasos, pero no publica.

    MI duda es, y disculpen la ignorancia… de donde saca mi usuario de tw?

    Esto publicaría en nombre mio? o de quien?

    Es necesario estar logueado? O se puede hacer via cron desde cPanel?

    desde ya muchas gracias por este aporte y por la orientación que me puedan brindar.

    Silvio de Córdoba

    1. Hola Silvio,

      Seguro que has seguido todos los pasos? Tienes los 4 tokens que se piden en el ejemplo? Los tienes que sacar de la aplicación.

      El usuario se saca de los últimos 2 tokens: $oAuthToken y $oAuthSecret, que sustituye las credenciales del usuario y no se tiene que hacer login.

      Una vez que lo tengas bien configurado, no tienes porque estar logueado y lo puedes meter en un cron.

  9. Hola Pedro vuelvo a tu articulo luego de seis meses, fijate que desde finales de julio para aca dejo de publicar tweets, sabes algo al respecto, no es cron ni mi server porque ya probe otros archivos en cron y se ejecutaron bien, sabes si twitter hizo algún cambio en su api??

    Al parecer este método ya no va, investiga al respecto a ver si a alguien le sigue funcionando…

    Saludos.

      1. Ya funciona.En la linea 21 del twitteroauth.php tenia

        public $host = “https://api.twitter.com/1/”;

        y la correcta es:

        public $host = “https://api.twitter.com/1.1/”;

  10. tienes algun ejemplo de como saber si un usuario es seguidor tuyo?. usaba este codigo que funcionaba perfectamente ¡hasta que cambio a V1.1.:
    .
    <?php
    session_start();
    $existe= "n";
    $seguidor="";

    //$trends_url = "http://api.twitter.com/1/statuses/followers/Maheso_news.json&quot;;
    $trends_url = "https://api.twitter.com/1.1/followers/ids.json?cursor=-1&screen_name=Maheso_news&count=5000&quot;;
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $trends_url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $curlout = curl_exec($ch);
    curl_close($ch);
    $response = json_decode($curlout, true);
    foreach($response as $friends){
    $thumb = $friends['profile_image_url'];
    $url = $friends['screen_name'];
    $name = $friends['name'];

    //print "” . $url. “”;
    print “”;

    if ($_POST[‘idtwitter’] == $url) { $seguidor=”s”; }

    }

    if ($seguidor==”s”) {
    echo “$_POST[idtwitter] > SI EXISTE”;
    } else { echo “NO existe > $_POST[idtwitter]”; }
    unset($_POST[‘idtwitter’]);

    ?>

  11. Saludos Pedro, como puedo hacer para tweetear un mensaje desde varias cuentas, tengo una corporacion y usamos mucho el tweets y para minimizar gastos quiero un software donde me permita enviar un mensaje desde varias cuentas agregandolas en el…

  12. Hola Pedro, muy bueno tu articulo. Estoy buscando la forma de saber si es posible con la API 1.1 de Twitter obtener con exactitud si solo un usuario es seguidor mio o no lo es. Tienes por ahí alguna idea? esto sin tener que estar revisando las listas de followers cada vez? Gracias.

  13. Voy a probarlo hoy mismo.
    Probé algo similar de forma semi-manual y tuve una cuenta sancionada 30 días por exceso de tweets, supongo. En facebook me ocurrió algo similar.
    Pero veo muy interesante este método.
    Gracias por el aporte.
    Ya os comento los resultados.

  14. Hola. Estoy utilizando javascript con json para recuperar determinados twits pero la con la nueva libreria esto me quedo obsoleto.
    $.getJSON( “https://api.twitter.com/1.1/search/tweets.json?q=%23” + HashTag + “&since_id=” + auxi + “&callback=?&rpp=” + cTwett, {}, function (json)

    ¿Como deberia utilizar la nueva librería?

  15. Hola, he llegado aquí pero no se si es lo que estoy buscando.
    Estoy buscando la manera de que desde mi web, un usuario pueda escribir un tweet en su propio twiter. Por ejemplo que le de a un botón, se autentifique en twitter con su usuario y todo lo que escriba en mi web se retweete a su twitter.
    Con este tutorial creo que solo se consigue que escriban en el twitter de la aplicación no?
    Es posible lo que propongo?.
    Un saludo.

    1. Hola Alejandro,

      El ejemplo de este artículo es muy simple pero es la base para automatizar procesos con la api de twitter.
      Efectivamente lo que propones se puede hacer, y cosas mucho más complejas. Prueba a usar este código https://github.com/dg/twitter-php tiene una breve documentación pero explican como enviar un tweet.

      Un saludo!

  16. Hola Pedro. Gracias por el aporte. Tras descargar el código y realizar los pasos adecuados el index aparece en blanco y sin ningún request. Es válido todavía el código? Gracias de antemano. Un saludo

    1. si como digo en mi artículo la lógica está vacía, ya que lo importante es el ejemplo de como usar los token y la llamada para establecer la conexión mediante la API de twitter el resto es para que cada uno lo use a su manera.
      De todas maneras, pronto escribiré un artículo con un ejemplo para realizar retweets automáticos que te podrá resultar interesante.

      1. me quedare pendiente de tu publicacion, y vere que puedo hacer..mas que nada para uso personal, ya que todos los servicios que hacian esto cerraron 🙁

  17. Hola

    yo usaba twiteercontentsharer pero la web cerro.

    http://www.tweetcontentsharer.com/es/ 🙁

    era buenisimo.

    agregaba un texto y un enlace y listo.

    me permitia enviar hasta 50 twiteets en modo free y por dia. en modo armndom.

    asi podia tener un post del año 2012 pero todavia valido y me aseguraba q todos los dias se twiteaba en la cuenta de mi blog.

    🙁 m quiero morir ya no hago mas tweets.

    seria buenisimo que crearas una web con un servicio asi. ellos cobraban a partir de mas de 50 tweets.

    quedo pendiente de tu accionar, ojala escuches mi clamor, ademas te puedo hacer muuy buena promocion.

  18. Yo tengo la misma duda que pepe, si gestionas varias cuentas como puedes hacer esas operaciones utilizando oAuth? los usuarios tienen que aceptar la aplicación pero los tokens… de donde se cogen?

    Gran ejemplo, gracias.

    1. Hola,

      Si es buena pregunta. Es algo que todavía no se, lo estoy investigando porque lo necesito hacer en un proyecto personal.

      En cuanto tenga una solución la colgaré.

      De lo contrario, si tu encuentras algo antes, por favor también coméntalo, vale?

      Un saludo!

  19. Hola, con este método entiendo que puedo enviar un tweet desde una cuenta relacionada a la aplicación, pero ¿Como podría hacerle para enviar tweets desde varias cuentas? (todas controladas por mi, o con permiso del usuario) ¿me podrías poner en el camino correcto? No encuentro info :(, desde ya muchísimas gracias amigo. Saludos.

  20. Buen tutorial amigo,
    Una consulta,
    Estuve probando el plugin de Abraham para el OAuth, y me pide el login de twitter, entonces lo que tú enseñas acá me sirve, porque ya le doy el token en el php y no es necesario el login.
    Monté los archivos (index.php + twitteroauth.php + oauth.php) en un servidor, pero al abrir la página, obviamente no me sale nada, pero tampoco me envía el tweet.

    Sabes cuales pueden ser las posibles causas?
    Un abrazo.

    Saludos desde Chile

  21. como obtengo los token de otros usuarios… al llenar esos datos con los que tengo en mi app los comentarios solo aparecen en mi perfil no en el de otro… como podria hacer ahi?

    1. Hola Jaime,

      En github tienes todo el desarrollo https://github.com/elpeter/pv-auto-tweets.
      Lo del auto-tweet.php es algo que no he puesto muy claro, en realidad el código sería index.php, pero bueno esto tampoco es algo muy grave.

      Tendrías que descargar todo el código de github, y adaptar el desarrollo a tus necesidades. Después configurar un cronjob, no se si tienes conocimientos de linux para hacer esta tarea.

      Ya me sigues contando si tienes dudas.

      Un saludo!

Deja un comentario

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