Foros del Web » Programando para Internet » Python »

Enviar XML en Django a una direccion en concreto

Estas en el tema de Enviar XML en Django a una direccion en concreto en el foro de Python en Foros del Web. Hola compañeros, estoy tratando de insertar un lugar en la API de google maps y para ello tengo que enviar un XML a una direccion ...
  #1 (permalink)  
Antiguo 14/08/2012, 10:12
Avatar de wolvelopez  
Fecha de Ingreso: junio-2008
Mensajes: 86
Antigüedad: 16 años, 5 meses
Puntos: 0
Enviar XML en Django a una direccion en concreto

Hola compañeros, estoy tratando de insertar un lugar en la API de google maps y para ello tengo que enviar un XML a una direccion en concreto con mi Key personal.
El caso es que no tengo ni idea de como hacerlo.
El codigo es el siguiente:

Código:
def lugarnuevo(request):
    if request.method == 'POST':
        formulario = LugarNuevo(request.POST)
        if formulario.is_valid():
            xml = "<PlaceAddRequest>" + "<location>" + "<lat>" + request.POST['latitud'] + \
                "</lat>" + "<lng>" + request.POST['longitud'] + "</lng>" + "</location>" + \
                "<accuracy>" + "5" + "</accuracy>" + \
                "<name>" + request.POST['nombre'] + "</name>" + \
                "<type>" + request.POST['tipo'] + "</type>" + \
                "<languaje>" + "es" + "</languaje>" + \
                "</PlaceAddRequest>"
            print xml
            HttpResponse = xml
            HttpResponseRedirect('https://maps.googleapis.com/maps/api/place/add/xml?sensor=false&key=myKey HTTP/1.1')        
    else:
        formulario = LugarNuevo()
    return render_to_response('lugarnuevo.html', {'formulario':formulario}, context_instance=RequestContext(request))
La función recibe los datos perfectamente pero ya no se como enviarlos.¿Alguien me puede ayudar?
Saludos y gracias de antemano.
__________________
# "El software es un gas: se expande hasta llenar su contenedor"
-- Nathan Myhrvold
  #2 (permalink)  
Antiguo 14/08/2012, 11:14
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 19 años, 8 meses
Puntos: 1360
Respuesta: Enviar XML en Django a una direccion en concreto

Lo que pasa es que tienes que enviar esos datos via POST.

Hacer una petición a esa url con los datos en la url y en post body tal como dice la documentación.
  #3 (permalink)  
Antiguo 15/08/2012, 04:52
Avatar de wolvelopez  
Fecha de Ingreso: junio-2008
Mensajes: 86
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: Enviar XML en Django a una direccion en concreto

Ya lo habia leido pero el problema es que no se como introducir la informacion XML en el POST body.
No se si a httpResponseRedirect aparte de una dirección le puedo dar un cuerpo de pagina.
Saludos y gracias razpeitia.
__________________
# "El software es un gas: se expande hasta llenar su contenedor"
-- Nathan Myhrvold
  #4 (permalink)  
Antiguo 16/08/2012, 05:56
Avatar de wolvelopez  
Fecha de Ingreso: junio-2008
Mensajes: 86
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: Enviar XML en Django a una direccion en concreto

Sigo sin poder, estoy ahora intentandolo así:
Código python:
Ver original
  1. def lugarnuevo(request):
  2.     if request.method == 'POST':
  3.         formulario = LugarNuevo(request.POST)
  4.         if formulario.is_valid():
  5.             xml = "<PlaceAddRequest>" + "<location>" + "<lat>" + request.POST['latitud'] + \
  6.                 "</lat>" + "<lng>" + request.POST['longitud'] + "</lng>" + "</location>" + \
  7.                 "<accuracy>" + "5" + "</accuracy>" + \
  8.                 "<name>" + request.POST['nombre'] + "</name>" + \
  9.                 "<type>" + request.POST['tipo'] + "</type>" + \
  10.                 "<languaje>" + "es" + "</languaje>" + \
  11.                 "</PlaceAddRequest>"
  12.             print xml            
  13.             req = urllib2.Request('https://maps.googleapis.com/maps/api/place/add/xml?sensor=false&key=miclave')
  14.             req.add_header('Content-Type', 'application/xml')
  15.             res = urllib2.urlopen(req, xml)
  16.             response = res.read()
  17.             print response
  18.  
  19.     else:
  20.         formulario = LugarNuevo()
  21.     return render_to_response('lugarnuevo.html', {'formulario':formulario}, context_instance=RequestContext(request))
__________________
# "El software es un gas: se expande hasta llenar su contenedor"
-- Nathan Myhrvold

Última edición por AlvaroG; 16/08/2012 a las 07:52 Razón: coloreado de código vía HIGHLIGHT
  #5 (permalink)  
Antiguo 16/08/2012, 07:51
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Enviar XML en Django a una direccion en concreto

Creo que no has leído el manual de urllib2: el segundo parámetro de urlopen() debe ser una cadena en formato nombredevariable=valor (igual que si fuese vía GET), esta cadena la podés crear usando
Código python:
Ver original
  1. urllib.urlencode({'datos': xml})
Por lo que tu código debería ser
Código python:
Ver original
  1. urllib2.urlopen(req, urllib.urlencode({'datos': xml}))
y te llegaría vía POST una variable "datos" con el contenido del XML.

No olvides utilizar el resaltado de código
  #6 (permalink)  
Antiguo 16/08/2012, 11:14
Avatar de wolvelopez  
Fecha de Ingreso: junio-2008
Mensajes: 86
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: Enviar XML en Django a una direccion en concreto

Cita:
Iniciado por AlvaroG Ver Mensaje
Creo que no has leído el manual de urllib2: el segundo parámetro de urlopen() debe ser una cadena en formato nombredevariable=valor (igual que si fuese vía GET), esta cadena la podés crear usando
Código python:
Ver original
  1. urllib.urlencode({'datos': xml})
Por lo que tu código debería ser
Código python:
Ver original
  1. urllib2.urlopen(req, urllib.urlencode({'datos': xml}))
y te llegaría vía POST una variable "datos" con el contenido del XML.

No olvides utilizar el resaltado de código
Muchas gracias aunque he probado y me salta este error:
Código:
Exception Type:	HTTPError
Exception Value:	
HTTP Error 400: Bad Request
__________________
# "El software es un gas: se expande hasta llenar su contenedor"
-- Nathan Myhrvold
  #7 (permalink)  
Antiguo 16/08/2012, 11:58
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Enviar XML en Django a una direccion en concreto

¿Eso te lo da tu aplicación o los servidores de google? Si es google, tendrías que buscar la forma de depurar el problema. Por lo pronto, veo un error en tu XML: usas una etiqueta "languaje" cuando la palabra correcta en inglés es "language"
  #8 (permalink)  
Antiguo 17/08/2012, 03:41
Avatar de wolvelopez  
Fecha de Ingreso: junio-2008
Mensajes: 86
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: Enviar XML en Django a una direccion en concreto

Todo correcto!!! era fallo del XML pero funciona bien con requests. Muchas gracias.
Ahora tengo otra pequeña duda:
para obtener la latitud y longitud lo hago con HTML5 y su geolocalizacion con javascript pero entonces el usuario tiene que aceptar esos valores. Muestro dos cajas de texto con la latitud y longitud y el usuario acepta.
Mi problema es que me gustaria capturar esos valores desde django y que fuese transparente para el usuario pero no se por donde empezar porque por mas que he googleado no veo nada parecido.
__________________
# "El software es un gas: se expande hasta llenar su contenedor"
-- Nathan Myhrvold
  #9 (permalink)  
Antiguo 17/08/2012, 07:36
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Enviar XML en Django a una direccion en concreto

Al trabajar del lado del servidor, Django solamente puede trabajar con lo que le proporcione la sesión del usuario o la comunicación HTTP.

Para guardar los datos en la sesión del usuario tenés que tomar primero los datos vía el método que estás usando ahora mismo, que por motivos de seguridad de datos personales, requiere autorización del usuario (aunque los usuarios pueden configurar sus navegadores para que no les pregunten a la hora de compartir los datos).

Del lado de HTTP no hay nada que te permita saber la localización del usuario, excepto las bases de datos de geolocalización vía IP (aunque, por lo que veo que querés hacer, su precisión no te es suficiente).

Otro punto a considerar es que los navegadores de escritorio no tienen forma de proveer una localización precisa, si te fijas en la página que describe cómo funciona Firefox en estos casos [1], verás que lo único que hace es utilizar los servicios de geolocalización de Google.


[1] https://www.mozilla.org/en-US/firefox/geolocation/
  #10 (permalink)  
Antiguo 17/08/2012, 09:54
Avatar de wolvelopez  
Fecha de Ingreso: junio-2008
Mensajes: 86
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: Enviar XML en Django a una direccion en concreto

ya veo ya.
Pues voy a ver si localizo como obtener las coordenadas (latitud y longitud) dando el usuario el nombre de una calle.
He visto por ahí una libreria de google maps para django pero ahora no la localizo.
Muchas gracias AlvaroG
__________________
# "El software es un gas: se expande hasta llenar su contenedor"
-- Nathan Myhrvold

Etiquetas: django
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:19.