<?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>Ruta Relativa &#187; Desarrollo</title>
	<atom:link href="http://www.rutarelativa.com/category/desarrollo/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.rutarelativa.com</link>
	<description>Porque la web es relativa</description>
	<lastBuildDate>Wed, 04 Jan 2012 20:37:06 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Aprende a programar en Android online y gratis con Google</title>
		<link>http://www.rutarelativa.com/desarrollo/aprende-programar-android-online-gratis-google/</link>
		<comments>http://www.rutarelativa.com/desarrollo/aprende-programar-android-online-gratis-google/#comments</comments>
		<pubDate>Sat, 17 Dec 2011 21:57:45 +0000</pubDate>
		<dc:creator>Sergiocius</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[Aprende a programar en Android online y gratis con Google]]></category>
		<category><![CDATA[Aprender a programar gratis]]></category>
		<category><![CDATA[Aprender Android]]></category>
		<category><![CDATA[Cursos Android]]></category>
		<category><![CDATA[Cursos de Android gratis]]></category>
		<category><![CDATA[Cursos para aprender a programar en Android]]></category>
		<category><![CDATA[Desarrollar en Android]]></category>
		<category><![CDATA[Programar en Android]]></category>
		<category><![CDATA[Tutoriales Android]]></category>

		<guid isPermaLink="false">http://www.rutarelativa.com/?p=863</guid>
		<description><![CDATA[Muy buena iniciativa la que están llevando a cabo desde Google con una serie de cursos online llamados Android training destinado a aquellos que quieran aprender a programar en Android online y gratis. Decimos que es muy buena iniciativa porque estarán, en su mayor parte, destinados a enseñarnos a optimizar aspectos como el rendimiento de [...]]]></description>
			<content:encoded><![CDATA[<p>Muy buena iniciativa la que están llevando a cabo desde Google con una serie de cursos online llamados <em>Android training</em> destinado a aquellos que quieran <strong>aprender a programar en Android online y gratis</strong>. Decimos que es muy buena iniciativa porque estarán, en su mayor parte, destinados a enseñarnos a <strong>optimizar aspectos como el rendimiento de la batería</strong>, técnicas para ofrecer un <strong>diseño más intuitivo</strong> y útil y, en definitiva, resolver muchos de los problemas de los desarrolladores.</p>
<p><span id="more-863"></span></p>
<p><img width="560" height="420" alt="Aprende a programar en Android online y gratis con Google" src="http://www.images.rutarelativa.com/aprende-programar-android-online-gratis-google-1.gif" /></p>
<p>De momento ofrecen poca información, puesto que está en sus inicios, pero no cabe duda que tarde o temprano tendremos un lugar donde buscar y resolver nuestras dudas, un sitio que seguir diariamente para <strong>aprender a desarrollar en Android</strong> y coger código útil para nuestras aplicaciones, ya que han confirmado que ofrecerán porciones de código para nuestro uso.</p>
<p>Por ahora los cursos online están solamente disponibles en Inglés, así que esperamos poder tenerlos en un futuro cercano en nuestro idioma y aprender mucho de los cursos de <strong>Android training</strong>.</p>
<p>Enlace: <a href="http://android-developers.blogspot.com/2011/12/introducing-android-training.html" title="Aprende a programar en Android online y gratis con Google" rel="external nofollow">Aprende a programar en Android online y gratis con Google</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.rutarelativa.com/desarrollo/aprende-programar-android-online-gratis-google/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CodeAnywhere: Potente editor PHP online con acceso FTP</title>
		<link>http://www.rutarelativa.com/php/codeanywhere-potente-editor-php-online-acceso-ftp/</link>
		<comments>http://www.rutarelativa.com/php/codeanywhere-potente-editor-php-online-acceso-ftp/#comments</comments>
		<pubDate>Tue, 05 Jul 2011 12:05:34 +0000</pubDate>
		<dc:creator>Sergiocius</dc:creator>
				<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[Php]]></category>
		<category><![CDATA[Acceso FTP]]></category>
		<category><![CDATA[CodeAnywhere]]></category>
		<category><![CDATA[Codificar Android]]></category>
		<category><![CDATA[Codificar en la nube]]></category>
		<category><![CDATA[Codificar iPhone]]></category>
		<category><![CDATA[Editor CSS]]></category>
		<category><![CDATA[Editor CSS Online]]></category>
		<category><![CDATA[Editor HTML]]></category>
		<category><![CDATA[Editor HTML Online]]></category>
		<category><![CDATA[Editor Javascript]]></category>
		<category><![CDATA[Editor Javascript online]]></category>
		<category><![CDATA[Editor PHP]]></category>
		<category><![CDATA[Editor XML]]></category>
		<category><![CDATA[Editor XML Online]]></category>
		<category><![CDATA[La nube]]></category>
		<category><![CDATA[Potente editor PHP online]]></category>

		<guid isPermaLink="false">http://www.rutarelativa.com/?p=841</guid>
		<description><![CDATA[Con CodeAnywhere, como su nombre indica, tenemos la posibilidad de codificar en cualquier sitio, siendo éste un potente editor PHP online con acceso FTP. Lo he probado bastante a fondo y he de decir que ofrece muchísimas posibilidades, siendo una alternativa muy a tener en cuenta. No solo podemos codificar en PHP, también podemos hacerlo [...]]]></description>
			<content:encoded><![CDATA[<p>Con <strong>CodeAnywhere</strong>, como su nombre indica, tenemos la posibilidad de <strong>codificar en cualquier sitio</strong>, siendo éste un <strong>potente editor PHP online con acceso FTP</strong>. Lo he probado bastante a fondo y he de decir que ofrece muchísimas posibilidades, siendo una alternativa muy a tener en cuenta.</p>
<p>No solo podemos <strong>codificar en PHP</strong>, también podemos hacerlo en <strong>HTML, JavaScript, CSS, y XML</strong>; ofreciéndonos toda una gama de posibilidades de <strong>desarrollo en la nube</strong>.</p>
<p><span id="more-841"></span></p>
<p><img width="560" height="334" alt="CodeAnywhere: Potente editor PHP online con acceso FTP" src="http://www.images.rutarelativa.com/codeanywhere-potente-editor-php-online-acceso-ftp-1.gif" /></p>
<p>Para trabajar con los archivos PHP -o con los formatos antes citados- debemos hacerlo a través de un servidor FTP que deberemos de configurar previamente -asimismo deberemos de registrarnos en el sistema antes de comenzar- y a partir de entonces tendremos acceso a los ficheros con los que queremos trabajar.</p>
<p>Resulta realmente útil contar con un <strong>editor PHP online</strong>, o en la nube como se suele decir, para en cualquier caso de emergencia podamos acceder a nuestros ficheros desde cualquier equipo y modificarlos, siendo también modificables desde nuestro smartphone con <a href="https://market.android.com/details?id=net.phpanywhere" title="CodeAnywhere: Potente editor PHP online con acceso FTP en Android" rel="external nofollow">Android</a> o nuestro iPhone -actualmente en desarrollo-.</p>
<p>Os dejamos con un video de presentación de la plataforma, para que conozcáis más a fondo en qué consiste el proyecto <strong>CodeAnywhere</strong>:</p>
<p><object width="540" height="313" type="application/x-shockwave-flash" data="http://www.youtube.com/v/rnkfM-koQvM&#038;fs=1"><param value="transparent" name="wmode"/><param value="true" name="allowfullscreen"/><param name="movie" value="http://www.youtube.com/v/rnkfM-koQvM&#038;fs=1"/></object></p>
<p>Enlace: <a href="http://codeanywhere.net/" title="CodeAnywhere: Potente editor PHP online con acceso FTP" rel="external nofollow">CodeAnywhere: Potente editor PHP online con acceso FTP</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.rutarelativa.com/php/codeanywhere-potente-editor-php-online-acceso-ftp/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Redimensionar imágen proporcionalmente y con tamaño fijo en PHP</title>
		<link>http://www.rutarelativa.com/php/redimensionar-imagen-proporcionalmente-tamano-fijo-php/</link>
		<comments>http://www.rutarelativa.com/php/redimensionar-imagen-proporcionalmente-tamano-fijo-php/#comments</comments>
		<pubDate>Thu, 19 May 2011 12:03:26 +0000</pubDate>
		<dc:creator>Sergiocius</dc:creator>
				<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[Php]]></category>
		<category><![CDATA[Código PHP para redimensionar imágenes]]></category>
		<category><![CDATA[Crear Thumbnails]]></category>
		<category><![CDATA[Crear thumbs]]></category>
		<category><![CDATA[Redimensionar imagen con marco]]></category>
		<category><![CDATA[Redimensionar imágen proporcionalmente y con tamaño fijo en PHP]]></category>
		<category><![CDATA[Redimensionar imágenes]]></category>
		<category><![CDATA[Redimensionar imágenes PHP]]></category>
		<category><![CDATA[Thumbnails]]></category>
		<category><![CDATA[Thumbs]]></category>

		<guid isPermaLink="false">http://www.rutarelativa.com/?p=830</guid>
		<description><![CDATA[El tratamiento de imágenes es algo que, tarde o temprano, los que desarrollamos páginas web tenemos que afrontar. En este caso vamos a proponeros una función que he desarrollado personalmente para redimensionar imágenes proporcionalmente y con tamaño fijo en PHP, más concretamente para crear thumbnails de imágenes de dimensiones proporcionales y pudiendo especificar un tamaño [...]]]></description>
			<content:encoded><![CDATA[<p>El tratamiento de imágenes es algo que, tarde o temprano, los que <a href="http://www.idkinformatica.com/" title="iDk Informática: Desarrollo web profesional">desarrollamos páginas web</a> tenemos que afrontar. En este caso vamos a proponeros una función que he desarrollado personalmente para <strong>redimensionar imágenes proporcionalmente y con tamaño fijo en PHP</strong>, más concretamente para <strong>crear <a href="http://es.wikipedia.org/wiki/Thumbnail" title="Thumbnail en Wikipedia" rel="external nofollow">thumbnails</a> de imágenes de dimensiones proporcionales y pudiendo especificar un tamaño fijo</strong>.</p>
<p><span id="more-830"></span></p>
<p>Antes de mostrar el <strong>código para redimensionar imágenes proporcionalmente y con tamaño fijo en PHP</strong>, vamos a intentar explicar en qué consiste: En primer lugar tenemos una imágen de unas dimensiones cualquieras, en nuestro caso de 560x560px.</p>
<p><img width="560" height="560" alt="Redimensionar imágen proporcionalmente y con tamaño fijo en PHP" src="http://www.images.rutarelativa.com/redimensionar-imagen-proporcionalmente-tamano-fijo-php-1.gif" /></p>
<p><em>Ejemplo de imágen a redimensionar.</em></p>
<p>Pongámonos en el caso de que queremos <strong>crear un thumbnail</strong> de dicha imágen con unas dimensiones fijas de 160x100px. Nos sería imposible en principio redimensionarla de forma proporcional ya que las imagen original y el thumbnail tienen proporciones diferentes, con lo que u obtendríamos una imágen a 160x160px ó a 100x100px para que sea de tamaño proporcional.</p>
<p><img width="326" height="199" alt="Redimensionar imágen proporcionalmente y con tamaño fijo en PHP" src="http://www.images.rutarelativa.com/redimensionar-imagen-proporcionalmente-tamano-fijo-php-2.gif" /></p>
<p><em>Ejemplo de dos imágenes proporcionales.</em></p>
<p>En este caso, si <strong>queremos que la imágen final tenga un tamaño fijo</strong> lo ideal sería que el tamaño restante sea rellenado por un marco de color transparente. En este caso cogeríamos la imágen de 100x100px y le añadiríamos un marco a ambos lados de 30px en cada lado.</p>
<p><img width="300" height="130" alt="Redimensionar imágen proporcionalmente y con tamaño fijo en PHP" src="http://www.images.rutarelativa.com/redimensionar-imagen-proporcionalmente-tamano-fijo-php-3.gif" /></p>
<p><em>Ejemplo de imágen proporcional con tamaño fijo.</em></p>
<p>Una vez explicado este punto, pasamos a mostraros la función y a detallarla:</p>
<h3>Redimensionar imágen proporcionalmente y con tamaño fijo en PHP</h3>
<pre><code>function createThumb($sImagen, $nWidth = false, $nHeight = false)
{
    // Variables
    $sNombre = null;
    $sPath = null;
    $sExt = null;
    $aImage = null;
    $aThumb = null;
    $aImageMarco = null;
    $ImTransparente = null;
    $aSize = null;
    $nWidthMarco = false;
    $nWidthHeight = false;
    $nX = false;
    $nY = false;

    // Obtenemos el nombre de la imagen
    $sNombre = basename( $sImagen );
    // Obtenemos la ruta especificada para buscar la imagen
    $sPath = dirname( $sImagen ) . '/';
    // Obtenemos la extension de la imagen
    $sExt = mime_content_type( $sImagen );

    // Creamos el directorio thumbs
    if( ! is_dir( $sPath . 'thumbs/' ) )
        @mkdir( $sPath . 'thumbs/', 0777, true ) or die( 'No se ha podido crear el directorio &quot;' . $sPath . 'thumbs/&quot;.' );

    // Creamos la imagen a partir del tipo
    switch( $sExt )
    {
        // Imagen JPG
        case 'image/jpeg':
            $aImage = @imageCreateFromJpeg( $sImagen );
            break;
        // Imagen GIF
        case 'image/gif':
            $aImage = @imageCreateFromGif( $sImagen );
            break;
        // Imagen PNG
        case 'image/png':
            $aImage = @imageCreateFromPng( $sImagen );
            break;
        // Imagen BMP
        case 'image/wbmp':
            $aImage = @imageCreateFromWbmp( $sImagen );
            break;
        default:
            return 'No se conoce el tipo de imagen enviado, por favor cambie el formato. S&oacute;lo se permiten im&aacute;genes *.jpg, *.gif, *.png &oacute; *.bmp.';
            break;
    }

    // Obtenemos el tama&ntilde;o de la imagen original
    $aSize = getImageSize( $sImagen );

    // Calculamos las proporciones de la imagen //

    // Obteniendo el alto (Recogiendo ancho y no alto)
    if( $nWidth !== false &amp;&amp; $nHeight === false )
        $nHeight = round( ( $aSize[1] * $nWidth ) / $aSize[0] );
    // Obteniendo el ancho (Recogiendo alto y no ancho)
    elseif( $nWidth === false &amp;&amp; $nHeight !== false )
        $nWidth = round( ( $aSize[0] * $nHeight ) / $aSize[1] );
    // Obteniendo proporciones (Recogiendo alto y ancho)
    elseif( $nWidth !== false &amp;&amp; $nHeight !== false )
    {
        // Guardamos las dimensiones del marco
        $nWidthMarco = $nWidth;
        $nHeightMarco = $nHeight;

        // Si el ancho es mayor
        if( $nWidth &lt; $nHeight )
        {
            $nHeight = round( ( $aSize[1] * $nWidth ) / $aSize[0] );
            $nX = 0;
            $nY = round( ( $nHeightMarco - $nHeight ) / 2 );
        }
        // Si el alto es mayor
        elseif( $nHeight &lt; $nWidth )
        {
            $nWidth = round( ( $aSize[0] * $nHeight ) / $aSize[1] );
            $nX = round( ( $nWidthMarco - $nWidth ) / 2 );;
            $nY = 0;
        }
    }
    // El ancho y el alto no se han enviado, informamos del error
    elseif( $nWidth === false &amp;&amp; $nHeight === false )
        return 'No se ha especificado ning&uacute;n valor para el ancho y el alto de la im&aacute;gen.';

    // La nueva imagen reescalada
    $aThumb = imageCreateTrueColor( $nWidth, $nHeight );

    // Reescalamos
    imageCopyResampled( $aThumb, $aImage, 0, 0, 0, 0, $nWidth, $nHeight, $aSize[0], $aSize[1] );

    // Si tenemos que crear el marco
    if( $nWidthMarco !== false &amp;&amp; $nHeightMarco !== false )
    {
        // El marco
        $aImageMarco = imageCreateTrueColor( $nWidthMarco, $nHeightMarco );

        // Establecemos la imagen de fondo transparente
        imageAlphaBlending( $aImageMarco, false );
        imageSaveAlpha( $aImageMarco, true );

        // Establecemos el color transparente (negro)
        $ImTransparente = imageColorAllocateAlpha( $aImageMarco, 0, 0, 0, 0xff/2 );

        // Ponemos el fondo transparente
        imageFilledRectangle( $aImageMarco, 0, 0, $nWidthMarco, $nHeightMarco, $ImTransparente );

        // Combinamos las imagenes
        imageCopyResampled( $aImageMarco, $aThumb, $nX, $nY, 0, 0, $nWidth, $nHeight, $nWidth, $nHeight );

        // Cambiamos la instancia
        $aThumb = $aImageMarco;
    }

    // Salvamos
    imagePng( $aThumb, $sPath . 'thumbs/' . $sNombre );

    // Liberamos
    imageDestroy( $aImage );
    imageDestroy( $aThumb );

    return true;
}</code></pre>
<p>La función puede recibir tres parámetros, siendo el primero la <strong>ruta de la imágen a redimensionar</strong>, el segundo sería el ancho que queremos darle y el tercero el alto. Si especificamos ambos parámetros, ancho y alto, la imágen se redimensionará a dicho tamaño fijo dándole un marco transparente. Si especificamos solo el ancho tendremos una imágen proporcional con respecto al ancho, en nuestro caso si especificamos que la imagen de 560x560px la queremos con un ancho de 160px, el resultado final tendrá unas dimensiones de 160x160px. De igual forma con el alto, si especificamos para la imágen de 560x560px un alto de 100px, el resultado final tendrá unas dimensiones de 100x100px. También cabe destacar que se creará automáticamente un directorio llamado &#8220;thumbs&#8221; y ahí se almacenarán las imágenes resultantes. Siéntete libre de cambiar el código a tu gusto.</p>
<p>Cualquier error o sugerencia en el código será bien recibida en los comentarios.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rutarelativa.com/php/redimensionar-imagen-proporcionalmente-tamano-fijo-php/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Cómo enviar información por POST con Javascript</title>
		<link>http://www.rutarelativa.com/desarrollo/como-enviar-informacion-post-javascript/</link>
		<comments>http://www.rutarelativa.com/desarrollo/como-enviar-informacion-post-javascript/#comments</comments>
		<pubDate>Thu, 19 May 2011 10:27:14 +0000</pubDate>
		<dc:creator>Sergiocius</dc:creator>
				<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Codigo]]></category>
		<category><![CDATA[Cómo enviar información por POST con Javascript]]></category>
		<category><![CDATA[Desarrollo Web]]></category>
		<category><![CDATA[Metodo GET]]></category>
		<category><![CDATA[Metodo Post]]></category>
		<category><![CDATA[Php]]></category>
		<category><![CDATA[Post]]></category>
		<category><![CDATA[Proceso para enviar información por POST con Javascript]]></category>

		<guid isPermaLink="false">http://www.rutarelativa.com/?p=829</guid>
		<description><![CDATA[Si queremos enviar parámetros a otra página web tenemos dos métodos, GET y POST, con los cuales podremos transferir información entre páginas web. En este caso vamos a explicar un proceso para saber cómo enviar información por POST con Javascript, simulando el uso de un formulario: // Creamos el formulario auxiliar var form = document.createElement( [...]]]></description>
			<content:encoded><![CDATA[<p>Si queremos enviar parámetros a otra página web tenemos dos métodos, <a href="http://es.wikipedia.org/wiki/Hypertext_Transfer_Protocol" title="Protocolo HTTP en Wikipedia" rel="external nofollow">GET y POST</a>, con los cuales podremos transferir información entre páginas web. En este caso vamos a explicar un <strong>proceso para saber cómo enviar información por POST con Javascript</strong>, simulando el uso de un formulario:</p>
<p><span id="more-829"></span></p>
<pre><code>// Creamos el formulario auxiliar
var form = document.createElement( &quot;form&quot; );

// Le a&ntilde;adimos atributos como el name, action y el method
form.setAttribute( &quot;name&quot;, &quot;formulario&quot; );
form.setAttribute( &quot;action&quot;, &quot;&quot; );
form.setAttribute( &quot;method&quot;, &quot;post&quot; );

// Creamos un input para enviar el valor
var input = document.createElement( &quot;input&quot; );

// Le a&ntilde;adimos atributos como el name, type y el value
input.setAttribute( &quot;name&quot;, &quot;prueba&quot; );
input.setAttribute( &quot;type&quot;, &quot;hidden&quot; );
input.setAttribute( &quot;value&quot;, &quot;Soy una prueba&quot; );

// A&ntilde;adimos el input al formulario
form.appendChild( input );

// A&ntilde;adimos el formulario al documento
document.getElementsByTagName( &quot;body&quot; )[0].appendChild( form );

// Hacemos submit
document.formulario.submit();</code></pre>
<p>A modo de explicación, lo que hacemos es, en cualquier evento que tendrás que especificar, creamos un formulario auxiliar, donde le insertamos un input invisible con un valor y hacemos submit para que dichos datos se envíen a la página web especificada en el atributo action del formulario. De esta forma estamos enmascarando el <strong>envío de parámetros por POST usando Javascript</strong>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rutarelativa.com/desarrollo/como-enviar-informacion-post-javascript/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Mozilla Firefox no carga el CSS</title>
		<link>http://www.rutarelativa.com/desarrollo/mozilla-firefox-no-carga-css/</link>
		<comments>http://www.rutarelativa.com/desarrollo/mozilla-firefox-no-carga-css/#comments</comments>
		<pubDate>Mon, 14 Mar 2011 17:56:11 +0000</pubDate>
		<dc:creator>Sergiocius</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[Corregir CSS]]></category>
		<category><![CDATA[Desarrollo Web]]></category>
		<category><![CDATA[Google Chrome no carga el CSS]]></category>
		<category><![CDATA[Internet Explorer]]></category>
		<category><![CDATA[Mozilla Firefox no carga el CSS]]></category>
		<category><![CDATA[Problemas CSS]]></category>
		<category><![CDATA[Soluciones CSS]]></category>
		<category><![CDATA[Validar CSS]]></category>

		<guid isPermaLink="false">http://www.rutarelativa.com/?p=815</guid>
		<description><![CDATA[Un problema que nos sucede a muchos webmasters es que a veces Mozilla Firefox no carga el CSS, o Google Chrome no carga el CSS -por citar dos exploradores- mientras que en Internet Explorer dicho CSS se muestra perfectamente. Esto puede ser debido a algunas razones, pero nosotros vamos a proponer dos posibles soluciones sin [...]]]></description>
			<content:encoded><![CDATA[<p>Un problema que nos sucede a muchos webmasters es que a veces <strong>Mozilla Firefox no carga el CSS</strong>, o <strong>Google Chrome no carga el CSS</strong> -por citar dos exploradores- mientras que en Internet Explorer dicho CSS se muestra perfectamente.</p>
<p>Esto puede ser debido a algunas razones, pero nosotros vamos a proponer dos posibles soluciones sin contar las más lógicas como comprobar si la ruta del CSS se encuentra correctamente y similares. Empezamos:</p>
<p><span id="more-815"></span></p>
<h3>Solución 1: Mozilla Firefox no carga el CSS</h3>
<p>La primera posible solución puede ser que <strong>nuestro CSS contiene algún error grave</strong> y debemos de subsanarlo antes de que Firefox lo pueda mostrar. Para poder comprobar nuestro CSS deberemos de dirigirnos al <a href="http://jigsaw.w3.org/css-validator/" title="Mozilla Firefox no carga el CSS" rel="external nofollow">validador de la W3C</a> que nos indicará todos los errores y advertencias acerca de nuestro CSS. Por supuesto lo corregimos y probamos hasta que nuestro CSS se muestre.</p>
<h3>Solución 2: Mozilla Firefox no carga el CSS</h3>
<p>Añade el siguiente código en tu archivo .htaccess:</p>
<pre><code>&lt;FilesMatch &quot;^.*style.*?$&quot;&gt;
AddHandler text/css .css
&lt;/FilesMatch&gt;</code></pre>
<p>Con esto nos aseguramos que nuestra página web usará los archivos .css como fuente, siendo una posible solución.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rutarelativa.com/desarrollo/mozilla-firefox-no-carga-css/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Eliminar marco de Google Imágenes y no perder ninguna visita</title>
		<link>http://www.rutarelativa.com/desarrollo/eliminar-marco-google-imagenes-no-perder-ninguna-visita/</link>
		<comments>http://www.rutarelativa.com/desarrollo/eliminar-marco-google-imagenes-no-perder-ninguna-visita/#comments</comments>
		<pubDate>Wed, 01 Dec 2010 11:42:55 +0000</pubDate>
		<dc:creator>Sergiocius</dc:creator>
				<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Codigo]]></category>
		<category><![CDATA[Eliminar marco de Google Imágenes]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Google Imágenes]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[No perder ninguna visita]]></category>
		<category><![CDATA[Redirección]]></category>
		<category><![CDATA[Rendimiento]]></category>
		<category><![CDATA[Visitas]]></category>
		<category><![CDATA[Wordpress]]></category>

		<guid isPermaLink="false">http://www.rutarelativa.com/?p=748</guid>
		<description><![CDATA[Hace relativamente poco tiempo Google realizó cambios importantes en la interface y funcionamiento de su portal de búsquedas de imágenes, el portal que conocemos como Google Imágenes. Entre esos cambios añadieron la posibilidad de previsualizar la imagen añadiéndola en un marco con la consiguiente pérdida de visitas para webs que manejen un gran volumen de [...]]]></description>
			<content:encoded><![CDATA[<p>Hace relativamente poco tiempo Google realizó cambios importantes en la interface y funcionamiento de su portal de búsquedas de imágenes, el portal que conocemos como <strong>Google Imágenes</strong>. Entre esos cambios añadieron la posibilidad de <strong>previsualizar la imagen</strong> añadiéndola en un marco con la consiguiente pérdida de visitas para webs que manejen un gran volumen de imágenes.</p>
<p>Os vamos a enseñar un <strong>código para eliminar el marco de Google Imágenes y no perder ninguna visita</strong>:</p>
<p><span id="more-748"></span></p>
<p><img width="560" height="342" alt="Eliminar marco de Google Imágenes y no perder ninguna visita" src="http://www.images.rutarelativa.com/eliminar-marco-google-imagenes-no-perder-ninguna-visita-1.gif" /></p>
<p><em>Ejemplo de previsualización y marco de Google Imágenes.</em></p>
<p>En primer lugar deberemos dirigirnos al código fuente de nuestra página web y localizar donde se encuentra el header (head) de nuestra página. Por ejemplo, si usamos <a href="http://www.rutarelativa.com/category/wordpress/" title="Artículos, información y trucos para WordPress">WordPress</a> podremos localizarlo en la carpeta &#8220;/wp-content/themes/&lt;nombre de nuestro theme&gt;/header.php&#8221;. Una vez localizado, debemos editar y añadir justo sobre el cierre del &lt;/head&gt; el siguiente código:</p>
<pre><code>&lt;head&gt;
...
	&lt;script type=&quot;text/javascript&quot;&gt;
		if(top.location!=this.location) top.location=this.location;
	&lt;/script&gt;
&lt;/head&gt;</code></pre>
<p>Este código lo que hace es que cuando alguien encuentra una imágen en Google Imágenes perteneciente a nuestra web, Google mostrará una previsualización de la misma dentro de un marco, pero el código hará rápidamente una <strong>redirección a nuestra web</strong>. Por supuesto hará lo mismo para cualquier tipo de iframe, así que es cuestión de que cada usuario haga uso de este código como mejor convenga a sus necesidades.</p>
<p>Fuente: <a href="http://oloblogger.blogspot.com/2010/11/evitar-el-frame-de-google-imagenes-y-de.html" title="Evitar el frame de Google Imágenes y de otros">Oloblogger</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.rutarelativa.com/desarrollo/eliminar-marco-google-imagenes-no-perder-ninguna-visita/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Caja de texto con calendario en Javascript y Mootools</title>
		<link>http://www.rutarelativa.com/desarrollo/caja-texto-calendario-javascript-mootools/</link>
		<comments>http://www.rutarelativa.com/desarrollo/caja-texto-calendario-javascript-mootools/#comments</comments>
		<pubDate>Mon, 29 Nov 2010 13:06:53 +0000</pubDate>
		<dc:creator>Sergiocius</dc:creator>
				<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Caja de texto]]></category>
		<category><![CDATA[Caja de texto con calendario]]></category>
		<category><![CDATA[Calendario para formulario web]]></category>
		<category><![CDATA[Desarrollo Web]]></category>
		<category><![CDATA[Descargar codigo javascript para calendario]]></category>
		<category><![CDATA[Formulario intuitivo]]></category>
		<category><![CDATA[Formularios javascript]]></category>
		<category><![CDATA[Formularios Mootools]]></category>
		<category><![CDATA[Freebies]]></category>
		<category><![CDATA[Javascript Mootools]]></category>
		<category><![CDATA[Mootools]]></category>

		<guid isPermaLink="false">http://www.rutarelativa.com/?p=746</guid>
		<description><![CDATA[Cuando estamos desarrollando un formulario web uno de los campos que normalmente requerimos es la introducción de una fecha. Nos encontramos con el problema de validar la fecha, para que el usuario la introduzca de forma correcta, pero también necesitamos que dicha introducción sea intuitiva y fácil. Si estamos pidiendo una fecha, ¿que mejor que [...]]]></description>
			<content:encoded><![CDATA[<p>Cuando estamos <strong>desarrollando un formulario web</strong> uno de los campos que normalmente requerimos es la introducción de una fecha. Nos encontramos con el problema de <strong>validar la fecha</strong>, para que el usuario la introduzca de forma correcta, pero también necesitamos que dicha introducción sea intuitiva y fácil.</p>
<p>Si estamos pidiendo una fecha, ¿que mejor que un <strong>calendario donde el usuario pueda seleccionarla</strong>?. Os traemos una <strong>caja de texto con calendario en Javascript y Mootools</strong> para hacer mejor esta labor:</p>
<p><span id="more-746"></span></p>
<p><img width="560" height="251" alt="Caja de texto con calendario en Javascript y Mootools" src="http://www.images.rutarelativa.com/caja-texto-calendario-javascript-mootools-1.gif" /></p>
<h3>Descripción de Mootools Calendar</h3>
<p><strong>Caja de texto con calendario para formulario</strong> desarrollado en Javascript y con la librería <a href="http://mootools.net/" title="Mootools Librería Javascript" rel="external nofollow">Mootools</a>. Útil para la introducción de una fecha en un formulario web de forma fácil e intuitiva.</p>
<h3>Requisitos de Mootools Calendar</h3>
<p>El calendario requiere tener Mootools 1.1 con las clases <strong>Fx.Style, Element y Window</strong>. Si queremos activar el drag requeriremos también de la clase Drag de Mootools.</p>
<h3>Ejemplo de instalación sencilla</h3>
<p>Os propondremos una forma de instalar fácilmente, pero si necesitáramos indagar un poco más y hacer uso de todas las funcionalidades lo mejor sería visitar la web del autor (en la sección de enlaces del artículo tenéis los enlaces al calendario y su instalación).</p>
<p>En primer lugar deberemos de añadir los archivos de Javascript tanto de Mootools como del calendario de esta forma:</p>
<pre><code>&lt;head&gt;
  ...
  &lt;script type=&quot;text/javascript&quot; src=&quot;mootools.js&quot;&gt;&lt;/script&gt;
  &lt;script type=&quot;text/javascript&quot; src=&quot;calendar.js&quot;&gt;&lt;/script&gt;

&lt;/head&gt;&lt;/code&gt;</pre>
<p>A continuación añadimos en nuestro formulario un campo que hará de caja de texto donde recibirá la fecha que el usuario tendrá que introducir. Lo haremos de la siguiente forma:</p>
<pre><code>&lt;input id=&quot;date&quot; name=&quot;date&quot; type=&quot;text&quot; /&gt;</code></pre>
<p>Finalmente crearemos una instancia de la clase Calendar de la siguiente forma:</p>
<pre><code>&lt;head&gt;
  ...
  &lt;script type=&quot;text/javascript&quot;&gt;
    window.addEvent(&quot;domready&quot;, function() { myCal = new Calendar({ date: &quot;d/m/Y&quot; }); });
  &lt;/script&gt;
&lt;/head&gt;</code></pre>
<p>Ya podremos disfrutar de nuestro calendario en nuestro formulario y de la forma más sencilla. Para ampliar cualquier información visita la web del desarrollador.</p>
<p>Enlace: <a href="http://www.electricprism.com/aeron/calendar/" title="Caja de texto con calendario en Javascript y Mootools" rel="external nofollow">Caja de texto con calendario en Javascript y Mootools</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.rutarelativa.com/desarrollo/caja-texto-calendario-javascript-mootools/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iDk Informática: Páginas web económicas y profesionales</title>
		<link>http://www.rutarelativa.com/desarrollo/idk-informatica-paginas-web-economicas-profesionales/</link>
		<comments>http://www.rutarelativa.com/desarrollo/idk-informatica-paginas-web-economicas-profesionales/#comments</comments>
		<pubDate>Mon, 18 Oct 2010 10:15:40 +0000</pubDate>
		<dc:creator>Sergiocius</dc:creator>
				<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[iDk Informática]]></category>
		<category><![CDATA[Web]]></category>
		<category><![CDATA[Desarrollo de página web]]></category>
		<category><![CDATA[Desarrollo Web]]></category>
		<category><![CDATA[Página web económica]]></category>
		<category><![CDATA[Página web económica y profesional]]></category>
		<category><![CDATA[Página web gratis]]></category>
		<category><![CDATA[Página web gratuita]]></category>
		<category><![CDATA[Páginas web]]></category>
		<category><![CDATA[Páginas web económicas]]></category>
		<category><![CDATA[Páginas web económicas y profesionales]]></category>
		<category><![CDATA[Páginas web gratis]]></category>
		<category><![CDATA[Web económica]]></category>
		<category><![CDATA[Web gratuita]]></category>

		<guid isPermaLink="false">http://www.rutarelativa.com/?p=728</guid>
		<description><![CDATA[iDk Informática es nuestro nuevo proyecto personal, el resultado de nuestra experiencia profesional desarrollando páginas web y os la queremos presentar y comentar los aspectos que la componen. Se trata de una web donde puedes contratar nuestros servicios para desarrollar páginas web económicas y profesionales, en la que contamos con una serie de paquetes y [...]]]></description>
			<content:encoded><![CDATA[<p><strong>iDk Informática</strong> es nuestro nuevo proyecto personal, el resultado de <strong>nuestra experiencia profesional desarrollando páginas web</strong> y os la queremos presentar y comentar los aspectos que la componen.</p>
<p>Se trata de una web donde puedes contratar nuestros servicios para <strong>desarrollar páginas web económicas y profesionales</strong>, en la que contamos con una serie de paquetes y ofertas que pasamos a comentar a continuación:
</p>
<p><span id="more-728"></span></p>
<p><img width="560" height="603" alt="iDk Informática: Páginas web económicas y profesionales" src="http://www.images.rutarelativa.com/idk-informatica-paginas-web-economicas-profesionales-1.gif" /></p>
<p>Nuestros tres servicios y paquetes principales son:</p>
<h3>Página web administrable totalmente gratis</h3>
<p>El desarrollo e implementación de la <strong>página web es totalmente gratuito</strong>, pagando sólo las mensualidades correspondientes al <a href="http://es.wikipedia.org/wiki/Alojamiento_web" title="¿Qué es un hosting?. Wikipedia." rel="external nofollow">hosting</a> y <a href="http://es.wikipedia.org/wiki/Dominio_de_Internet" title="¿Qué es un dominio?. Wikipedia." rel="external nofollow">dominio</a>. Hemos desarrollado un potente <a href="http://es.wikipedia.org/wiki/Sistema_de_gesti%C3%B3n_de_contenidos" title="iDk Informática: Páginas web económicas y profesionales" rel="external nofollow">Sistema de gestión de contenidos (CMS)</a> el cual tenemos en constante revisión y actualización para que nuestros clientes estén siempre a la última versión de nuestro software sin requerir ingresos adicionales.</p>
<p>Las ventajas de este paquete son muchas, pero cabe destacar que el <strong>desarrollo de la página web es gratis</strong>; la web es superadministrable y por lo tanto puedes hacer y tener muchas cosas y elementos que, en el caso de no usarlos, no consumirá recursos de más; siempre estará la <strong>web actualizada</strong>, con <strong>mejoras en seguridad</strong>, funciones opcionales que vamos añadiendo, y demás; puedes escoger entre una gran cantidad de <strong>diseños para tu web</strong> o pedir que diseñemos uno específico para tu sitio.</p>
<h3>Comercio electrónico online totalmente gratis</h3>
<p>Al igual que el <strong>paquete CMS</strong>, nuestro paquete para <strong>Comercios electrónicos online es totalmente gratuito</strong>, pagando sólo las mensualidades correspondientes al <a href="http://es.wikipedia.org/wiki/Alojamiento_web" title="¿Qué es un hosting?. Wikipedia." rel="external nofollow">hosting</a> y <a href="http://es.wikipedia.org/wiki/Dominio_de_Internet" title="¿Qué es un dominio?. Wikipedia." rel="external nofollow">dominio</a>. El Comercio electrónico será gestionado por <a href="http://www.magentocommerce.com/es" title="Comercio electrónico online con Magento" rel="external nofollow">Magento</a>, un potente <a href="http://es.wikipedia.org/wiki/Sistema_de_gesti%C3%B3n_de_contenidos" title="iDk Informática: Páginas web económicas y profesionales" rel="external nofollow">Sistema de gestión de contenidos (CMS)</a> especializado en Comercios electrónicos que cuenta con miles de usuarios en todo el mundo.</p>
<p>Para destacar las ventajas de este paquete, entre otras cosas tendría que comentar que el <strong>desarrollo de la página web es gratis</strong>; Magento, al ser usado por miles de usuarios, es un <strong>sistema depurado y prácticamente libre de fallos</strong> y problemas; le proporcionamos su <strong>Comercio electrónico online totalmente funcional y listo para que los clientes entren en su tienda online</strong>; puedes escoger entre una gran cantidad de <strong>diseños para tu web</strong> o pedir que diseñemos uno específico para tu sitio.</p>
<h3>Página web a medida económica y profesional</h3>
<p>Para aquellos clientes que buscan una respuesta más específica, personal y a medida contamos con un servicio para desarrollar la <strong>página web a medida económica y profesional</strong> que nuestro cliente necesite. Atenderemos, asesoraremos y trabajaremos según las necesidades del cliente, trabajando en todo momento para cubrir las espectativas y necesidades en lo referente a la introducción de nuestro cliente en el mundo online.</p>
<p>Por supuesto <strong>ofrecemos precios económicos sin escatimar en profesionalidad y buenos resultados</strong>, ya que nuestro principal objetivo no es desarrollar páginas web sin más, sino que a nuestros clientes les sea <strong>útil y de provecho contar con una página web en el mercado online</strong>.</p>
<p>Estos son los servicios que destacamos, y os recomendamos que, al visitar la web de iDk Informática, hagáis hincapié en nuestro <a href="http://www.idkinformatica.com/portafolio/" title="Portafolio iDk Informática: Páginas web económicas y profesionales">portafolio</a> para conocer nuestros trabajos y experciencia profesional y en nuestra sección <a href="http://www.idkinformatica.com/conocenos/" title="Conoce a iDk Informática: Páginas web económicas y profesionales">sobre nosotros</a> para conocernos un poco más.</p>
<p>Enlace: <a href="http://www.idkinformatica.com/" title="iDk Informática: Páginas web económicas y profesionales">iDk Informática: Páginas web económicas y profesionales</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.rutarelativa.com/desarrollo/idk-informatica-paginas-web-economicas-profesionales/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Usar Google Translate con PHP y Python</title>
		<link>http://www.rutarelativa.com/desarrollo/usar-google-translate-php-python/</link>
		<comments>http://www.rutarelativa.com/desarrollo/usar-google-translate-php-python/#comments</comments>
		<pubDate>Mon, 28 Jun 2010 13:19:33 +0000</pubDate>
		<dc:creator>Sergiocius</dc:creator>
				<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[Codigo]]></category>
		<category><![CDATA[Español]]></category>
		<category><![CDATA[Función]]></category>
		<category><![CDATA[Google Translate]]></category>
		<category><![CDATA[Ingles]]></category>
		<category><![CDATA[Php]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Script]]></category>
		<category><![CDATA[Texto]]></category>
		<category><![CDATA[Traduccion]]></category>
		<category><![CDATA[Web]]></category>

		<guid isPermaLink="false">http://www.rutarelativa.com/?p=662</guid>
		<description><![CDATA[Google Translate es una potente herramienta de traducción de Google que, aunque puede tener sus más y sus menos a la hora de traducir, es una muy buena alternativa de traducción de texto. Nos puede resultar útil adaptarlo en algún proyecto en PHP o en Python, de modo que os voy a dar una función [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Google Translate</strong> es una potente <strong>herramienta de traducción de Google</strong> que, aunque puede tener sus más y sus menos a la hora de traducir, es una muy <strong>buena alternativa de traducción de texto</strong>.</p>
<p>Nos puede resultar útil adaptarlo en algún <strong>proyecto en PHP</strong> o en <strong>Python</strong>, de modo que os voy a dar una <strong>función para traducir un texto con Google Translate en PHP y en Python</strong>:</p>
<p><span id="more-662"></span></p>
<h3>Función para usar Google Translate con PHP</h3>
<pre><code>&lt;?php

function translate($sTexto)
{
	// Variables
	$sTraduct = NULL;
	$aMatch = NULL;

	// Realizamos una peticion para obtener el texto traducido
	$sTraduct = file_get_contents( 'http://ajax.googleapis.com/ajax/services/language/translate?v=1.0&amp;q=' . rawurlencode( $sTexto ) . '&amp;langpair=' . rawurlencode( 'en|es' ) );

	// Si hemos obtenido correctamente el texto traducido lo retornamos
	if( preg_match( &quot;/{&quot;translatedText&quot;:&quot;([^&quot;]+)&quot;/i&quot;, $sTraduct, $aMatch ) )
		return $aMatch[1];

	return $sTexto;
}

?&gt;</code></pre>
<h3>Función para usar Google Translate con Python</h3>
<pre><code>import simplejson

def traduct(sTexto):
	# Variables
	aJson = None

	# Traducimos
	aJson = simplejson.load( urllib.urlopen( '%s' % ( 'http://ajax.googleapis.com/ajax/services/language/translate' ), data = urllib.urlencode( ( { 'langpair':'en|es', 'v':'1.0', 'q':sTexto } ) ) ) )
	try:
		return self.setUTF8( aJson['responseData']['translatedText'] )
	except:
		return sTexto</code></pre>
<p>En ambas funciones podemos enviar el texto que será traducido por defecto del Inglés al Español, pero podemos cambiarlo donde indica <em>&#8216;langpair&#8217;</em> especificando el idioma original al idioma traducido. Si el proceso genera alguna excepción devolverá el texto original.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.rutarelativa.com/desarrollo/usar-google-translate-php-python/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Escribir un post en Blogger usando cUrl y PHP</title>
		<link>http://www.rutarelativa.com/desarrollo/escribir-post-blogger-usando-curl-php/</link>
		<comments>http://www.rutarelativa.com/desarrollo/escribir-post-blogger-usando-curl-php/#comments</comments>
		<pubDate>Wed, 23 Jun 2010 17:12:00 +0000</pubDate>
		<dc:creator>Sergiocius</dc:creator>
				<category><![CDATA[Blogosfera]]></category>
		<category><![CDATA[Desarrollo]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[Blog]]></category>
		<category><![CDATA[Blogger]]></category>
		<category><![CDATA[Blogging]]></category>
		<category><![CDATA[Clase]]></category>
		<category><![CDATA[Codigo]]></category>
		<category><![CDATA[cUrl]]></category>
		<category><![CDATA[Descarga]]></category>
		<category><![CDATA[Escribir]]></category>
		<category><![CDATA[Fuente]]></category>
		<category><![CDATA[Google]]></category>
		<category><![CDATA[Php]]></category>
		<category><![CDATA[Post]]></category>
		<category><![CDATA[Usando]]></category>

		<guid isPermaLink="false">http://www.rutarelativa.com/?p=658</guid>
		<description><![CDATA[Blogger es la red de blogging adquirida por Google en la que, en unos pocos pasos, podemos tener nuestro propio blog de calidad sin conocimientos previos de programación. Hay ocasiones en las que nos es útil poder postear automáticamente en nuestro blog tras realizar acciones, por ejemplo si tenemos una tienda online y nos gustaría [...]]]></description>
			<content:encoded><![CDATA[<p>Blogger es la <strong>red de blogging</strong> adquirida por Google en la que, en unos pocos pasos, podemos <strong>tener nuestro propio blog de calidad</strong> sin conocimientos previos de programación.</p>
<p>Hay ocasiones en las que nos es útil poder <strong>postear automáticamente</strong> en nuestro blog tras realizar acciones, por ejemplo si tenemos una tienda online y nos gustaría indicar que cierto producto interesante vuelve a tener stock por fin. Para ello he desarrollado una <strong>clase para poder escribir un post en Blogger usando cUrl y PHP</strong>.</p>
<p><span id="more-658"></span></p>
<p>He querido hacer el proceso lo más sencillo posible, es decir, que con pocas líneas de código podamos <strong>postear en Blogger</strong> sin mayor problema. Paso a continuación a mostrar el código fuente (al final del artículo puedes <strong>descargar la clase de postear en Blogger con cUrl y PHP</strong>) y explicar su funcionamiento:</p>
<h3>Blogger.class: Clase para escribir un post en Blogger usando cUrl y PHP</h3>
<pre><code>&lt;?php

class blogger
{
private $FBlogID;
private $FUser;
private $FPass;
private $FAuth;

/**
* Construimos la clase. Pasamos como primer argumento el ID de nuestro Blog en Blogger.
*
* @param string $sBlogID
*
*/
public function __construct($sBlogID)
{
$this-&gt;FBlogID = $sBlogID;
}

public function setBlogID($sBlogID)
{
$this-&gt;FBlogID = $sBlogID;
}

public function setUser($sUser)
{
$this-&gt;FUser = $sUser;
}

public function setPass($sPass)
{
$this-&gt;FPass = $sPass;
}

public function setAuth($sAuth)
{
$this-&gt;FAuth = $sAuth;
}

public function getBlogID()
{
return $this-&gt;FBlogID;
}

public function getUser()
{
return $this-&gt;FUser;
}

public function getPass()
{
return $this-&gt;FPass;
}

public function getAuth()
{
return $this-&gt;FAuth;
}

/**
* Hacemos login con nuestra cuenta de Google
*
* @param string $sUser
* @param string $sPass
*
*/
public function login($sUser = false, $sPass = false)
{
// Variables
$cUrl = curl_init();
$aAuth = NULL;

// Asignamos variables
$this-&gt;FUser = $sUser;
$this-&gt;FPass = $sPass;

// Preparamos conexion
curl_setopt( $cUrl, CURLOPT_URL, 'https://www.google.com/accounts/ClientLogin' );
curl_setopt( $cUrl, CURLOPT_HEADER, false );
curl_setopt( $cUrl, CURLOPT_FOLLOWLOCATION, true );
curl_setopt( $cUrl, CURLOPT_RETURNTRANSFER, true );
curl_setopt( $cUrl, CURLOPT_SSL_VERIFYPEER, false );
curl_setopt( $cUrl, CURLOPT_POST, true );
curl_setopt( $cUrl, CURLOPT_POSTFIELDS, array( 'accountType' =&gt; 'GOOGLE', 'Email' =&gt; $this-&gt;FUser, 'Passwd' =&gt; $this-&gt;FPass, 'source' =&gt; 'blogger.class', 'service' =&gt; 'blogger' ) );

// Conectamos y obtenemos el resultado
$aAuth = curl_exec( $cUrl );

// Cerrar cURL
curl_close( $cUrl );

// Obtenemos el codigo de autenticacion
preg_match( '/Auth\=(?&lt;auth&gt;.+)$/i', $aAuth, $aAuth );
if( key_exists( 'auth', $aAuth ) )
$this-&gt;FAuth = $aAuth['auth'];
// Si no ha sido posible lanzamos excepcion
else
throw new Exception( 'Error en login. ¿Usuario o contraseña incorrecto?' );
}

/**
* Posteamos una entrada
*
* @param string $sTitle
* @param string $sBody
* @param string $sTags
* @param string $sDate (dd/mm/yy)
* @param string $sTime (hh:mm)
* @param boolean $bComments
*
*/
public function post($sTitle, $sBody, $sTags, $sDate = false, $sTime = false, $bComments = true)
{
// Variables
$cUrl = NULL;
$dDoc = NULL;
$sHtml = NULL;
$aInputs = NULL;
$nInputs = NULL;
$sSecurityToken = false;

// Obtenemos el securityToken
$cUrl = curl_init();
curl_setopt( $cUrl, CURLOPT_URL, 'http://www.blogger.com/post-create.g?blogID=' . $this-&gt;FBlogID );
curl_setopt( $cUrl, CURLOPT_HEADER, false );
curl_setopt( $cUrl, CURLOPT_HTTPHEADER, array( 'Authorization: GoogleLogin auth=' . $this-&gt;FAuth ) );
curl_setopt( $cUrl, CURLOPT_FOLLOWLOCATION, true );
curl_setopt( $cUrl, CURLOPT_RETURNTRANSFER, true );

// Conectamos y obtenemos el resultado
$sHtml = curl_exec( $cUrl );

// Cerrar cURL
curl_close( $cUrl );

// Obtenemos el securityToken
$dDoc = new DOMDocument();
$dDoc-&gt;loadHtml( $sHtml );

$aInputs = $dDoc-&gt;getElementsByTagName( 'input' );
$nInputs = $aInputs-&gt;length;

for( $nCont = 0; $nCont &lt; $nInputs; ++$nCont )
{
if( $aInputs-&gt;item( $nCont )-&gt;getAttribute( 'name' ) == 'securityToken' )
{
$sSecurityToken = $aInputs-&gt;item( $nCont )-&gt;getAttribute( 'value' );
break;
}
}

// Lanzamos excepcion si no se ha podido obtener el securityToken
if( $sSecurityToken === false )
throw new Exception( 'No se ha podido obtener el securityToken. Reintenta el logueo.' );

// Posteamos
$cUrl = curl_init();
curl_setopt( $cUrl, CURLOPT_URL, 'http://www.blogger.com/post-create.do' );
curl_setopt( $cUrl, CURLOPT_HEADER, false );
curl_setopt( $cUrl, CURLOPT_HTTPHEADER, array( 'Authorization: GoogleLogin auth=' . $this-&gt;FAuth ) );
curl_setopt( $cUrl, CURLOPT_FOLLOWLOCATION, true );
curl_setopt( $cUrl, CURLOPT_RETURNTRANSFER, false );
curl_setopt( $cUrl, CURLOPT_POST, true );
curl_setopt( $cUrl, CURLOPT_POSTFIELDS, array(
'blogID' =&gt; $this-&gt;FBlogID,
'title' =&gt; $sTitle,
'postBody' =&gt; $sBody,
'postLabels' =&gt; $sTags,
'postDate' =&gt; ($sDate === false ? date( 'd/m/y' ) : $sDate),
'postTime' =&gt; ($sTime === false ? date( 'H:i' ) : $Time),
'commentsMode' =&gt; ($bComments === true ? 'ON' : 'OFF'),
'securityToken' =&gt; $sSecurityToken )
);

// Posteamos
curl_exec( $cUrl );

// Cerrar cURL
curl_close( $cUrl );
}
}
?&gt;</code></pre>
<h3>Blogger.class: Ejemplo de como escribir un post en Blogger usando cUrl y PHP</h3>
<pre><code>
&lt;?php

require 'blogger.class.php';

// Nueva instancia de la clase pasando como argumento el ID del blog
$b = new blogger( 'ID' );

// Nos logueamos en nuestra cuenta de Google con nuestras credenciales
$b->login( 'usuario', 'contraseña' );

// Enviamos un post
$b-&gt;post( 'Posteando desde la clase blogger.class de Ruta Relativa', 'Hola, estoy escribiendo un interesante post desde la clase blogger.class de Ruta Relativa.', 'post, api, blogger, class, ruta relativa' );

// Liberamos
unset( $b );

?&gt;</code></pre>
<p>Como vemos en el código de ejemplo, primero debemos de incluir la <strong>clase Blogger.class</strong>. Luego deberemos de crear una instancia de la clase blogger pasándole como argumento el ID de tu blog de Blogger. Luego llamamos al método login con el que nos loguearemos en nuestra cuenta de Google pasando como argumentos nuestro usuario y contraseña. El siguiente paso sería enviar el post pasando como argumentos el título del post, el cuerpo del post, los tags (separados por comas), la fecha (una cadena con formato dd/mm/yy), la hora (con formato (hh:mm) y por útimo un booleano indicando si permitimos o no los comentarios en la entrada.</p>
<p>Esperamos que os sea de utilidad para vuestros proyectos y podáis sacarle rendimiento. Para cualquier duda o sugerencia no dudéis en dejar comentarios.</p>
<p>Descarga: <a title="Escribir un post en Blogger usando cUrl y PHP" rel="external nofollow" href="http://www.rutarelativa.com/files/blogger.class.zip">Descargar Blogger.class: Clase para escribir un post en Blogger usando cUrl y PHP</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.rutarelativa.com/desarrollo/escribir-post-blogger-usando-curl-php/feed/</wfw:commentRss>
		<slash:comments>22</slash:comments>
		</item>
	</channel>
</rss>

