domingo, 10 de mayo de 2009

Como hacer el plugin de un buscador para Firefox.

Cuando te encuentras un servicio de busqueda nuevo o poco conocido una de sus mayores desventajas es que no lo tienes en la caja de busqueda del browser. Esto significa que cada vez que quieres hacer una busqueda tienes que ir al sitio e insertar los terminos en el campo correspondiente. Cuando la busqueda esta integrada con el browser, aprietas Ctrl+K ingresas las palabras en la caja al lado de la barra de direcciones y ya esta.
Así que a fin de no tener que esperar a que aparezca el plugin de busqueda de Scoopler para Firefox decidí que tenía que aprender a hacer uno, y en verdad es sumamente facil.
Lo primero que tienen que saber donde estos se encuentran localizados. Si van a la carpeta C:\Archivos de programa\Mozilla Firefox\searchplugins podran encontrar los plugins de busqueda que tienen instalados. Estos son archivos XML bastante breves y simples así que vamos al grano. Este es el plugin que hice para Scoopler.

<opensearchdescription xmlns="http://a9.com/-/spec/opensearch/1.1/"
moz="http://www.mozilla.org/2006/browser/search/">
<shortname>Scoopler</shortname>
<description>Scoopler Search</description>
<inputencoding>UTF-8</inputencoding>
<Image height="16" width="16">data:image/x-icon;base64,[Imagen en Base64]</Image>
<url type="application/x-suggestions+json" method="GET"
template="http://suggestqueries.google.com/complete/search?output=firefox&client=firefox&hl={moz:locale}&q={searchTerms}" />
<url type="text/html" method="GET" template="http://www.scoopler.com/search/{searchTerms}" />
<moz:searchform>http://www.scoopler.com</moz:searchform>
</opensearchdescription>

Ahora vamos a revisar cada nodo, si no sabes XML aquí tienes un tutorial.

<opensearchdescription xmlns="http://a9.com/-/spec/opensearch/1.1/"
moz="http://www.mozilla.org/2006/browser/search/">
El nodo raiz del XML, copiar y pegar. Si revisan otros plugins de busqueda encontraran que utilizan el nodo <searchplugin xmlns="http://www.mozilla.org/2006/browser/search/"> como nodo raiz. Realmente no encuentro mayor diferencia si ambos funcionan pero si quieres publicar tu plugin en el sitio de los addons de Firefox debe ser opensearchdescription.

<shortname>Scoopler</shortname>
<description>Scoopler Search</description>

<inputencoding>UTF-8</inputencoding>

Creo que estos dos nodos son bastante explicativos: el nombre del plugin y una breve descripción de este.

<Image height="16" width="16">data:image/x-icon;base64,[Imagen en Base64]</Image>
Este nodo tiene la imagen que va a ser el icono que va a aparecer en la caja de busqueda. Reemplacen [Imagen en Base64] por el código en base64 de la imagen que quieren usar. Para obtenerla pueden usar este sitio. También pueden vincular la imagen a través de su URL. Pueden ver más información de este elemento en la documentación de Mozilla.

<url type="application/x-suggestions+json" method="GET"
template="http://suggestqueries.google.com/complete/search?output=firefox&client=firefox&hl={moz:locale}&q={searchTerms}" />
Esta es una linea de código que le pedi prestada al plugin de Google para recibir sugerencias de terminos de busquedas. ¡Que lindo es el opensource! :).

<url type="text/html" method="GET" template="http://www.scoopler.com/search/{searchTerms}" />
Aquí esta toda la magia del plugin. Ingresas {searchTerms} donde deben ir los terminos de busqueda en la URL del sitio. El elemento url permite tener nodos hijos llamados param que son simplemente los argumentos de la URL. Nuevamente pueden encontrar más información sobre este elemento en la documentación de Mozilla.
<moz:searchform>http://www.scoopler.com</moz:searchform>
El último elemento que nos queda por revisar es simplemente un link al sitio del buscador que queda como referencia. Dado que es un nodo propio de Firefox se escribe como moz:searchform.

Y eso es todo, aprovecho la ocasión para recomendar Scoopler, el cual es un buscador en tiempo real que obtiene resultados desde Twitter, Digg, Flickr y Delicious, aunque dicen que van a agregar más sitios. El plugin de Scoopler esta disponible en esta dirección y debería estar pronto a dejar el estado de experimental.