jueves, 29 de setiembre de 2011

ASP.NET - Recuperar la imagen del dia

Muchos sitios web muestran diariamente una foto, la cual la titulan como La imagen del día o la Foto del día.
Y en varias ocasiones, se requiere recuperar esta imagen, pero de manera automatizada. Dado que este blog trata sobre todo de tecnología .NET especialmente web, demostraremos cómo realizar este proceso desde una página ASP.NET.
Nosotros vamos a recuperar la foto del día de National Geographic, que cada día muestra una foto impresionante.
Cómo lograremos obtener la foto del día? estos son los pasos:
1.- Necesitamos la url de la página que muestra la foto del día
2.- Recuperaremos todo el contenido html de la página de manera programática
3.- Usaremos un gran componente como es Html Agility Pack para parsear el contenido html y extraer la imagen
4.- Para extraer la imagen, necesitamos saber dentro de cuáles etiquetas está incluído, en mi caso, analizé el código html de dicha url usando la opción Inspeccionar elemento que nos proporciona Google Chrome y encontré que la imagen estaba aquí:
image_of_the_day
Entonces, basado en ese análisis, hice:
1.- Descargué el assembly Html Agility Pack desde http://htmlagilitypack.codeplex.com/, lo puse en la carpeta bin y lo añadí como referencia a mi proyecto
2.- Añadí una página aspx con un control image:
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
    <title>La imagen del día con ASP.NET</title>
    <script type="text/javascript">
    </script>
    <style type="text/css">
        *{ font-family: Trebuchet MS; }
    </style>
</head>
<body>
    <form id="form1" runat="server">
        <h3>Recuperando la imagen del día con ASP.NET</h3>
        <asp:Image ID="Image1" runat="server" />
    </form>
</body>
</html>

3.- Añadí la referencia a la página
using HtmlAgilityPack;
4.- Elaboré el siguiente código C sharp:
protected void Page_Load(object sender, EventArgs e)
{
    string url = "http://photography.nationalgeographic.com/photography/photo-of-the-day/";

    System.Net.WebClient wc = new System.Net.WebClient();
    HtmlDocument doc = new HtmlDocument();
    doc.Load(wc.OpenRead(url));

    HtmlNode img = doc.DocumentNode.SelectSingleNode(@"//div[@class='primary_photo']/a/img");
    if (img != null)
        Image1.ImageUrl = img.Attributes["src"].Value;

}
Así de simple. Uds pueden hacer lo mismo con otros sitios web que muestren una imagen diferente diaria.
Espero que les sea de utilidad Guiño

No hay comentarios.: