<?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; script</title>
	<atom:link href="http://www.muspells.net/blog/tag/script/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>Utilizando ficheros de configuración en los scripts de Bash</title>
		<link>http://www.muspells.net/blog/2011/01/utilizando-ficheros-de-configuracion-en-los-scripts-de-bash/</link>
		<comments>http://www.muspells.net/blog/2011/01/utilizando-ficheros-de-configuracion-en-los-scripts-de-bash/#comments</comments>
		<pubDate>Mon, 24 Jan 2011 09:32:13 +0000</pubDate>
		<dc:creator>Fede Diaz</dc:creator>
				<category><![CDATA[Linux Script]]></category>
		<category><![CDATA[bash]]></category>
		<category><![CDATA[console]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[script]]></category>
		<category><![CDATA[shell]]></category>
		<category><![CDATA[source]]></category>

		<guid isPermaLink="false">http://www.muspells.net/blog/?p=634</guid>
		<description><![CDATA[En algunas ocasiones tal vez necesites crear un script de Bash para resolver algunas tareas y que utilice un fichero de configuración. ¿Cómo lo plantearías? ¿Cómo implementarías el fichero de configuración? Lo primero que pensé fue en utilizar el comando cut de forma que el fichero de configuración tuviera un formato de etiqueta=valor, y podría [...]]]></description>
			<content:encoded><![CDATA[<p>En algunas ocasiones tal vez necesites crear un script de Bash para resolver algunas tareas y que utilice un fichero de configuración. ¿Cómo lo plantearías? ¿Cómo implementarías el fichero de configuración? </p>
<p>Lo primero que pensé fue en utilizar el comando <strong>cut</strong> de forma que el fichero de configuración tuviera un formato de <em>etiqueta=valor</em>, y podría &#8220;cortar&#8221; para leer la etiqueta y el valor. Pero es mala cosa, porque por cada línea del fichero de configuración tienes que cortar y luego saber qué etiqueta es. La mejor solución, el comando <strong>source</strong></p>
<p>Suponemos un fichero de configuración <em>config.ini</em> como este:</p>
<pre>
PATTERN="$hello*"
FILENAME=hello.txt
OUTPUT=result.txt
</pre>
<p>Y queremos que nuestro script lea estas variables y ejecute <strong>grep</strong></p>
<pre>
#!/bin/bash
source config.ini

grep ${PATTERN} ${FILENAME} > ${OUTPUT}
</pre>
<p>El comando <strong>source</strong> importara todas las variables del fichero de configuración <em>config.ini</em> en nuestro script y prodremos utilizarlas para lanzar <strong>grep</strong>. También podemos sustituir el comando <strong>source</strong> por un <strong>.</strong> (un punto) así:</p>
<pre>
. config.ini
</pre>
<p>También podemos importar otros script con sentencias de control (<strong>if-else</strong>) pero hay que tener cuidado porque si el script que importamos contiene el comando <strong>exit</strong> el programa finalizará en ese punto. Por ejemplo, importamos el siguente trozo de código:</p>
<p>config.sh</p>
<pre>
#!/bin/bash
HELLO=world
exit
</pre>
<p>Y lo utilizamos en este:</p>
<p>parent.sh</p>
<pre>
#!/bin/bash
source config.sh
echo ${HELLO}
</pre>
<p>Cuando lanzamos el script <strong>./parent.sh</strong> terminará antes de llegar a la línea de <strong>echo</strong> porque ha leído el <strong>exit</strong></p>
<p>Espero que este pequeño truco os de una idea de como utilizar el comando <strong>source</strong> para importar fichero de configuración dentro de vuestros scripts</p>
<p>Es una traducción de este truco en <a href="http://linux.byexamples.com/archives/553/config-file-for-your-bash-script/">linux.byexamples.com</a></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%2F2011%2F01%2Futilizando-ficheros-de-configuracion-en-los-scripts-de-bash%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="Utilizando ficheros de configuración en los scripts de Bash. via @nordri" data-url="http://www.muspells.net/blog/2011/01/utilizando-ficheros-de-configuracion-en-los-scripts-de-bash/" 
						data-via=""  ></a> 
				</div></div>
		<div style="clear:both;"></div>]]></content:encoded>
			<wfw:commentRss>http://www.muspells.net/blog/2011/01/utilizando-ficheros-de-configuracion-en-los-scripts-de-bash/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<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>

