Ejemplo API Twitter enviar DM a nuevos seguidores

Me ha dado por soltar un poco los dedos programando durante este puente y he estado usando la API de Twitter desde PHP para automatizar algunas cosillas en mi cuenta de Twitter (por cierto si me sigues y ves que la he liado avisa para), me ha parecido que a mas de uno le vendría bien este ejemplo con la API de Twitter y PHP para enviar un DM personalizado a nuevos seguidores ya que no veo ninguna aplicación de Twitter gratuita que lo haga.

Uso básico de la API de Twitter

Existe muccha documentación en dev.twitter.com sobre esto así que seré muy breve en la explicación:

  1. Primero tienes que crear una cuenta de desarrollador en dev.twitter.com y después debes acceder a https://apps.twitter.com/
  2. En apps.twitter.com creas un nueva aplicación y debes conseguir estos datos:
    1. oauth_access_token
    2. oauth_access_token_secret
    3. consumer_key
    4. consumer_secret
  3. Una vez que tienes estos datos te hará falta la librería TwitterAPIExchange.php que te puedes descargar pulsando este mismo enlace.
  4. Por supuesto tendrás que saber programar para entender y usar el código que te paso más abajo.

Enviar DM a nuevos usuarios con API Twitter

Aquí os dejo el código completo que yo he usado y debajo dejo algunas explicaciones

  1. <?php
  2. require_once('TwitterAPIExchange.php');
  3. $settings = array(
  4.     'oauth_access_token' => "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  5.     'oauth_access_token_secret' => "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  6.     'consumer_key' => "xxxxxxxxxxxxxxxxxxxxxxxxxx",
  7.     'consumer_secret' => "xxxxxxxxxxxxxxxxxxxxxx"
  8.     );
  9.  
  10. function sacarNombre ($settings,$id)
  11. {
  12.     $url = "https://api.twitter.com/1.1/users/show.json";
  13.     $getfield = "?user_id=$id";
  14.     $requestMethod = 'GET';
  15.     $wp = array(CURLOPT_SSL_VERIFYPEER => false);
  16.     $twitter = new TwitterAPIExchange($settings);
  17.     $string = json_decode($twitter->setGetfield($getfield)
  18.         ->buildOauth($url, $requestMethod)
  19.         ->performRequest(true,$wp),$assoc = TRUE);
  20.     return($string['screen_name']);
  21. }
  22. function sacarID ($settings,$nombre)
  23. {
  24.     $url = "https://api.twitter.com/1.1/users/show.json";
  25.     $getfield = "?screen_name=$nombre";
  26.     $requestMethod = 'GET';
  27.     $wp = array(CURLOPT_SSL_VERIFYPEER => false);
  28.     $twitter = new TwitterAPIExchange($settings);
  29.     $string = json_decode($twitter->setGetfield($getfield)
  30.         ->buildOauth($url, $requestMethod)
  31.         ->performRequest(true,$wp),$assoc = TRUE);
  32.     return($string['id']);
  33. }
  34. function seg_hoy ($settings,$user)
  35.     {
  36.     $url = "https://api.twitter.com/1.1/followers/ids.json";
  37.     $getfield = '?cursor=-1&screen_name='.$user."&count=5000';
  38.     $requestMethod = 'GET';
  39.     $wp = array(CURLOPT_SSL_VERIFYPEER => false);
  40.     $twitter = new TwitterAPIExchange($settings);
  41.     $string = json_decode($twitter->setGetfield($getfield)
  42.         ->buildOauth($url, $requestMethod)
  43.         ->performRequest(true,$wp),$assoc = TRUE);
  44.    
  45.     foreach ($string['ids'] as $user)
  46.          $seguidores_hoy[]=$user;
  47.     return $seguidores_hoy;
  48.     }
  49.    
  50. function seg_ayer ()
  51.     {
  52.     $file = fopen("bd/seguidores.txt", "r");
  53.     while(!feof($file))
  54.         $seguidores_ayer=fgets($file);
  55.     fclose($file);
  56.     $v=explode("##",$seguidores_ayer);
  57.     return $v;
  58.     }
  59.  
  60. function actualizar_seg($settings)
  61.     {
  62.     $file = fopen("bd/seguidores.txt", "w");   
  63.     foreach (seg_hoy ($settings) as $user)
  64.         fwrite($file,$user."##");
  65.     fclose($file);
  66.     }
  67. function nuevos ($settings,$user)
  68.     {
  69.     $hoy=seg_hoy($settings,$user);
  70.     $ayer=seg_ayer();
  71.     return array_diff($hoy,$ayer);
  72.     }
  73.  
  74. function mandarDM ($settings,$texto,$destinatario)
  75.     {
  76.     $url = "https://api.twitter.com/1.1/direct_messages/new.json";
  77.     $postfields=array('user_id' =>$destinatario,'text' =>$texto);
  78.     $requestMethod = 'POST';
  79.     $wp = array(CURLOPT_SSL_VERIFYPEER => false);
  80.     $twitter = new TwitterAPIExchange($settings);
  81.     $string = json_decode($twitter->setPostfields($postfields)
  82.         ->buildOauth($url, $requestMethod)
  83.         ->performRequest(true,$wp),$assoc = TRUE); 
  84.     }
  85.  
  86. function mandarDMNuevos($settings,$user)
  87.     {
  88.     foreach (nuevos($settings,$user) as $nuevo)
  89.         {
  90.         $texto="Gracias por seguirme @".sacarNombre($settings,$nuevo)." ¿te parecen interesantes mis tuits? suscríbete a mi blog y no te pierdas nada -> http://eepurl.com/bebw4j";
  91.         mandarDM ($settings,$texto,$nuevo);
  92.         echo "<p>Mandado DM a ".sacarNombre($settings,$nuevo).": ".$texto."</p>";
  93.         }
  94.     }
  95.    
  96. mandarDMNuevos($settings,$user);
  97. actualizar_seg($settings);
  98.  
  99. ?>

¿Cómo funciona?

Dejo un resumen muy breve de como funciona todo este pero lo más importante es que leáis el manual de referencia que enlazo y que adaptéis el código a vuestro estilo y necesidades.

  1. En primer lugar ya te habrás dado cuenta de que no está muy bien organizado, sobre todo pueden mejorar mucho el tema de $settings para que no tenga que estar siempre pasándose como parámetro. Además te aviso que la versión que tengo en funcionamiento lleva directamente el usuario al que sacar los seguidores escrita en la solicitud API y lo he parametrizado en el ejemplo pero no está probado así que revisa el tema de $user si te da problema.
  2. Verás esto: $wp = array(CURLOPT_SSL_VERIFYPEER => false); que esa algo que he tenido que usar porque me daba errores con la documentación oficial, pero puede que a ti no te haga falta. Aquí puedes leer más sobre este tema.
  3. No podéis dejar de leer esta referencia oficial que además es muy buena
  4. Por lo demás el funcionamiento es sencillo
    1. Tengo los seguidores en un fichero de texto guardados por el ID porque por el nombre solo se pueden sacar 200. Los guardo en un fichero plano separados por ## para luego procesarlo con explode y dejarlos en un array
    2. En otro array meto los seguidores cada vez que se ejecuta el programa, simplemente sacando la diferencia entre el fichero almacenado y los actuales que saco en el vector ya tengo los nuevos.
    3. Después solo es cuestión de ir recorriendo los nuevos y mandar un mensaje personalizado a cada uno, ojo en este caso se hace por el método POST y van en un array. El el mensaje agradezco y pido suscripción al blog pero claro que cada uno puede hacer lo que quiera.
    4. Al final actualizo los seguidores almacenados en el fichero para las próximas ejecuciones.

¿Qué te parece? para cualquier cosa no dudes en comentar y si te gusta compártelo allá dónde pueda ser útil ;)


Conoce mis servicios SEO.



Servicios personalizados para profesionales, agencias y PYMES

Deja un comentario

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