Saludos a todos, espero se encuentren muy bien. Recientemente he desarrollado un Bot de Twitter usando su API que me ayude a experimentar diferentes estrategias de SEO y Marketing Digital. Este Bot Tuitero se encargan de analizar y publicar de forma automática en esta red social en busca de aumentar seguidores o ganar influencia. Si bien es cierto que es posible dotar de cierta inteligencia o comportamiento «inteligente» a un bot, no es el caso del ejemplo que les traigo hoy, hoy quiero mostrarle un bot fácil de hacer y como fue mi experiencia integrando el API de Twitter con PHP.
Es importante destacar que usaremos la versión 1.1 de la API de Twitter, la cual requiere usar autenticación OAUTH para comunicarnos con nuestra aplicación. Entre los pasos que seguiremos para este ejemplo de integración del API de Twitter en PHP están:
- Crear una cuenta de desarrollador y una nueva aplicación.
- Crear los tokens de acceso (PUBLIC API KEY Y PRIVATE API KEY).
- Desarrollar el metodo obtenerTweets() desde PHP al API de Twitter y obtener un JSON de los tweets filtrados.
- Desarrollar la función de enviarTweet() para enviar un tweet desde PHP
- Desarrollar la función de hacerRT() para hacer retweet desde PHP
- Desarrollar la función de hacerFAVTweet() para marcar como favorito un tweet desde PHP.
Creando una nueva API en Twitter
Para crear una cuenta de desarrollador en Twitter tenemos que dirigirnos a la sección Developer , luego nos autenticamos con nuestro usuario y contraseña en la sección de Apps.
Y luego seleccionamos «Create an app». Se nos desplegara una lista de posibles razones por las cuales queremos acceder al API de Twitter, esto porque el acceso al API trae un nivel de automatización «peligrosa» para Twitter, ya que un abuso en este tipo de herramienta puede provocar un experiencia de usuario negativa en conversaciones e interacción en general. Es decir bot hablando con bot y los humanos solo mirando.
He seleccionado la opción de Hobbie y Making a Bot, para los fines que lo quiero crear es eso, un pasatiempo, fijense que la cuenta que me asigna Twitter es la de «Individual developer account» la cual está dirigida a lo siguiente:
- Estudiantes (Students)
- Investigadores independientes (Individual researchers)
- Hobie (Hobbyists)
- Creadores de bot (Bot creators)
- Hacedores o creadores ¿Supongo? (Makers)
Luego de completar la información que solicita Twitter Developer, para conocer el uso que le darás al API de Twitter, tu solicitud queda en estado de revisión hasta que sea aprobada o denegada por Twitter.
Aquí puedes mirar este vídeo de como hacer el proceso de creación de una apps del API de Twitter desde Twitter Developer.
Usando el API de Twitter con PHP
Existen varias librerías en PHP para el uso del API de Twitter, yo uso TwitterAPIExchange y me ha ido muy bien. Tiene una implementación sencilla y bastantes ejemplos e hilos en StackOverflow, lo cual es muy importante.
Un ejemplo sencillo, crearemos la clase class.Twitter.php y en su constructor crearemos el atributo settings quedando de la siguiente manera.
function __construct() { $this->settings = array( 'oauth_access_token' => '27z80514284-cpO3a2R9Ta8ZkfffplFEYik8w7i2jTJw123bnVipjkf6Z', 'oauth_access_token_secret' => 'azc91fffA1yYXA4fru9jT6RgoI4gTg0O312y6iD17Lf4IfzwH03C', 'consumer_key' => '1zRrpOlHQtX8hfffC927VJe2212fAAnC', 'consumer_secret' => 'zTYliSpcBffffTnktDxlWt5kcaA6k8Ov8McN16U2oNxc8CdKcG41231IkuU0N'); }
Las API KEY PUBLIC y PRIVATE son proporcionadas al momento de crear la aplicación dentro de Twitter Developer, se debe ser muy cuidadoso con estos datos, ya que si caen en manos de terceros podrán usar nuestra aplicación y correr el riesgo que se cometan actividades prohibidas que luego conlleven a la suspensión de la aplicación, en este caso nuestro Bot Tuitero.
Otra cosa importante a considerar es las restricciones del API de Twitter, por ejemplo la cantidad de consultas o búsquedas por minuto, todo dependera si usamos la licencia developer enterprise o la limitada para uso académico o hobbies.
Crearemos el método obtenerTweets() para listar los tweets de interés dado unos parámetros como por ejemplo hashtags específicos.
public function obtenerTweet(){ $this->set_requestMethod("GET"); $this->set_urlApiTwitter("https://api.twitter.com/1.1/search/tweets.json"); $this->set_getField('?q=#SoftwareLibre+OR+#Tecnologia+OR+#OpenSource&count=10&lang=es&result_type=recent'); $twitter = new TwitterAPIExchange($this->settings); $data = $twitter->request($this->urlApiTwitter, $this->requestMethod, $this->getfield); $data = json_decode($data, true); return $data['statuses']; }
Si queremos enviar un tweet usando el API creamos el método enviarTweet()
/** * Funcion para enviar mensajes de Twiter * */ public function enviarTweet($mensaje){ $this->set_requestMethod("POST"); $this->set_urlApiTwitter("https://api.twitter.com/1.1/statuses/update.json"); $postfields = array( 'status' => $mensaje ); $this->set_postFields($postfields); $twitter = new TwitterAPIExchange($this->settings); $data = $twitter->request($this->urlApiTwitter, $this->requestMethod, $this->postfields); $data = @json_decode($data, true); return $data; }
Para hacer Retweet usamos el método hacerRT()
/** * Funcion para hacer RT mensajes de Twiter * */ public function hacerRT($id_tweet){ $this->set_requestMethod("POST"); $this->set_urlApiTwitter("https://api.twitter.com/1.1/statuses/retweet/$id_tweet.json"); $postfields = array(); $wp = array(CURLOPT_SSL_VERIFYPEER => false); $this->set_postFields($postfields); $twitter = new TwitterAPIExchange($this->settings); $data = $twitter->setPostfields($this->postfields)->buildOauth($this->urlApiTwitter, $this->requestMethod)->performRequest(true,$wp) ; $data = @json_decode($data, true); return $data; }
Entre otras funciones que podemos hacer esta marcar un tweet como favorito usando el API de Twitter, para ello creamos el método hacerFAVTweet()
/** * Función para hacer favoritos un mensajes de Twiter * */ public function hacerFAVTweet($id_tweet){ $this->set_requestMethod("POST"); $this->set_urlApiTwitter("https://api.twitter.com/1.1/favorites/create.json"); $postfields = array( 'id' => $id_tweet); $wp = array(CURLOPT_SSL_VERIFYPEER => false); $this->set_postFields($postfields); $twitter = new TwitterAPIExchange($this->settings); $data = $twitter->setPostfields($this->postfields)->buildOauth($this->urlApiTwitter, $this->requestMethod)->performRequest(true,$wp) ; $data = @json_decode($data, true); return $data; }
Mostrar los resultados en pantalla puedes hacerlo de la siguiente manera
$t = new Twitter(); $tweets = $t->obtenerTweets(); foreach($tweets as $tweet){ echo " - ".$name = $tweet['user']['name']; echo " - ".$screen_name = $tweet['user']['screen_name']; echo " - ".$user_id = $tweet['user']['id']; echo " - ".$id_str_user = $tweet['user']['id_str']; echo " - ".$image = $tweet['user']['profile_image_url']; echo " - ".$location = $tweet['user']['location']; echo " - ".$followers_count = $tweet['user']['followers_count']; echo " - ".$retweet_count = $tweet['retweet_count']; echo " - ".$favorite_count = $tweet['favorite_count']; echo " - ".$description = $tweet['user']['description']; echo " - ".$text = $tweet['text']; echo " - ".$idTweet = $tweet['id_str']; echo " - ".$created_at = $tweet['created_at']; }
De esta manera terminamos esta prueba, hemos construido el Bot Tuitero integrando el API de Twitter con PHP, espero que te sea de utilidad esta información y puedas desarrollar nuevos proyectos. Si deseas conocer más sobre otros proyectos que estoy haciendo, da una mirada «Empieza por aquí«
Excelente aporte hermano, te felicito. No había visto tu sitio web hasta ayer. Una sugerencia, cuando puedas, comparte qué tal fue el desempeño antes y después del bot. Serí interesante que colocaras un vídeo en el que concluyes el aporte que estas haciendo. Sigue aportando. Bendiciones
Si eso esta entre las tareas 2020, compartir los resultados de los proyectos que he ido implementado, no solo desde el punto de vista técnico sino comercial.
A veces a los técnicos se nos olvida los modelos de negocio y como monetizar las ideas. tarea pendiente para seguir perfeccionando en este mundo del emprendimiento.