JASoft.org

El blog de José Manuel Alarcón Aguín. Programación web y mucho más...

MENÚ - JASoft: JM Alarcón

¿Tienes un buscador en tu portal? Esto te puede interesar...

Hace unos días me pregunté por curiosidad cómo se podría añadir un determinado buscador a la nueva barra de búsqueda de Internet Explorer 7. Sí, esa que le han copiado descaradamente a Firefox (con la que estos chicos Open Source ganan más de 80 millones de dólares al año) y que, realmente, no sirve de mucho pues puedes hacer las búsquedas igual desde la propia línea de direcciones. El caso es que me llamaba la atención puesto que, si te fijas, puedes hacer que aparezca más de un buscador en ella, aparte del que trae por  defecto (Live Search).

En Krasis hace unos años creamos un índice/buscador especializado en ingeniería llamado Pandeo.com cuyo nombre hace honor a un efecto de resistencia de materiales por el que las columnas esbeltas sometidas a compresión pueden llegar, curiosamente, a estar sometidas a flexión y combarse. Pandeo.com Se trata más de una prueba de concepto y un proyecto de I+D interno que de un producto propiamente dicho, aunque sí que lo hemos licenciado a alguna empresa por ahí. El buscador replica el modo de buscar de Google, "chupa" de Internet los recusos indicados analizando su contenido, generando resúmenes automáticos con lo más relevante, haciendo una caché del cotnenido, etc... Tiene detección automática de idioma para que, a lo que no está en castellano, se le añada automáticamente un enlace que permita traducirlo y algunas cosas curiosas más.

Aprovechando la curiosidad que tengo y que (a las tantas de la mañana) estaba ya un poco saturado del trabajo decidí ponerme a investigar un poquillo y así desestresarme un poco  :-) Bien, resulta que para poder aportar un elemento adicional a la barra de búsquedas de IE7 hay que acogerse a un estándar denominado Open Search que está desarrollado por Amazon.com y su estupendo multibuscador A9 y auspiciado por Microsoft y algunos otros.

Básicamente Open Search consta de dos vertientes: descubrimiento y contenidos. La primera de ellas determina la forma en la que describimos a un buscador para que pueda ser usado por sistemas, como Internet Explorer 7, que quieran hacer uso directo de sus búsquedas. Se trata simplemente de un archivo XML con un determinado esquema que describe esas capacidades y que ahora veremos.
La parte referente a los contenidos indica las pautas a seguir para generar los resultados de las búsquedas de forma que otros programas puedan aprovecharlos para dotarse de contenidos. Esencialmente es una versión aumentada con atributos "extra" del formato RSS, tan de moda últimamente (y que por cierto nuestro producto MAILCast Server lleva soportando casi desde sus inicios, siendo quizá el primero del mercado en hacerlo, al menos en España).

Construyendo la descripción del buscador

Vale, pero ¿cómo le saco provecho yo a esto?. Vayamos por partes... Primeramente vamos a crear un archivo .xml que describa los servicios de nuestro buscador. A continuación muestro, por ejemplo, el que he usado para Pandeo.com:

<?xml version="1.0" encoding="UTF-8"?>
<OpenSearchDescription xmlns="
http://a9.com/-/spec/opensearch/1.1/">
  <ShortName>pandeo.com</ShortName>
  <LongName>pandeo.com - El buscador de los ingenieros</LongName>
  <Description>Índice y buscador especializado en recursos para ingeniería.</Description>
  <Contact>[email protected]</Contact>
  <Tags>buscador, índice, ingenier, recurso, enlace, mecánica, edific, estructura, automo, diseño, material, search, index, engineer, mechanic, structure, resource, design</Tags>
  <Url type="text/html" template="
http://www.pandeo.com/?Search={searchTerms}"/>
  <Image height="16" width="16" type="image/vnd.microsoft.icon">http://www.pandeo.com/favicon.ico</Image>
  <Image height="15" width="32" type="image/png">http://www.pandeo.com/pandeo32x15.png</Image>
  <Image height="31" width="64" type="image/png">http://www.pandeo.com/pandeo_64x31.png</Image>
  <Attribution>Copyright Krasis (
www.krasis.com). All rights reserved.</Attribution>
  <SyndicationRight>open</SyndicationRight>
  <AdultContent>false</AdultContent>
  <Language>es</Language>
  <OutputEncoding>UTF-8</OutputEncoding>
  <InputEncoding>UTF-8</InputEncoding>
</OpenSearchDescription>

Si lo analizamos con detenimiento veremos que es casi obvio lo que significa cada nodo de este XML. De especial importancia es el nodo 'Url' y, en él, los atributos 'type' y 'template'. Este último indica cuál es la URL que debe llamar el programa que desee hacer uso del buscador para lanzar consultas sobre él. Para ello basta con indicar una URL y marcar con el comodín {searchTerms} el lugar en el que se le pasará la cadena de consulta. Obviamente el buscador debe soportar las peticiones mediante el metodo GET de los formularios, es decir, con los parámetros en la propia URL.

El atributo 'type' sí que es especialmente importante. La especificación Open Search no obliga a que nuestro buscador exporte sus resultados al mencionado formato RRS extendido para búsquedas, si no que simplemente puede devolver HTML. Esto sería suficiente para que trabajase con IE7, aunque no para los agregadores de búsquedas, pero centrémonos en lo que nos ocupa, que es el primer caso. Por tanto, si la URL indicada devuelve HTML pondremos "text/html" en el atributo 'type'. Si el buscador soportarse el RSS de Open Search deberíamos poner "application/rss+xml".

He creado también un par de gráficos en dos tamaños para que pueda aparecer bonito en los diferentes agregadores, y los he asignado en los nodos <Image> que aparecen.

Se puede consultar la especificación completa desde OpenSearch 1.1 Draft 3.

Insertándolo en IE7

Al archivo de descripción le he llamado Pandeo_OSD.xml (OSD es de Open Search Description) y lo he colocado en el raíz del buscador. A continuación debo hacer que IE7 o cualquier otro programa agregador compatible con la especificación lo pueda encontrar. Para ello he utilizado en la cabecera de la página principal del buscador una versión especial de la etiqueta HTML <link> que sirve para este propósito y que queda de la siguiente manera:

<link title="Pandeo: búsqueda Open Search" type="application/opensearchdescription+xml" rel="search" href="http://www.pandeo.com/pandeo_OSD.xml" />

Como vemos se indico el nombre que quiero otorgarle en la caja de búsqueda y marco la ruta en la que he almacenado el archivo de descripción.

Nada mas hacer esto, cuyando alguien visita Pandeo.com con IE7 u otro contenedor compatible ve algo como esto:

Como vemos está disponible para la búsqueda desde el cuadro de texto mientras estamos en la propia página (algo, por otra parte muy poco útil pues ya estamos en el propio buscador ¿no?). Pero además, y esto es lo importante, nos ofrece la posibilidad de agregarlo para siempre a la caja de búsqueda de modo que podamos usarlo directamente desde ahí en cualquier momento sin necesidad de visitar el buscador.

Si pulsamos en esta opción el navegador nos pregunta si queremos realmente añadirlo, e incluso si queremos que sea nuestro buscador por defecto:

Voilá!, ya lo hemos conseguido:

Ahora ya tenemos Pandeo.com como un buscador más de la barra de búsqueda. Mola ¿no?

Añadiéndolo de manera programática

Si bien este debería ser el modo más habitual de agregar el buscador, bien es cierto que un usuario normal en raras ocasiones se va a fijar en el detalle de que lo puede agregar desde el menú desplegable de la cajita ¿verdad. Para facilitarles el trabajo sería estupendo poder ofrecerles la posibilidad de añadirlo simplemente pulsando un botón o un enlace de la página, en plan: "Añada Pandeo.com a su caja de búsqueda".

El caso es que IE7 nos lo pone muy fácil también. Dejando a un lado el código necesario para detectar que el navegador del usuario es IE7 para mostrar esta opción sólo cuando sea pertinente, el único código que necesitaremos es el siguiente:

<a Href="#" onClick="window.external.AddSearchProvider('http://www.pandeo.com/Pandeo_OSD.xml');">Añade Pandeo.com a tu caja de búsqueda</a>

Listo. Sólo hay que indicar la ruta de la descripción XML al nuevo método AddSearchProvider de la clase external de la ventana actual del navegador.

Es un tema bastante interesante, sobre todo si implementas la otra parte del estándar, la que permite devolver los resultados como RSS+XML puesto que de ese modo puedes sindicar las búsquedas en agregadores como A9, OSFeed o RSSBandit. Cuando saque un día libre (ciencia ficción) igual implemento esta parte para Pandeo.com y así queda redondo del todo :-)

En fin, que si tienes un buscador, aunque sea sólo para dentro de tu portal, este tema te puede venir de maravilla.

Mañana más...

Quien dice mañana dice pasado, pero el caso es que en breve quiero rematar este asunto con otro tema a mi juicio interesante y, aunque ya más antiguo, relacionado directamente con éste: cómo crear tus propios comandos de búsqueda para la barra de direcciones de modo que pongas, por ejemplo:

PANDEO automoción

y se lance una búsqueda con la palabra "automoción" en Pandeo.com, o bien:

GGL cursos campusMVP

y se abra Google con los resultados de la búsqueda indicada.

Esto es muy útil no sólo para las búsquedas sino también para crear comandos personalizados para lanzar otras URLs.

José Manuel Alarcón
Banner

Agregar comentario