Acceder

Ver la Versión Completa : [ DEBATE ] Google Maps y Http Get


mlesir
17/12/13, 14:19:59
Bueno pues dejarme deciros: Ole mis huevos y lo cabezón que soy!!!

Sin tener ni puñetera idea, de hecho nunca había usado lo del http get he conseguido esto:

Obtener la información de google maps de una ruta de un punto a otro. Toda la información. Desde las indicaciones, hasta el tiempo y distancia que vas a tardar. Eso si en XML. (si alguién va a decir que esto ya estaba muy visto, que seguro que es así, por favor esperaros hasta mañana y dejarme al menos un día para fliparme...jeje).

La mayor parte de la información la he sacado de aquí:

https://developers.google.com/maps/documentation/directions/#Audience

Es la pagina de la API de google.

Os dejo el Http get que yo he usado:

Servidor:Puerto ""https://maps.googleapis.com/maps/api/directions/xml?origin=Barcelona&destination=Madrid&sensor=true"" (sin las comillas y sin el espacio en tru e, os ea true, que no se por que me lo pone???)

Archivo de Salida: result.html

El resto de items en blanco.

Todo esto venía a que siempre había querido saber el nombre de la calle a partir de unas coordenadas. Por ejemplo puede ser útil para saber donde estoy, o para que el perfil de donde esta el coche te diga la calle en vez de mostrarte un mapa.
Supongo que los nombres de las ciudades que he usado se pueden sustituir por coordenadas. Y estas por variables.
No se, le veo muchas posibilidades: por ejemplo que nos muestre simplemente una lista de las indicaciones para ir a un sitio, y nosotros lo mostramos a nuestro gusto en una escena.
Por lo que he leído eso si no tiene en cuenta el tráfico para calcular lo que vas a tardar.

A ver si entre todos le sacamos más jugo a esto. Habría que ver como sacamos toda esa información luego en Tasker (eso va a ser telita!). Otra cosa es que yo he puesto xml pero se le puede poner que saque la información en formato "json" (ni idea de lo que es).
A lo mejor se puede hacer un http get que en vez de toda la información te de sólo unos datos más específicos, no lo se. Por otro lado si leeis el enlace veréis que los parámetros que he puesto son los obligatorios. Luego se le puede poner que vas en bici, que quieres pasar por este punto, que quieres evitar peajes,etc.

rabeliyo
17/12/13, 15:34:30
Tiene muy muy buena pinta, una dudilla que me trae rondando la cabeza estos dias es que a la hora de crear una escena con un mapa por ejemplo,me dice de meter las coordenadas, las cuales las tengo en una variable almacenadas pero me pide meterlas en formato numerico y ahi ya me atasco

Lo quiero implementar en el perfil de ubicacion del coche que es de donde saco las variables.


A ver si sacamos otro pedazo de perfil de todo esto X-D

maid450
18/12/13, 11:14:27
Pues no tengo mucho tiempo ultimamente para mirarlo a fondo, pero puede ser muy interesante.
Por lo pronto para manejar estos datos en tasker lo más sencillo es usar JSON (JavaScript Object Notation) en vez de xml, ya que así, como su nombre indica, desde una acción javascript se puede acceder a todos los datos e iterar por ellos directamente, usando xml sería un infierno de separar variables y subvariables...

Como digo no puedo testearlo ahora mismo, pero en principio suponiendo que hacemos el GET que queremos, que devuelva json y almacenamos la respuesta en %resultado, se deberían poder hacer cosas como estas (javascriptlet):


//convertimos el JSON a una variable que contendrá todos los resultados
var datos = JSON.parse(resultado);
//muestra el resumen de la ruta 0 ("AP-2 y A-2")
flash(datos.routes[0].summary);
//muestra la distancia y dureción estimada de la rama (leg) 1 de la ruta (route) 1
flash(datos.routes[0].legs[0].distance.text + ' (' + datos.routes[0].legs[0].duration.text + ')');
//recorremos todos los pasos de la rama 1 de la ruta 1
for(var i=0;i<datos.routes[0].legs[0].steps.length;i++) {
//mostramos las instrucciones para ese paso
flash(datos.routes[0].legs[0].steps[i].html_instructions);
}


Como digo ese es un ejemplo rápido muy orientado a este caso, en realidad habría que tener en cuenta multiples posibles rutas/ramas, errores, etc...

Caravantes
19/12/13, 15:47:56
Todo esto venía a que siempre había querido saber el nombre de la calle a partir de unas coordenadas.

Eso lo tenías resuelto en un hilo de hace dos meses:
Obtener el nombre de un lugar (su dirección) sabiendo sus coordenadas
http://www.htcmania.com/showthread.php?t=703855

Esa misma tarea la he revisado y actualizado posteriormente, y la he publicado hace poco en
http://www.htcmania.com/showpost.php?p=11594637
y puedes descargarte el XML de esa tarea en este post
http://www.htcmania.com/showpost.php?p=11622033

gonza28
23/12/13, 23:43:17
Pues no tengo mucho tiempo ultimamente para mirarlo a fondo, pero puede ser muy interesante.
Por lo pronto para manejar estos datos en tasker lo más sencillo es usar JSON (JavaScript Object Notation) en vez de xml, ya que así, como su nombre indica, desde una acción javascript se puede acceder a todos los datos e iterar por ellos directamente, usando xml sería un infierno de separar variables y subvariables...

Como digo no puedo testearlo ahora mismo, pero en principio suponiendo que hacemos el GET que queremos, que devuelva json y almacenamos la respuesta en %resultado, se deberían poder hacer cosas como estas (javascriptlet):

Código:
//convertimos el JSON a una variable que contendrá todos los resultados
var datos = JSON.parse(resultado);
//muestra el resumen de la ruta 0 ("AP-2 y A-2")
flash(datos.routes[0].summary);
//muestra la distancia y dureción estimada de la rama (leg) 1 de la ruta (route) 1
flash(datos.routes[0].legs[0].distance.text + ' (' + datos.routes[0].legs[0].duration.text + ')');
//recorremos todos los pasos de la rama 1 de la ruta 1
for(var i=0;i<datos.routes[0].legs[0].steps.length;i++) {
//mostramos las instrucciones para ese paso
flash(datos.routes[0].legs[0].steps[i].html_instructions);
}
Como digo ese es un ejemplo rápido muy orientado a este caso, en realidad habría que tener en cuenta multiples posibles rutas/ramas, errores, etc...

Cuqando tengas tiempo podrias hacer un mini tuto de como integrar JSON en tasker? esto seria muy util si que si

maid450
24/12/13, 08:58:32
He podido probarlo y efectivamente funciona, aquí la descripción de la tarea que he hecho para probarlo:

Prueba Maps (71)
A1: HTTP Get [ Server:Port:https://maps.googleapis.com Path:maps/api/directions/json Attributes:origin=Barcelona
destination=Madrid
sensor=true Cookies: Timeout:10 Mime Type: Output File: ]
A2: JavaScriptlet [ Code:var datos = JSON.parse(global('HTTPD'));
flash(datos.routes[0].summary);
flash(datos.routes[0].legs[0].distance.text + ' (' + datos.routes[0].legs[0].duration.text + ')');
for(var i=0;i<datos.routes[0].legs[0].steps.length;i++) {
flash(datos.routes[0].legs[0].steps[i].html_instructions);
} Libraries: Auto Exit:On Timeout (Seconds):45 ]

Basicamente, en la acción HTTP Get ponemos el servidor, la ruta y en "atributos" los distintos parametros (creo que se puede poner todo en la parte "servidor" como una URL completa, pero así separado por partes me parece más limpio)
despues el codigo javascriptlet (que pegaré por separado a continuación para que se vea más claro) hace lo siguiente:



Usa JSON.parse sobre la variable %HTTPD que contiene la respuesta de la llamada. Al ser un objeto JSON esto extrae todos los datos de la respuesta en una variable "datos" lista para usar directamente sin tener que manejar un xml separando variables
muestra con "flash" ciertos datos de la ruta
itera mediante un for por todos los pasos de la ruta y muestra con "flash" la descripción de cada uno de ellos

aquí el javascriptlet que he usado:

var datos = JSON.parse(global('HTTPD'));
flash(datos.routes[0].summary);
flash(datos.routes[0].legs[0].distance.text + ' (' + datos.routes[0].legs[0].duration.text + ')');
for(var i=0;i<datos.routes[0].legs[0].steps.length;i++) {
flash(datos.routes[0].legs[0].steps[i].html_instructions);
}




En cuanto al tuto de JSON, estoy preparando un tutorial del uso de javascript en tasker en general que incluirá un capitulo sobre el JSON, lo tengo un poco parado ultimamente, pero llegará ;-)

mlesir
24/12/13, 12:01:30
Grande Maid.
Gonza28 en el recopilatorio tienes un minituto de maid para usar varíables.
Por cierto este verano haciendo caso a Maid me puse con el javascript y compre este libro: "Javascript" de Astor de Caso Parra editorial Anaya. El libro empieza de cero, cada cosa que se ve con su ejemplo y muy bien explicado. Imposible no entenderlo. Si queréis empezar con este lenguaje lo recomiendo.