Martes, 18 de Septiembre de 2007 por climens

Cambio dinámico de Google API Key

Todo el que haya usado las APIs de Google sabrá que hace falta una API Key para poder usarlas. Esto en principio no es un gran inconveniente pero es realmente molesto que haya que generar una clave por cada dominio que queramos usar, ya que a veces publicamos páginas en más de un dominio a la vez.

Si la página es dinámica, no hay mayor problema: se mira el dominio en alguna variable del servidor que seguro que está a nuestro alcance y se selecciona la API Key correspondiente para usarla en el HTML generado. Hasta aquí ningún problema, pero ¿qué ocurre cuando son páginas estáticas solamente? Pues la cosa se complica.

La primera solución que he probado era usar el DOM para crear un elemento script y meterlo directamente en el head de la página, seleccionando la clave usando document.domain, pero esto no ha resultado: en Internet Explorer no había manera de hacerlo funcionar. No se reconocen las funciones que carga el Javascript de Google internamente. Un desastre....

Pero luego buscando por ahí he descubierto el AJAX API, con lo que se pueden cargar todas las APIs de Google vía código. Y luego buscando por los foros, una función no documentada: .ApiKey, que permite seleccionar la clave a posteriori. Así que ya lo tenía todo y me he puesto manos a la obra:

 
 
var key = '';
 
switch(document.domain)
{
    case 'www.dominio1.com':
        key = 'ABQIAA....';
        break;
    case 'www.dominio1.biz':
        key = 'ABQIAB....';
        break;
}
 
google.loader.ApiKey = key;
google.loader.KeyVerified = true;   // por asegurarnos
google.loader.LoadFailure = false;  // por asegurarnos
 
google.load("maps", "2.X");
 
google.setOnLoadCallback(load);
 

Primero se selecciona la clave a través de un simple switch y luego se carga la API usando .load. Finalmente se llama a .setOnLoadCallback() indicando la función que se llamará cuando termine la carga de los datos.

Y básicamente eso es todo. Lo he probado en Mozilla y Explorer pero supongo que funcionará en algunos más porque usa código de Google que probablemente es mucho mejor que el mio. De todos modos, como usa una función no oficial de la API, es posible que esta técnica deje de funcionar en el futuro.

Compartir | meneame | fresqui | del.icio.us | digg | technorati
Tags: , , , | 5 comentarios

5 comentarios en “Cambio dinámico de Google API Key”

  1. Franklin comentó el Viernes, 14 de Diciembre de 2007 a las 18:06

    Interesante tu post. Pero podrias ayudarme donde encontrar, o si te puedes dar el tiempo y explicar como conseguir un API key, para que sirve? tengo entendido que tiene relación con los sitemap. Necesito crear un site map, encontre http://www.freesitemapgenerator.com ; ahi me pide el API key, aunque veo que es opcional pero supongo que debe ser mejor. Podrias ayudarme en el tema?

    Por otro lado veo que uno de los problemas de los marketeros y de webmaster es generar claves y administrarlos. Te recomiendo a ojo cerrado el mejor programa, yo lo uso, me ahorra tiempo y me evita perder u olvidar claves. De pronto te interese la version en español: http://www.roboform.com/php/land.php?affid=nefox&frm=frame35

    ES GRATIS por 30 dias PRUEBALO!! No pierdes nada. Si no te gusta lo desinstalas.

  2. climens comentó el Sábado, 15 de Diciembre de 2007 a las 1:30

    En la propia web que comentas aparece la explicación de lo que es la API Key y cómo conseguirla y para qué la usan. Sirve en realidad para acceder a los servicios de Google a través de sus APIs.

    FAQ: http://www.freesitemapgenerator.com/faq.html#faq11
    API Key: http://code.google.com/apis/ajaxsearch/signup.html

    La API key se genera por dominio, una para cada uno.

  3. Deivid comentó el Viernes, 25 de Enero de 2008 a las 13:14

    Es genial funciona correctamente y me ha venido de perlas pero me sale en la página un texto que pone: supongo que se pude quitar ¿no?

  4. Deivid comentó el Viernes, 25 de Enero de 2008 a las 13:15

    Pone esto: “load the Ajax loader w/o API key” no se porque no ha salido antes

  5. Deivid comentó el Viernes, 25 de Enero de 2008 a las 15:49

    Olvidarlo no he dicho nada, soy un zoquete. Lo dicho felicidades por el script

Deja tu comentario