Downloads recursivos após redirecionamentos

3

Meus objetivos:

  1. Desejo baixar todos os arquivos * .zip em uma página na qual todos os links relevantes são redirecionados por um script de servidor ( */download.php?standard=yes&file=*.zip ).
  2. Eu quero que o link original seja usado para nomear os arquivos, já que o nome dado pelo servidor é sempre "download.zip".

Especificamente, quero baixar os mapas do OsmAnd aqui: link

Como faço isso?

O que eu tentei:

Eu poderia usar wget para fazer algo semelhante com os mapas do MAPS.ME:

wget -rl1 --accept="mwm" http://direct.mapswithme.com/direct/latest/

Mas, nesse caso, os links eram diretos e não havia problemas com os nomes dos arquivos.

Eu também tentei usar curl -L , mas isso é sem recursão, e não parece funcionar para o tipo de redirecionamento usado nessa página.

    
por 256shadesofgrey 21.08.2016 / 00:16

2 respostas

1

O Wget funciona bem, mas você precisa citar o URL, já que ele não escapou.

ou seja,

wget 'http://download.osmand.net/download.php?standard=yes&file=Afghanistan_asia_2.obf.zip' -O Afghanistan_asia_2.obf.zip

A opção -O controla o nome da saída. Deve ser bastante fácil criar um script de shell que fará isso com uma lista de nomes de arquivos.

Editar: Você pode obter nomes de arquivos fazendo o download da página e fazendo uma pesquisa regex para o padrão de arquivo:

wget -nv 'http://download.osmand.net/rawindexes/' -O - | grep -oE "file=[A-Za-z0-9_]*.obf.zip" | cut -c6-

Que pode ser combinado com xargs e canalizado diretamente para o wget para fazer o download de cada arquivo:

xargs -I{} wget 'http://download.osmand.net/download.php?standard=yes&file={}' -O {}

Ou o seu comando completo, de uma linha (funciona no Cygwin, outro * nix pode exigir alguma reprodução com aspas e xargs):

wget -nv 'http://download.osmand.net/rawindexes/' -O - | grep -oE "file=[A-Za-z0-9_]*.obf.zip" | cut -c6- | xargs -I{} wget 'http://download.osmand.net/download.php?standard=yes&file={}' -O {}
    
por 21.08.2016 / 00:34
1

Alguns nomes de arquivos têm "-" neles. Portanto, o script para obter a lista de arquivos deve ser alterado com um caractere. Isso funciona para mim:

wget -nv 'http://download.osmand.net/rawindexes/' -O - | grep -oE "file=[A-Za-z0-9_-]*.obf.zip" | cut -c6-
    
por 26.11.2016 / 14:23