<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>nordri&#039;s Blog &#187; command line</title>
	<atom:link href="http://www.muspells.net/blog/tag/command-line/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.muspells.net/blog</link>
	<description>Estamos trabajando en ello...</description>
	<lastBuildDate>Wed, 04 Jan 2012 16:01:57 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
		<item>
		<title>&#8220;Tumbleando&#8221; Desde La Consola</title>
		<link>http://www.muspells.net/blog/2010/05/tumbleando-desde-la-consola/</link>
		<comments>http://www.muspells.net/blog/2010/05/tumbleando-desde-la-consola/#comments</comments>
		<pubDate>Sun, 16 May 2010 18:35:27 +0000</pubDate>
		<dc:creator>Fede Diaz</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[command line]]></category>
		<category><![CDATA[posting]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[tumblr]]></category>

		<guid isPermaLink="false">http://www.muspells.net/blog/?p=451</guid>
		<description><![CDATA[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 [...]]]></description>
			<content:encoded><![CDATA[<p>Me he hecho una cuenta de <a href="http://www.tumblr.com/">Tumblr</a> 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 <a href="http://www.tumblr.com/docs/en/api">API</a> 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&#8230; es lo que hay. </p>
<pre>
&lt;?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" &#038;&#038; $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);
}

?&gt;
</pre>
<p>Para lanzar el script, simplemente</p>
<pre>$ php toTumblr.php [photo | video] url comentario</pre>
<p>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.</p>
<p>La función que verifica que la url es válida es de la documentación de PHP.</p>
<div style="height:33px;" class="really_simple_share robots-nocontent snap_nopreview"><div class="really_simple_share_facebook_like" style="width:100px;">
				<iframe src="http://www.facebook.com/plugins/like.php?href=http%3A%2F%2Fwww.muspells.net%2Fblog%2F2010%2F05%2Ftumbleando-desde-la-consola%2F&amp;layout=button_count&amp;show_faces=false&amp;width=100&amp;action=like&amp;colorscheme=light&amp;send=false&amp;height=27" 
						scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:100px; height:27px;" allowTransparency="true"></iframe>
				</div><div class="really_simple_share_twitter" style="width:110px;">
					<a href="http://twitter.com/share" class="twitter-share-button" data-count="horizontal" 
						data-text="&#8220;Tumbleando&#8221; Desde La Consola. via @nordri" data-url="http://www.muspells.net/blog/2010/05/tumbleando-desde-la-consola/" 
						data-via=""  ></a> 
				</div></div>
		<div style="clear:both;"></div>]]></content:encoded>
			<wfw:commentRss>http://www.muspells.net/blog/2010/05/tumbleando-desde-la-consola/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

