“Tumbleando” Desde La Consola

Me he hecho una cuenta de Tumblr y quería ver si se podía postear desde la línea de comandos que es donde estoy más tiempo. Así que leí la sencilla API que tienen y me puse a programar basando en el ejemplo que tienen publicado. Bueno, al principio quería hacerlo en Python pero se me hacía demasiado complejo manejar una petición POST con multipart/form-data. Así que tomé el ejemplo y lo completé para poder enviar fotos y vídeos en esta primera versión. En el futuro, quiero que el script reconozca que estoy posteando y lo pueda clasificar sólo. Así espero tener soporte para más cosas. ¿Que por qué hago esto? porque no puedo hacer las cosas como un usuario normal… es lo que hay.

<?php
$tumblr_email = 'direccion de correo';
$tumblr_password = 'secreto';

// Control de la linea de parametros
if (count($argv) < 4) {
  exit("ERROR: Uso: $argv[0] [photo | video] url caption\n");
}

// Datos de la entrada
$post_type = $argv[1];
if ($post_type != "photo" && $post_type != "video") {
  exit("Error: El primer parametro debe ser photo o video\nHa escrito $argv[1] en $post_type\n");
}
$post_embed   = $argv[2];
validateURL($post_embed) or exit ("Error: no ha introducido una URL válida\n");
$post_source  = $argv[2];
validateURL($post_source) or exit ("Error: no ha introducido una URL válida\n");

$post_caption = $argv[3];

// Preparación de la peticion POST
if ($post_type == 'photo') {
  $request_data = array(
        'email'     => $tumblr_email,
        'password'  => $tumblr_password,
        'type'      => $post_type,
        'generator' => 'PHP-Cli-Tumblr 0.1 http://www.muspells.net',
        'source'    => $post_source,
	'caption'   => $post_caption
    );
} else {
  $request_data = array(
        'email'     => $tumblr_email,
        'password'  => $tumblr_password,
        'type'      => $post_type,
        'generator' => 'PHP-Cli-Tumblr 0.1 http://www.muspells.net',
      	'embed'	    => $post_embed,
	'caption'   => $post_caption
    );
}

// Enviar la petición POST (con cURL)
$c = curl_init('http://www.tumblr.com/api/write');
curl_setopt($c, CURLOPT_COOKIEJAR, "my_cookies.txt");
curl_setopt($c, CURLOPT_COOKIEFILE, "my_cookies.txt");
curl_setopt($c, CURLOPT_FOLLOWLOCATION,1);
curl_setopt($c, CURLOPT_POST, true);
curl_setopt($c, CURLOPT_POSTFIELDS, $request_data);
curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($c);
$status = curl_getinfo($c, CURLINFO_HTTP_CODE); 
curl_close($c);

// Todo bien?
if ($status == 201) {
    echo "Success! The new post ID is $result.\n";
} else if ($status == 403) {
    echo "Bad email or password\n";
} else if ($status == 400) {
    echo "Bad request\n";
} else {
    echo "Error: $result\n";
}

function validateURL($url) {
  if($url==NULL) return false; 
	$protocol = '(http://|https://)'; 
	$allowed = '([a-z0-9]([-a-z0-9]*[a-z0-9]+)?)'; 
	$regex = "^". $protocol . // must include the protocol 
			 '(' . $allowed . '{1,63}\.)+'. // 1 or several sub domains with a max of 63 chars 
			 '[a-z]' . '{2,6}'; // followed by a TLD 
	return eregi($regex, $url);
}

?>

Para lanzar el script, simplemente

$ php toTumblr.php [photo | video] url comentario

He tratado de controlar un poco la línea de comandos sobretodo, porque aquí el orden de los parámetros si influye. En el futuro, espero que no sea necesario.

La función que verifica que la url es válida es de la documentación de PHP.

This entry was posted in PHP and tagged , , , , . Bookmark the permalink.