<?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>deerme</title>
	<atom:link href="http://deerme.org/feed" rel="self" type="application/rss+xml" />
	<link>http://deerme.org</link>
	<description>development and more</description>
	<lastBuildDate>Tue, 07 Feb 2012 12:32:07 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
		<item>
		<title>descargar y descomprimir archivo zip con python</title>
		<link>http://deerme.org/python/descargar-y-descomprimir-archivo-zip-con-python</link>
		<comments>http://deerme.org/python/descargar-y-descomprimir-archivo-zip-con-python#comments</comments>
		<pubDate>Tue, 07 Feb 2012 12:23:18 +0000</pubDate>
		<dc:creator>deerme.org</dc:creator>
				<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://deerme.org/?p=352</guid>
		<description><![CDATA[Pequeño script que permite descargar,guardar y descomprimir un archivo zip usando python y los módulos urllib2, sys y zipfile. &#160; &#160; &#160; &#160; &#160; &#160;]]></description>
			<content:encoded><![CDATA[<p>Pequeño script que permite descargar,guardar y descomprimir un archivo zip usando python y los módulos urllib2, sys y zipfile.</p>
<p>&nbsp; <br/>&nbsp; <br/>&nbsp; <br/>&nbsp; <br/>&nbsp; <br/>&nbsp; <br/> </p>
<pre class="brush: python; title: ; notranslate">
import urllib2, sys, zipfile

tmp_path = '/tmp/'
doc_url = 'http://example.org/file.zip'

u = urllib2.urlopen(doc_url)
localFile = open(tmp_path + &quot;/tmp-zip.zip&quot; , 'w')
localFile.write(u.read())
localFile.close()

sourceZip = zipfile.ZipFile( tmp_path + &quot;/tmp-zip.zip&quot; ,  'r')
for name in sourceZip.namelist():
	print name
	sourceZip.extract(name, tmp_path + &quot;/&quot; + name )
sourceZip.close()
</pre>
]]></content:encoded>
			<wfw:commentRss>http://deerme.org/python/descargar-y-descomprimir-archivo-zip-con-python/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>descargar y guardar un archivo en .net c#</title>
		<link>http://deerme.org/net-c/descargar-y-guardar-un-archivo-en-net-csharp</link>
		<comments>http://deerme.org/net-c/descargar-y-guardar-un-archivo-en-net-csharp#comments</comments>
		<pubDate>Tue, 07 Feb 2012 12:06:22 +0000</pubDate>
		<dc:creator>deerme.org</dc:creator>
				<category><![CDATA[.NET C#]]></category>

		<guid isPermaLink="false">http://deerme.org/?p=343</guid>
		<description><![CDATA[WebClient, es una clase en .NET del package System.Net, permite enviar o recibir datos de recursos indentificados por una URL (ejemplo, un enlace FTP ). El siguiente ejemplo permite descargar y guardar un archivo en .NET C# &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; &#160; Toda la ciencia la realiza la el método DownloadFile, [...]]]></description>
			<content:encoded><![CDATA[<p>WebClient, es una clase en .NET del package System.Net, permite enviar o recibir datos de recursos indentificados por una URL (ejemplo, un enlace FTP ). El siguiente ejemplo permite descargar y guardar un archivo en .NET C#</p>
<p> &nbsp; &nbsp; &nbsp; <br/> &nbsp; &nbsp; <br/> &nbsp; &nbsp; <br/> &nbsp; &nbsp; </p>
<pre class="brush: csharp; title: ; notranslate">
using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
using System.IO;
namespace ExampleDownloadFile
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                WebClient webClient = new WebClient();
                webClient.DownloadFile(&quot;http://example.org/data.zip&quot;, @&quot;c:/data.zip&quot;);
            }
            catch( Exception ex)
            {
                System.Console.WriteLine( &quot;Problem: &quot; + ex.Message );
            }
        }
    }
}
</pre>
<p>Toda la ciencia la realiza la el método DownloadFile, que permite descargar y guardar el archivo en forma sincrona.</p>
]]></content:encoded>
			<wfw:commentRss>http://deerme.org/net-c/descargar-y-guardar-un-archivo-en-net-csharp/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Capturar datos de otra web en PHP</title>
		<link>http://deerme.org/php/capturar-datos-de-otra-web-en-php</link>
		<comments>http://deerme.org/php/capturar-datos-de-otra-web-en-php#comments</comments>
		<pubDate>Wed, 30 Nov 2011 13:33:13 +0000</pubDate>
		<dc:creator>deerme.org</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[extración de datos]]></category>
		<category><![CDATA[web scraping]]></category>

		<guid isPermaLink="false">http://deerme.org/?p=315</guid>
		<description><![CDATA[A veces es necesario extraer datos &#8220;públicos&#8221; desde alguna fuente en internet, en PHP, lo podemos hacer con un GET y una que otra expresión regular. Como en todo, hay varias formas, pero creo que la más sencilla es utilizar la función file_get_contents para realizar un simple GET y obtener el contenido del sitio web. [...]]]></description>
			<content:encoded><![CDATA[<p>A veces es necesario extraer datos &#8220;públicos&#8221; desde alguna fuente en internet, en PHP, lo podemos hacer con un GET y una que otra expresión regular.</p>
<p>Como en todo, hay varias formas, pero creo que la más sencilla es utilizar la función file_get_contents para realizar un simple GET y obtener el contenido del sitio web.</p>
<p>La función file_get_contents soporta varios wrappers, desde un archivo local (ejemplo /tmp/my-file) a una url http, pasando por ftp, scp, etc. (<a href="http://es.php.net/manual/en/wrappers.php">más información sobre wrappers</a>).</p>
<p>Vamos a extraer la UF desde el sitio www.terra.cl/valores/</p>
<p><a href="http://deerme.org/wp-content/uploads/2011/11/php-uf-terra.png"><img src="http://deerme.org/wp-content/uploads/2011/11/php-uf-terra.png" alt="" title="php-uf-terra" width="550" height="334" class="alignnone size-full wp-image-316" /></a></p>
<p>Al analizar el código fuente del sitio, podemos ver que la UF se encuentra en el siguiente trozo de código</p>
<pre class="brush: xml; title: ; notranslate">
&lt;tr bgcolor=&quot;EFEBE7&quot;&gt;
            &lt;td align=&quot;right&quot; class=&quot;texto2&quot;&gt;UF : &lt;/td&gt;

            &lt;td class=&quot;texto2&quot;&gt;&lt;b&gt;22.213,43&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
</pre>
<p>Solo nos queda realizar una expresión regular que sea capaz de representar al patrón del trozo de código y la sección que deseamos capturar.</p>
<pre class="brush: php; title: ; notranslate">
&lt;?php
// Example by deerme.org
$data = file_get_contents(&quot;http://www.terra.cl/valores/&quot;);

if ( preg_match('|&lt;td align=&quot;right&quot; class=&quot;texto2&quot;&gt;UF : &lt;/td&gt;\s+&lt;td class=&quot;texto2&quot;&gt;&lt;b&gt;(.*?)&lt;/b&gt;&lt;/td&gt;|is' , $data , $cap ) )
{
	echo &quot;UF &quot;.$cap[1];
}
</pre>
<p>Si ejecutamos nuestro script (vía web o por consola) obtenemos la UF de hoy a través de Terra xD.</p>
]]></content:encoded>
			<wfw:commentRss>http://deerme.org/php/capturar-datos-de-otra-web-en-php/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>leer la entrada estándar stdin por php</title>
		<link>http://deerme.org/php/leer-la-entrada-estandar-stdin-por-php</link>
		<comments>http://deerme.org/php/leer-la-entrada-estandar-stdin-por-php#comments</comments>
		<pubDate>Thu, 24 Nov 2011 14:38:02 +0000</pubDate>
		<dc:creator>deerme.org</dc:creator>
				<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://deerme.org/?p=307</guid>
		<description><![CDATA[Es muy común leer la entrada standard cuando realizamos en un script de línea de comandos, en php, lo podemos realizar directamente accediendo al stream stdin e iterando y obteniendo el contenido a través fgets. El siguiente ejemplo (muy sencillo y poco funcional xD), lee la entrada standard stdin y toma un par de acciones [...]]]></description>
			<content:encoded><![CDATA[<p>Es muy común leer la entrada standard cuando realizamos en un script de línea de comandos, en php, lo podemos realizar directamente accediendo al stream stdin e iterando y obteniendo el contenido a través fgets.</p>
<p>El siguiente ejemplo (muy sencillo y poco funcional xD), lee la entrada standard stdin y toma un par de acciones (de hecho solo dos, time y quit xD).</p>
<p><br/>&nbsp;<br/></p>
<pre class="brush: php; title: ; notranslate">
&lt;?php
$p = fopen(&quot;php://stdin&quot;.&quot;r&quot;);
if($p)
{
	while( !feof($p) )
	{
		$buff = trim( fgets($P , 4096) );
		if ( $buff == &quot;time&quot; )
			echo date(&quot;Y-m-d H:i:s&quot;).&quot;\n&quot;;
		if ( $buff == &quot;quit&quot; )
		{
			echo &quot;bye =)&quot;;
			exit();
		}
	}
}
</pre>
<p><a href="http://deerme.org/wp-content/uploads/2011/11/php-stdin.png"><img src="http://deerme.org/wp-content/uploads/2011/11/php-stdin.png" alt="" title="php-stdin" width="550" height="324" class="alignnone size-full wp-image-308" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://deerme.org/php/leer-la-entrada-estandar-stdin-por-php/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>levantar aplicación encapsulada en una screen</title>
		<link>http://deerme.org/linux/levantar-aplicacion-encapsulada-en-una-screen</link>
		<comments>http://deerme.org/linux/levantar-aplicacion-encapsulada-en-una-screen#comments</comments>
		<pubDate>Thu, 24 Nov 2011 14:16:30 +0000</pubDate>
		<dc:creator>deerme.org</dc:creator>
				<category><![CDATA[GNU/Linux]]></category>

		<guid isPermaLink="false">http://deerme.org/?p=301</guid>
		<description><![CDATA[GNU Screen es una aplicación de línea de comandos que permite levantar distintas terminales y encapsular aplicaciones a ellla, de esta forma, podemos tener distintas terminales cada una de ella corriendo una aplicación distintas, etc. La forma más habitual de uso, es ejecutar screen, luego en ella levantar la aplicación, más terminales, etc. Aveces es [...]]]></description>
			<content:encoded><![CDATA[<p>GNU Screen es una aplicación de línea de comandos que permite levantar distintas terminales y encapsular aplicaciones a ellla, de esta forma, podemos tener distintas terminales cada una de ella corriendo una aplicación distintas, etc. La forma más habitual de uso, es ejecutar screen, luego en ella levantar la aplicación, más terminales, etc.</p>
<p>Aveces es necesario levantar una screen con un determinado nombre y una aplicación (ejemplo, si deseamos levantar una screen desde un cron o desde un script con una aplicación corriendo en ella), si es así, podemos usar la siguiente sintaxis.</p>
<pre class="brush: bash; title: ; notranslate">
# Definimos el nombre myscreen y levantamos el script /opt/app/myapp.py
/usr/bin/screen -dmUS myscreen /opt/examples/myapp.py
</pre>
<p>Podemos consultar el listado de screen y ver si realmente se esta ejecutando nuestro script myapp.py</p>
<pre class="brush: bash; title: ; notranslate">
screen -ls
ps aux | grep SCREEN
</pre>
<p>En el screenshot, podemos ver que existe una screen llamada myscreen y en ella esta corriendo myapp.py<br />
<a href="http://deerme.org/wp-content/uploads/2011/11/linux-screen1.png"><img src="http://deerme.org/wp-content/uploads/2011/11/linux-screen1.png" alt="" title="linux-screen" width="550" height="306" class="alignnone size-full wp-image-304" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://deerme.org/linux/levantar-aplicacion-encapsulada-en-una-screen/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>no guardar log en una sesión ssh</title>
		<link>http://deerme.org/linux/no-guardar-log-en-una-sesion-ssh</link>
		<comments>http://deerme.org/linux/no-guardar-log-en-una-sesion-ssh#comments</comments>
		<pubDate>Tue, 15 Nov 2011 13:26:23 +0000</pubDate>
		<dc:creator>deerme.org</dc:creator>
				<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[log]]></category>
		<category><![CDATA[ssh]]></category>

		<guid isPermaLink="false">http://deerme.org/?p=295</guid>
		<description><![CDATA[A veces por distintas circustancias de la vida, es necesario no guardar el log de comandos de una sesión SSH. ¿Es posible? Sí, solo debemos redefinir la variable de entorno HISTFILE A sí, una vez que finalicemos la sesión, el sistema va a guardar el log en /dev/null xD]]></description>
			<content:encoded><![CDATA[<p>A veces por distintas circustancias de la vida, es necesario no guardar el log de comandos de una sesión SSH. ¿Es posible? Sí, solo debemos redefinir la variable de entorno HISTFILE</p>
<pre class="brush: bash; title: ; notranslate">
export HISTFILE=/dev/null
</pre>
<p>A sí, una vez que finalicemos la sesión, el sistema va a guardar el log en /dev/null xD</p>
]]></content:encoded>
			<wfw:commentRss>http://deerme.org/linux/no-guardar-log-en-una-sesion-ssh/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>subir archivo por ftp en python</title>
		<link>http://deerme.org/python/subir-archivo-por-ftp-en-python</link>
		<comments>http://deerme.org/python/subir-archivo-por-ftp-en-python#comments</comments>
		<pubDate>Wed, 19 Oct 2011 14:21:29 +0000</pubDate>
		<dc:creator>deerme.org</dc:creator>
				<category><![CDATA[Python]]></category>
		<category><![CDATA[ftp]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[upload]]></category>

		<guid isPermaLink="false">http://deerme.org/?p=279</guid>
		<description><![CDATA[Una forma sencilla para subir un archivo por ftp en python es utilizando la librería ftplib. El siguiente ejemplo, pide la password por línea de comandos (getpass), auntentifica contra el servidor www.example.com, usuario &#8216;user&#8217; y las password ingresada, finalmente guardar el archivo local /tmp/my.file en /www/upload/my.file (servidor). &#160;]]></description>
			<content:encoded><![CDATA[<p>Una forma sencilla para subir un archivo por ftp en python es utilizando la librería <strong>ftplib</strong>.</p>
<p>El siguiente ejemplo, pide la password por línea de comandos (getpass), auntentifica contra el servidor www.example.com, usuario &#8216;user&#8217; y las password ingresada, finalmente guardar el archivo local /tmp/my.file en /www/upload/my.file (servidor).</p>
<h2>&nbsp;</h2>
<pre class="brush: python; title: ; notranslate">
#!/usr/bin/python
import ftplib
import getpass

try:
        passwd = getpass.getpass('Password: ')
        if not passwd:
                quit()
        try:
                s = ftplib.FTP('www.example.com','user', passwd)
                f = open('/tmp/my.file', 'rb')
                s.storbinary('STOR /www/upload/my.file', f)

                f.close()
                s.quit()
                print &quot;: )&quot;
        except:
                quit()

except:
        quit()
</pre>
]]></content:encoded>
			<wfw:commentRss>http://deerme.org/python/subir-archivo-por-ftp-en-python/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>aplicación web como una aplicación desktop con air flex 3</title>
		<link>http://deerme.org/flex-3/aplicacion-web-de-escritorio-con-air-flex-3</link>
		<comments>http://deerme.org/flex-3/aplicacion-web-de-escritorio-con-air-flex-3#comments</comments>
		<pubDate>Tue, 18 Oct 2011 15:04:38 +0000</pubDate>
		<dc:creator>deerme.org</dc:creator>
				<category><![CDATA[Flex 3]]></category>
		<category><![CDATA[desktop applications]]></category>
		<category><![CDATA[flex]]></category>
		<category><![CDATA[mozilla prism]]></category>
		<category><![CDATA[web applications]]></category>

		<guid isPermaLink="false">http://deerme.org/?p=266</guid>
		<description><![CDATA[En muchos entornos de desarrollo web &#8220;corporativo&#8221; (intranet, sistemas internos, etc.) es posible encontrarnos con una gran variedad de browser de antaño. Tenemos tres alternativas, solicitar actualización de navegadores, re-escribir-adaptar nuestra vista y lógica javascript para muchas versiones o encapsular &#8220;nuestra aplicación web&#8221; en una aplicación de escritorio. No es novedad, hace un par de [...]]]></description>
			<content:encoded><![CDATA[<p>En muchos entornos de desarrollo web &#8220;corporativo&#8221; (intranet, sistemas internos, etc.) es posible encontrarnos con una gran variedad de browser de antaño.<br />
Tenemos tres alternativas, solicitar actualización de navegadores, re-escribir-adaptar nuestra vista y lógica javascript para muchas versiones o encapsular &#8220;nuestra aplicación web&#8221; en una aplicación de escritorio.</p>
<p>No es novedad, hace un par de años que existen alternativas como Prims (actualmente Mozilla Chromeless) que nos permiten encapsular el acceso de un sitio web en una aplicación de escritorio, solo es un render html o navegador &#8220;capado&#8221; para visitar una sola url.</p>
<p>¿Por qué no implementar nuestra solución con AIR Flex 3?<br />
Hay un par de ventajas, como tener una aplicación multiplataforma (win, linux y osx), trabajar sobre un único motor de renderizado (Webkit), etc.</p>
<p>De hecho es sencillo, solo vamos a utilizar el elemento mx:HTML junto a un par de funciones para leer el fichero xml de configuración (url, tamaño de ventana, etc.), como dice el dicho, un código fuente vale más que mil palabras xD.</p>
<pre class="brush: xml; title: ; notranslate">
&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;mx:WindowedApplication xmlns:mx=&quot;http://www.adobe.com/2006/mxml&quot; layout=&quot;absolute&quot; creationComplete=&quot;callLater(init)&quot;&gt;
	&lt;mx:Script&gt;
		&lt;![CDATA[
			import mx.controls.Alert;
			private var appIcon:BitmapData;

			private function init():void
			{
				loadConfig();
			}

			private function loadConfig():void
			{
				try {
					var configLoader:URLLoader = new URLLoader();
					var configRequest:URLRequest = new URLRequest('config.xml');
					configLoader.load(configRequest);
					configLoader.addEventListener(Event.COMPLETE, applyConfig);
				}
				catch (e:Error)
				{
					Alert.show('Error al cargar la configuración.','ERROR');
					this.close();
				}
			}

			private function applyConfig(e:Event):void
			{
				// Icono de la aplicación
				// Configuraciones externas (config.xml)
				var data:XML = new XML(e.target.data);
				try {
					this.title = data.title;
					this.width = data.width;
					this.height = data.height;
					navigator.location = data.url;
					loadIcon(data.icon);
				}
				catch (e:Error)
				{
					Alert.show('Error al aplicar configuración','ERROR');
					this.close();
				}
			}

			private function loadIcon(iconSrc:String):void
			{
				var iconLoader:Loader = new Loader();
				iconLoader.load(new URLRequest(iconSrc));
				iconLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, function(e:Event):void {
					appIcon = e.target.content.bitmapData;
					callLater(applyIcon);
				});
			}

			private function applyIcon():void
			{
				NativeApplication.nativeApplication.icon.bitmaps = [appIcon];
			}
		]]&gt;
	&lt;/mx:Script&gt;
	&lt;mx:HTML id=&quot;navigator&quot; width=&quot;100%&quot; height=&quot;100%&quot;/&gt;
&lt;/mx:WindowedApplication&gt;
</pre>
<p><img src="/wp-content/uploads/2011/10/flex-webapp.png" alt="Aplicación Web corriendo sobre Aplicacipon de Escritorio con AIR Flex 3" /></p>
<p><a href='http://deerme.org/wp-content/uploads/2011/10/appConfigurable.zip'>Descarga el proyecto para Flex 3</a></p>
]]></content:encoded>
			<wfw:commentRss>http://deerme.org/flex-3/aplicacion-web-de-escritorio-con-air-flex-3/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Expresiones Regulares en Java</title>
		<link>http://deerme.org/java/expresiones-regulares-en-java</link>
		<comments>http://deerme.org/java/expresiones-regulares-en-java#comments</comments>
		<pubDate>Mon, 17 Oct 2011 14:32:13 +0000</pubDate>
		<dc:creator>deerme.org</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[expresion regular]]></category>
		<category><![CDATA[java regex]]></category>

		<guid isPermaLink="false">http://wp.deerme.org/?p=221</guid>
		<description><![CDATA[Las expresiones regulares (para los amigos regex) son una herramienta muy potente en el mundo del desarrollo, están presentes en la mayoría de los lenguajes modernos e incluso en comandos clásicos como grep y find. Como no, en Java, disponemos de un package dedicado a las expresiones regulares, lo podemos &#8220;importar&#8221; desde java.util.regex.*. Validación (match) [...]]]></description>
			<content:encoded><![CDATA[<p>Las expresiones regulares (para los amigos regex) son una herramienta muy potente en el mundo del desarrollo, están presentes en la mayoría de los lenguajes modernos e incluso en comandos clásicos como <strong>grep</strong> y <strong>find</strong>.</p>
<p>Como no, en Java, disponemos de un package dedicado a las expresiones regulares, lo podemos &#8220;importar&#8221; desde <strong>java.util.regex.*</strong>.</p>
<h2>Validación (match)</h2>
<p>Es una de la tareas más fundamentales en cualquier sistema, consiste en validar si un dato (String) valida respecto a cierto patrón, ejemplo, representa a un número de teléfono, e-mail, etc.</p>
<p>El siguiente ejemplo, valida los elementos del arreglo contra el patrón fecha (pt_fecha), email (pt_email) y registro (pt_record) usando Pattern y Matcher.</p>
<pre class="brush: java; title: ; notranslate">
package org.deerme.examples;
import java.io.BufferedInputStream;
import java.net.URL;
import java.util.regex.*;

public class EjemplosRegex {
    public static void main(String[] args) {
        String[] entradas = {&amp;amp;quot;2011/10/17&amp;amp;quot;,&amp;amp;quot;deer@deerme.org&amp;amp;quot;,&amp;amp;quot;Soy un string xD&amp;amp;quot;,&amp;amp;quot;Jose Ignacio, 56975124554&amp;amp;quot;,&amp;amp;quot;Maria Jose, 56942641243&amp;amp;quot;,&amp;amp;quot;123 Soy un record incorrecto, 23523abc&amp;amp;quot;};
        // Matcher
         Matcher mt;
        // Patrones
        Pattern pt_fecha = Pattern.compile(&amp;amp;quot;^d{4}/d{2}/d{2}&amp;amp;quot;);
        Pattern pt_email = Pattern.compile(&amp;amp;quot;^[w-.]{3,}@([w-]{2,}.)*([w-]{2,}.)[w-]{2,4}$&amp;amp;quot;);
        Pattern pt_record = Pattern.compile(&amp;amp;quot;^[A-Za-z ]+,[ 0-9]+&amp;amp;quot;);
        for(int i=0; i&amp;amp;lt; entradas.length; i++)
        {
            // Fecha
            mt = pt_fecha.matcher( entradas[i] );
            if ( mt.find() )
            {
                System.out.println(&amp;amp;quot;El string '&amp;amp;quot; + entradas[i]  + &amp;amp;quot;' valida con el patrón de fecha.&amp;amp;quot;);
            }
            //Email
            mt = pt_email.matcher( entradas[i] );
            if ( mt.find() )
            {
                System.out.println(&amp;amp;quot;El string '&amp;amp;quot; + entradas[i]  + &amp;amp;quot;' valida con el patrón de e-mail.&amp;amp;quot;);
            }
            // Registro del tipo &amp;amp;quot;Nombre, Número Teléfonico&amp;amp;quot;
            mt = pt_record.matcher( entradas[i] );
            if ( mt.find() )
            {
                System.out.println(&amp;amp;quot;El string '&amp;amp;quot; + entradas[i]  + &amp;amp;quot;' valida con el patrón de registro.&amp;amp;quot;);
            }
        }
    }
}
</pre>
<p>El método find (del objeto Matcher) devuelve true, si el string ingresado válida respecto al patrón, en caso contrario, devuelve false.</p>
<p>Tambien podriamos utilizar el método matches de la clase String.</p>
<pre class="brush: java; title: ; notranslate">String email = &amp;amp;quot;deer@deerme.org&amp;amp;quot;;
if ( email.matches(&amp;amp;quot;^[w-.]{3,}@([w-]{2,}.)*([w-]{2,}.)[w-]{2,4}$&amp;amp;quot;) )
{
     System.out.println(&amp;amp;quot;El email es lexicamente válido&amp;amp;quot;);
}</pre>
<h2>Extraer (extract)</h2>
<p>La extración de datos es otra tarea muy común de resolver con las expresiones regulares. Vamos a realizar un pequeño ejemplo que extrae el tiempo de Santiago desde el sitio web www.cooperativa.cl.</p>
<p><a href="http://wp.deerme.org/wp-content/uploads/2011/10/cooperativa-tiempo.png"><img src="http://wp.deerme.org/wp-content/uploads/2011/10/cooperativa-tiempo.png" alt="" title="cooperativa-tiempo" width="600" height="300" class="aligncenter size-full wp-image-243" /></a></p>
<p>Fuente</p>
<pre class="brush: xml; title: ; notranslate">
&amp;amp;lt;td align=&amp;amp;quot;center&amp;amp;quot; width=&amp;amp;quot;290&amp;amp;quot;&amp;amp;gt;&amp;amp;lt;span class=&amp;amp;quot;resalta&amp;amp;quot;&amp;amp;gt;&amp;amp;lt;a href=&amp;amp;quot;/prontus_nots/site/extra/webget/clima/clima.html&amp;amp;quot;&amp;amp;gt;El Tiempo&amp;amp;lt;/a&amp;amp;gt;:&amp;amp;lt;/span&amp;amp;gt; Santiago,
 temperatura: 17 &amp;amp;amp;deg;C
 humedad: 52 %&amp;amp;lt;/td&amp;amp;gt;
</pre>
<pre class="brush: java; title: ; notranslate">
package org.deerme.examples;
import java.io.BufferedInputStream;
import java.net.URL;
import java.util.regex.*;

public class EjemplosRegex {
    public static void main(String[] args) {
        // Example of extraction of data from a web site
        String cooperativa_site = &amp;amp;quot;&amp;amp;quot;;
        byte[] buff = new byte[4096];
        try
        {
            URL url = new URL( &amp;amp;quot;http://www.cooperativa.cl&amp;amp;quot; );
            BufferedInputStream bis = new BufferedInputStream(url.openStream());

            int bytesRead = 0;
            while ((bytesRead = bis.read(buff)) != -1)
            {
                cooperativa_site = cooperativa_site + new String(buff, 0, bytesRead);
            }
            bis.close();

        } catch (Exception ex)
        {
            System.out.println(&amp;amp;quot;Problem extracting data : ( &amp;amp;quot;);
        }

        Pattern pt_tiempo = Pattern.compile(&amp;amp;quot;El Tiempo&amp;amp;lt;/a&amp;amp;gt;:&amp;amp;lt;/span&amp;amp;gt;(.*?)&amp;amp;lt;/td&amp;amp;gt;&amp;amp;quot;, Pattern.DOTALL | Pattern.MULTILINE );
        Matcher mt_tiempo = pt_tiempo.matcher( cooperativa_site );       

        if ( mt_tiempo.find()  )
        {
            System.out.println( &amp;amp;quot;Tiempo: &amp;amp;quot;  +  mt_tiempo.group(1).replace(&amp;amp;quot;&amp;amp;amp;deg;C&amp;amp;quot;, &amp;amp;quot;°c&amp;amp;quot;).trim() );
        }
    }
}
</pre>
<p>A diferenciar del ejemplo anterior, ahora utilizamos el método group para acceder al elemento definido en nuestro patrón.</p>
<h2>Reemplazo (replace)</h2>
<p>Finalmente, el reemplazo es otra tarea útil que podemos resolver con la ayuda de las expresiones regulares. Podemos utilizar el método replaceAll de la clase String o Matcher.</p>
<pre class="brush: java; title: ; notranslate">
        // Replace using String.replaceAll
        String query = &amp;amp;quot;SelEct title, comment, author from articles UNION sELEct title, comment, author from comments&amp;amp;quot;;
        System.out.println( query.replaceAll(&amp;amp;quot;((S|s){1}(E|e){1}(L|l){1}(E|e){1}(C|c){1}(T|t){1})&amp;amp;quot;, &amp;amp;quot;SELECT&amp;amp;quot;)  );

        // Replace using Matcher.replaceAll
        Pattern pt_select = Pattern.compile(&amp;amp;quot;((S|s){1}(E|e){1}(L|l){1}(E|e){1}(C|c){1}(T|t){1})&amp;amp;quot;);
        Matcher mt_select = pt_select.matcher(query);

        System.out.println( mt_select.replaceAll(&amp;amp;quot;SELECT&amp;amp;quot;) );
</pre>
]]></content:encoded>
			<wfw:commentRss>http://deerme.org/java/expresiones-regulares-en-java/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Cómo realizar una conexión http get en Java</title>
		<link>http://deerme.org/java/como-realizar-una-conexion-http-get-en-java</link>
		<comments>http://deerme.org/java/como-realizar-una-conexion-http-get-en-java#comments</comments>
		<pubDate>Thu, 13 Oct 2011 15:05:25 +0000</pubDate>
		<dc:creator>deerme.org</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[http get]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[url get]]></category>

		<guid isPermaLink="false">http://wp.deerme.org/?p=215</guid>
		<description><![CDATA[En Java, disponemos de la clase java.net.URL, una clase de alto nivel que nos permite trabajar de una forma sencilla con las Uniform Resource Locator, es decir, URL. Para realizar una conexión HTTP GET, podemos usar el método openStream (de URL) para obtener un clásico objeto InputStream, el resto es simplemente leer el Stream. El [...]]]></description>
			<content:encoded><![CDATA[<p>En Java, disponemos de la clase <strong>java.net.URL</strong>, una clase de alto nivel que nos permite trabajar de una forma sencilla con las <strong>Uniform Resource Locator</strong>, es decir, <strong>URL</strong>.</p>
<p>Para realizar una conexión HTTP GET, podemos usar el método openStream (de URL) para obtener un clásico objeto InputStream, el resto es simplemente leer el Stream.</p>
<p>El siguiente ejemplo, realiza un HTTP GET a la URL &#8220;http://www.emol.com&#8221; para guardar el contenido en un String e imprimir el resultado.</p>
<pre class="brush: java; title: ; notranslate">package org.deerme.examples;
import java.io.*;
import java.net.*;
/**
 * It's just an example an HTTP GET
 * @author deerme.org
 */

public class ExampleHTTPGet {
    private String siteContent = &quot;&quot;;

    public ExampleHTTPGet( String strUrl )
    {
        String content;
        try
         {
            byte[] buffer = new byte[4096];
            URL url = new URL( strUrl );

            BufferedInputStream bis = new BufferedInputStream(url.openStream());
            int bytesRead = 0;

            while ((bytesRead = bis.read(buffer)) != -1)
            {
                content = new String(buffer, 0, bytesRead);
                this.siteContent = this.siteContent + content;
            }
            bis.close();

            System.out.println( this.siteContent );

        } catch (Exception ex)
        {
            System.out.println(&quot;OMG, Houston, we have a exception  &quot; + ex.getMessage() + &quot; xD&quot;);
        }
    }

    public static void main(String[] args) {
        // In my case, I use a proxy
        System.setProperty(&quot;http.proxyHost&quot;, &quot;localhost&quot;);
        System.setProperty(&quot;http.proxyPort&quot;, &quot;44444&quot;);
        new ExampleHTTPGet(&quot;http://www.emol.com&quot;);
    }
}
</pre>
<p>Si no sales a través de un Proxy, debemes comentar las líneas System.setProperty,</p>
]]></content:encoded>
			<wfw:commentRss>http://deerme.org/java/como-realizar-una-conexion-http-get-en-java/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

