Descarga automática (Javascript, Ajax)

Deoxys

Hola, os comento una cosa que necesito que alguien haga porque yo no tengo ni la más remota idea de cómo.

Quiero descargarme todos (Sí, todos) los mapas 1:25k y 1:50k de la página web del CNIG ( www.cnig.es ). Tengo usuario y contraseña creados desde hace tiempo y puedo acceder al contenido de manera legal (Por si las moscas. El acceso a los datos es libre, sólo necesitas registrarte)

El problema viene siendo que, como se ve en esta imagen (Aviso, es grandota) hay 1107 cuadrículas. Esto se traduce en 1107 mapas 1:50k y 4428 mapas 1:25k, un total de 5535 descargas. Obviamente no me voy a descargar todos a mano, así que necesito un script que lo haga por mí.

Ahora viene mi ida de olla (Porque no tengo ni la más remota idea de estas cosas): Tras pasar toda la morralla que te lleva al link de descarga, he visto que hace algo así:

onclick="javascript:llamadaAjax('PUBLICACION_CNIG_DATOS_VARIOS/MTN25RASTER/0112C1.zip')"

Y he pensado que no sería complicado que alguien creara un programa/script/loquesea que descargue los mapas uno por uno, los descomprima y los deje en carpetas correspondiendes.

El patrón es predecible, los de 1:25000 serán

PUBLICACION_CNIG_DATOS_VARIOS/MTN25RASTER/nnnnCX.zip

; donde nnnn son números del 0001 al 1107, y X un número del 1 al 4; y los de 1:50000 serán

PUBLICACION_CNIG_DATOS_VARIOS/MTN50RASTER/nnnn.zip

, siendo nnnn los mismos cuatro números que antes.

En fin, no sé si lo veréis factible o no. Si pudierais ayedarme con esto me haríais un gran favor porque yo no sé ni por dónde me da el aire.

LOc0
#!/bin/bash

URL_BASE="ftp://3xtr3M4:9S7tg04W@ftpcdd.cnig.es/PUBLICACION_CNIG_DATOS_VARIOS/"

for i in $(seq -w 1 1107)
do
   
wget $URL_BASE"MTN50RASTER/"$i".zip" unzip $i".zip" -d "MTN50RASTER_"$i unlink $i".zip"
for j in $(seq 1 4) do wget $URL_BASE"MTN25RASTER/"$i"C"$j".zip" unzip $i"C"$j".zip" -d "MTN25RASTER_"$i"C"$j unlink $i"C"$j".zip" done done

Salu2 ;)

Deoxys

Muchas gracias, pero no tengo una distro de linux a mano, ¿Hay alguna otra posibilidad?

Si se pudiera usar ese código en windows me las podría apañar a partir de ahí :)

Edit: guay, nada, con lo de usarlo en windows vale, que veo que te has currado el código para el otro también xD

1 respuesta
LOc0

Si quieres te lo grabo en un CD y te lo envío a casa xD

Que te lo pase algún camarada a .bat q yo me piro sobar.

Salu2 ;)

cabron

#3

Prueba con esto: http://sourceforge.net/projects/win-bash/files/shell-complete/latest/

1 respuesta
Deoxys

#5 Menudo invento xD. Nunca había usado bash, tendré que empezar a enredar.

creo que ya me hago a la idea de cómo va. Al principio me daba login error, así que he supuesto que lo del principio eran el usuario y la contraseña y lo he cambiado por los míos. 'Funciona', pero me dice 'Server refuses login'.

¿Esto significa que este método no va a funcionar o que he hecho algo mal?

2 respuestas
LOc0

#6 En principio debería funcionarte con esos datos de login (a mi me fuciona y esta mañana he reiniciado el router).

Algunas imágenes dan error porque no existen, eso sí.

Salu2 ;)

1 respuesta
elkaoD

#6 #7 fijáos, pone 1C1.zip cuando tú deberías bajarte 0001C1.zip si no lo entendí mal, así que algo del código está fallando en la alternativa de Windows.

A malas, hazte una máquina virtual con VirtualBox y un Linux random. Yo tengo una para este tipo de cosas, nunca viene mal, y Windows apesta.

2
Deoxys

¿A lo mejor es del formateo? ¿Bash funciona como C, que hay que poner algo así? (No me acuerdo exactamente)

printf("%.6d\n", n);

Me había fijado pero la verdad es que me preocupaba más el tema del login.

1 respuesta
elkaoD

#9 es posible que te diga login failed porque tienen 403 fijo, cuando debería dar 404. No me extrañaría nada.

Usuarios habituales

  • elkaoD
  • Deoxys
  • LOc0
  • cabron