Archive for month: October, 2009

Parser RSS con PHP

Categories: PHP - Tags: ,

Tal vez el título no te suene a nada y si te digo que un parser es un módulo que sirve para hacer el parseo imagino que suena a chino; pero es más simple de lo que parece.

El parseo sirve para convertir una entrada de texto en un conjunto de datos que pueda ser procesado, llevado al tema de RSS este no es más que un archivo XML con una estructura ya establecida y delimitada que vamos a convertir en un array para poder manejarlo con esto podriamos por ejemplo:

  • Mostrar miniposts de twitter en nuestra página web PHP
  • Mostrar noticias de una web externa en la nuestra y que se actualicen automaticamente
  • Mostrar los últimos post de cualquier blog
  • Finalmente mostrar cualquier información de RSS en nuestra página web con el formato que deseemos

Implementado el parser

Lo bueno es que no nos vamos a romper la cabeza inventando un parser sólo vamos a implementar una clase ya diseñada para dicho fin, en este caso probemos con lastRSS y quedaría nuestro código de la siguiente forma:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?php

// Incluimos lastRSS.php
include './lastRSS.php';

// Damos la ruta de nuestra fuente RSS
$url_flux_rss = 'http://www.pcinpact.com/include/news.xml';
$limite       = 10; // nombre d'actus à afficher

// Creamos el objeto lastRSS
$rss = new lastRSS;

// Configuramos lastRSS
$rss->cache_dir   = './cache'; // carpeta del cache
$rss->cache_time  = 3600;      // frecuencia del cache (en segundos)
$rss->date_format = 'd/m';     // formato de fecha (basado en la funcion date() )
$rss->CDATA       = 'content'; // retiro de la etiqueta CDATA

// leemos la fuente RSS
if ($rs = $rss->get($url_flux_rss))
{
  for($i=0;$i<$limite;$i++)
  {
    // Mostramos los datos
    echo '<strong>'.$rs['items'][$i]['pubDate'].'</strong> &middot; <a href="'.$rs['items'][$i]['link'].'">'.$rs['items'][$i]['title'].'</a><br />';
  }
}
else
{
  die ('RSS no funka');
}

?>

Como vemos es muy simple ya que la clase se encarga de la parte complicada, podriamos darle el formato que quisieramos modificando esta linea:

1
echo '<strong>'.$rs['items'][$i]['pubDate'].'</strong> &middot; <a href="'.$rs['items'][$i]['link'].'">'.$rs['items'][$i]['title'].'</a><br />';

Podriamos usar h1, h2, p, ul, li… y asi darle un mejor formato al resultado obtenido.

HTML 5 el futuro de la web

Categories: html, Otros - Tags: ,

Aunque existen diversos lenguajes de programación para servidores como PHP, JSP, ASP y algunos otros menos populares, pero sin importar que lenguaje de programación que utilices lo cierto es que todos muestran resultados en formato HTML en alguna de sus especificaciones, actualmente lo más común es XHTML transitional o strict.

De allí la importancia de conocer HTML en sus diversas variantes, el nuevo HTML 5 además de traer nuevas etiquetas se orientará a convertir nuestras páginas web en aplicaciones que funcionen como aplicaciones de escritorio allí radica la importancia des este nuevo HTML5.

¿Qué hay de nuevo en HTML 5?

Rumbo a la web semántica

Existen muchas etiquetas nuevas time, meter, progress, video, audio, details, datagrid, command… esto le dará más sentido a la estructura de la página web y así mejorará considerablemente las busquedas.

Nuevos elementos estructurales

  • section : Pued ser un capítulo, una sección de un capítulo o básicamente cualquier cosa que incluya su propio encabezamiento.
  • header : La cabecera de una página.
  • footer : El final de la página.
  • nav : Una colección de links a otras páginas
  • article : Una entrada independiente en un blog, revista, etc.

Recordemos que hasta ahora se usaban diversos div para representar cada una de estas areas.

Canvas

Este es un elemento que ya podemos ver funcionando en diversos navegadores (excepto IE claro esta) y que nos permite dibujar sobre un elemento, esto es sumamente util para crear gráficos de barras por ejemplo.

APIS para interfaz de usuario

Está muy de moda usar jquery, mootools, etc para obtener una interfaz de usuario más rica sin embargo HTML 5 incluirá su propia API para reemplazar funciones como drag and drop entre otras.

Aplicaciones web offline

El futuro del internet son las aplicaciones en la nube (google ya brinda servidores para este fin), de ahí el surgimiento de las netbooks asi que este nuevo HTML5 permitirá disfrutar de estas aplicaciones sin conexión a Internet.

¿Y cuándo se implementará?

Bueno esa es una pregunta dificil ya que hay varios factores a considerar, oficialmente debería estar en 2012 sin embargo varios modernos navegadores ya incluyen un buen soporte de las principales características de HTML5 pero recordemos que IE aún esta muy lejos del resto y siendo el navegador con más mercado esperemos que un futuro IE9 tenga un soporte adecuado de HTML 5 para que podamos finalmente usarlo. Para los que puedan pensar que soy pesimista piensen cuanto demoró IE en soportar adecuadamente CSS2 (aún no llega ni al 20% de CSS3) y cuanto en respetar medianamente estándares(desde IE6 a IE8)

Fotomanipulación eliminar arrugas

Categories: Diseño, photoshop - Tags: ,

Es muy común editar fotos en Photoshop para borrar manchas, lunares, etc pero muchas veces los clientes quieren que además eliminemos algunas arrugas o a quien no le gustaría lucir esa piel que se ve en las revistas de modas bueno voy a explicar como lograr esto y además tener un control sobre el área que deseamos sea afectada esto para no terminar con una foto demasiado irreal.

Este tutorial lo voy a realizar usando Photoshop CS4 pero los trucos aquí mostrados funcionan bien desde Photoshop CS.

Suavizando la piel

Lo primero es duplicar la capa en la que tenemos nuestra foto, luego aplicamos el filtro polvo y manchas (dust and scratches), no nos preocupemos si la imagen parece que esta un poco borrosa ya que eso luego vamos a arreglarlo luego; posteriormente aplicamos el filtro Blur/Gaussian Blur con un valor entre 1 a 1.5 px como en la imagen.

suavizando la piel

suavizando la piel

Aplicando el suavizado en zonas localizadas

Si dejaramos la imagen como esta se vería muy borrosa es por esto que vamos a aplicarla sólo en áreas localizadas, para ello sobre nuestra capa editada le colocamos una máscara de capa: Capa/Mascara de capa/Ocultar todo (Layer/Layer Mask/Hide All) al realizar este paso la capa modificada quedará oculta luego cogemos un pincel suavizado de tamaño mediano unos 40px de diámetro al 20% de dureza puede ser suficiente y pintamos sobre nuestra máscara con un pincel blanco esto permitirá que sólo determinadas areas se vean afectadas como vemos en la figura.

Usando la máscara de capa

Usando la máscara de capa

Resultado final

Usando esta imagen de capa podemos hacer muchas cosas más como cambiar el color de los ojos por ejemplo, veamos ahora el resultado final

suavizar piel photoshop

suavizar piel photoshop

Agregar campos usando AJAX jquery

Categories: AJAX, javascript - Tags: , ,

Seguro hemos visto algunas páginas ajax en las que piden por ejemplo correo luego podemos apretar un botón “añadir” y se agrega un campo más para insertar un nuevo correo y asi cuantos deseemos; también hay algunos más complicados en los que puedes añadir por ejemplo detalles de tu experiencia laboral en un curriculum.

La idea es los casos mencionados es exactamente la misma (campos mas, campos menos) por cuestión de espacio y tiempo explicaré como funciona la más sencilla para ello debemos tener claros algunos conceptos previos.

Arrays de controles HTML

Como no sabemos cuantos campos quiera añadir el usuario, debemos estar preparados para recibir cualquier cantidad de datos por lo cual vamos a usar un array de controles como este:

1
<input type="text" size="20" name="email[]">

Lo unico distinto con cualquier otro control es que al final del nombre uso unos corchetes.

Manejando arrays de controles con PHP

Normalmente en PHP los campos recibidos llegan con POST o GET según corresponda y podemos manejarlo directamente pero con los arrays se manejan un poco distinto, algo así:

1
2
3
4
5
6
<?php
$emails=$_POST['email'];
for ($i=0; $i<=count($emails); $i++) {
    echo $emails[$i].'<br>';
}
?>

¿Cómo agregar campos?

Para esto voy a usar un link que invoque a una funcion javascript que agrega el campo adicional

1
<a href="#" onclick="agregar();">Agregar</a>

La función usando jquery es muy sencilla basta usar “attend” para que al final agregue un campo adicional

1
2
3
4
5
6
<script type="text/javascript">
function agregar() {
    campo = '<li><label>Email:</label><input type="text" size="20" name="email[]" /></li>';
    $("#emails").append(campo);
}
</script>

El tema de la presentación o de usar alguna imagen ya depende de nuestra hoja de estilos aunque en este ejemplo he usado un sólo campo es posible usando el mismo código para añadir bloques completos de campos.

Ver demo   Descargar

——– Actualización ——-
Varios lectores me preguntaban como hago para borrar los campos ingresado, eso lo ven AQUI

Como enviar correos usando PHP

Categories: PHP - Tags:

Enviar correos con PHP es una de las cosas más comunes de hacer con PHP ya sea para enviar formularios de contacto, enviar correos para verificar el correo del usuario, enviar notificaciones y un largo etc.

La forma más sencilla de enviar correos es con una simple línea de código usando el comando mail de PHP el problema es que aunque funciona lo más probable es que nuestro correo llegará no sólo a la carpeta de no deseados sino que gmail o hotmail lo pondrán con unos mensajes de advertencia que espantarán a cualquier usuario.

Un último aspecto que debemos considerar es que desde localhost no se pueden enviar correos ya que ningun paquete como wamp, xamp, appserve u otro instalan un servidor de correo (ya queda a criterio de cada uno montar el suyo).

Envio simple de correo

Esta línea permite enviar un correo de la forma más simple

1
2
3
4
/// nuestro mensaje
$message = "Este es el cuerpo de nuestro correo";
/// enviar mail
mail('usuario@mail.com', 'Mi subject', $message);

Este comando mail tiene muchisimos parámetros más, especialmente en cuanto a encabezados(headers), archivos adjuntos, enviar correos HTML etc.

Enviar un correo usando PHPMailer

Como dije antes el comando mail tiene muchisimos parámetros adicionales pero salvo que tengamos conocimientos avanzados suele ser un tanto complicado usarlo por lo que recomiendo una clase llamada PHPMailer que nos haga la vida más simple, la pueden bajar AQUI

Veamos ahora un ejemplo de envío de correo usando esta clase

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?php
// Incluimos la clase
require_once('class.phpmailer.php');
$mail             = new PHPMailer(); // creamos el nuevo objeto
/// cogemos el mensage de un archivo html
$body             = file_get_contents('contents.html');
$body             = eregi_replace("[\]",'',$body);
/// indicamos quien lo envia
$mail->SetFrom('name@yourdomain.com', 'First Last');
/// con copia a
$mail->AddReplyTo("name@yourdomain.com","First Last");
/// el mensaje es para
$address = "whoto@otherdomain.com";
$mail->AddAddress($address, "John Doe");
/// titulo o subject
$mail->Subject    = "PHPMailer Test Subject via mail(), basic";
/// si no tienes un correo HTML
$mail->AltBody    = "To view the message, please use an HTML compatible email viewer!"; // optional, comment out and test
/// asignamos el mensaje
$mail->MsgHTML($body);
/// agregamos 2 archivos adjuntos
$mail->AddAttachment("images/phpmailer.gif");      // attachment
$mail->AddAttachment("images/phpmailer_mini.gif"); // attachment
/// finalmente lo enviamos
if(!$mail->Send()) {
  echo "Mailer Error: " . $mail->ErrorInfo;
} else {
  echo "Message sent!";
}

?>

Esta clase tiene más funciones pero este ejemplo me parece que cubre las principales, para hacerlo funcionar con un formulario bastaría crear dicho formulario con los campos nombre, correo, cuerpo, mensaje y luego en el ejemplo reemplazar con las variables POST que corresponda, por ejemplo en vez de:

1
2
$address = "whoto@otherdomain.com";
$mail->AddAddress($address, "John Doe");

Seria algo como esto

1
2
$address = $_POST['email'];
$mail->AddAddress($address, $_POST['nombre']);