Actualizar Twitter y Facebook con curl

Artículo enviado por A. Cuartango:

A veces resulta interesante poder actualizar la página de Twitter o la de Facebook desde la línea de comandos. Para ello podemos hacer uso de curl, la navaja suiza de la automatización de tareas Web. Veamos cómo:

«Twitter es más sencillo, ya que su API permite usar curl sin ninguna dificultad (el API está documentado siguiendo el enlace de la página principal de Twitter):

curl -u   USUARIO:PASSWORD   -d status="Hola desde curl. MENSAJE AQUI" http://api.twitter.com/1/statuses/update.json

En facebook hay que usar un script (Gracias Alste):

<?php
//
// change Facebook status with curl
// Thanks to Alste (curl stuff inspired by nexdot.net/blog)
 
function setFacebookStatus($status, $login_email, $login_pass) {
echo "Entra";
   $debug = false;
   //CURL stuff
   //This executes the login procedure
   $ch = curl_init();
   curl_setopt($ch, CURLOPT_URL, 'https://login.facebook.com/login.php?m&amp;next=http%3A%2F%2Fm.facebook.com%2Fhome.php');
   curl_setopt($ch, CURLOPT_POSTFIELDS, 'email=' . urlencode($login_email) . '&pass=' . urlencode($login_pass) . '&login=' . urlencode("Log in"));
   curl_setopt($ch, CURLOPT_POST, 1);
   curl_setopt($ch, CURLOPT_HEADER, 0);
   //curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
   curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
   curl_setopt($ch, CURLOPT_COOKIEJAR, "my_cookies.txt");
   curl_setopt($ch, CURLOPT_COOKIEFILE, "my_cookies.txt");
   curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
   //make sure you put a popular web browser here (signature for your web browser can be retrieved with 'echo $_SERVER['HTTP_USER_AGENT'];'
   curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.12) Gecko/2009070611 Firefox/3.0.12");
   curl_exec($ch);
 
   //This executes the status update
   curl_setopt($ch, CURLOPT_POST, 0);
   curl_setopt($ch, CURLOPT_URL, 'http://m.facebook.com/home.php');
   $page = curl_exec($ch);
 
   curl_setopt($ch, CURLOPT_POST, 1);
   //this gets the post_form_id value
   preg_match("/input type="hidden" name="post_form_id" value="(.*?)"/", $page, $form_id);
   //we'll also need the exact name of the form processor page
   preg_match("/form action="(.*?)"/", $page, $form_num);
 
   curl_setopt($ch, CURLOPT_POSTFIELDS, 'post_form_id=' . $form_id[1] . '&status=' . urlencode($status) . '&update=' . urlencode("Update status"));
   //set url to form processor page
   curl_setopt($ch, CURLOPT_URL, 'http://m.facebook.com' . $form_num[1]);
   curl_exec($ch);
 
   if ($debug) {
       //show information regarding the request
       print_r(curl_getinfo($ch));
       echo curl_errno($ch) . '-' . curl_error($ch);
       echo "<br><br>Your Facebook status seems to have been updated.";
   }
   //close the connection
   curl_close($ch);
}
 
setFacebookStatus("Esto es una prueba de publicacion automática desde línea de comandos", "CUENTA_FACEBOOK","CLAVE_FACEBOOK" );

Con esto y un poco de scripting podremos publicar lo que queramos en una cuenta de facebook y twitter.

8 comentarios en «Actualizar Twitter y Facebook con curl»

  1. @Iñigo: para poder enlazar tuberías. Ejemplo cogido «al azar»: el RSS de un sitio web lo quieres encauzar hacia Twitter (o Facebook) …

  2. Por linea de comandos, por API, por un wysiwyg…

    Creo que al final del camino, lo importante es: «escribe UNA VEZ contenido, publícalo donde quieras».

    A tal efecto, yo vengo usando desde hace ya mucho tiempo txt2tags (txt2tags.sourceforge.net) para redactar mi contenido y después, mediante mini scripts, API’s… publicarlo en varias plataformas. Aun así, no he encontrado una herramienta (que debiera existir) que sea capaz de realizar este trabajo, publicar tu contenido con varias plataformas.

    ¿Eres conocedor de alguna?

    Un saludo y enhorabuena por tu blog. Te visito todos los días.

Deja una respuesta

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

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.