Ir ao conteúdo
  • Cadastre-se

Outro Fazer download de PDF direto do MSdos


Posts recomendados

Olá. 

Alguém poderia me ajudar a criar um script que realizasse o download do site http://diariooficial.imprensaoficial.com.br/doflash/prototipo/2017/Setembro/06/exec1/pdf/pg_0001.pdf, para cada pagina o final link muda ".../pg_0002.pdf ", ".../pg_0003.pdf ". Logo precisarei de um laço com uma variável de controle, a cada repetição incrementaria +1 e a condição de sair seria quando desse erro, ou EOF não sei como MSDos funciona, e nem tenho pratica. 

Andei pesquisando e o wget resolve o meu problema porém não consigo construir a estrutura.

Wget http://diariooficial.imprensaoficial.com.br/doflash/prototipo/2017/Setembro/06/exec1/pdf/pg_0001.pdf

 

Obrigado pela atenção.

 

Link para o comentário
Compartilhar em outros sites

  • Moderador

@Simon Viegas Na verdade tem, mas precisa ser baixado aqui.

 

Eu baixei a versão do pacote completo de MD5sum b4679ac6f7757b35435ec711c6c8d912

Depois de baixado e instalado, adicione o endereço da pasta " bin " do Wget nas variáveis de sistema.

 

Agora já está apto para usar o Wget no CMD! 

 

@Jessé P. de Melo

O que você quer fazer é possível e é bem fácil! Basta conhecer um pouco sobre o laço de repetição FOR no  batch.

Basicamente o código que você vai usar será um bloco de 3 laços de FOR.

 

Pois a sequência de numeração dos arquivos pdf é a seguinte:

0001 ao 0244 ( Descobri que o último arquivo é este valor)

 

Com base nessa numeração os 3 laços de FOR dica dividido assim:

0001 até 0009

0010 até 0099

0100 até 0244

 

@echo off
cls

SET url=http://diariooficial.imprensaoficial.com.br/doflash/prototipo/2017/Setembro/06/exec1/pdf/pg_


FOR /L %%A IN (1,1,9) DO (
     wget -c %url%000%%A%.pdf   
)

FOR /L %%A IN (10,1,99) DO (
    wget -c %url%00%%A%.pdf   
)

FOR /L %%A IN (100,1,244) DO (
    wget -c %url%0%%A%.pdf   
)


@echo:
ECHO Todos os arquivos PDF foram baixados!

pause

 

Vamos as explicações do código agora.

Primeiro desligamos o echo para não mostrar os comandos.

CLS, é usado para limpar a tela caso esteja cheia.

 

SET é usado para definir uma variável e seu valor. No caso é a URL do arquivo. 

Como estamos fazendo um LOOP o valor desta variável será somente:

 

http://diariooficial.imprensaoficial.com.br/doflash/prototipo/2017/Setembro/06/exec1/pdf/pg_

O laço de FOR funciona da seguinte maneira:

O /L  indica é que Lista de números.

O %%A  é o parâmetro

Os números entre parênteses indicam o valor inicial, o valor que será incrementado e o valor final.

 

Então traduzindo para a linguagem portuguesa o bloco de FOR fica:

Para lista de números %%A EM(começa em 1, incrementa o valor em 1, termina em 9) FAÇA (
       Alguma coisa
)

 

Para exibir uma variável, precisa por ela entre sinal de %  exemplo:

%url% 

 

Para exibir os parâmetros incrementados usa-se :

%%Nome do parâmetro, no código deixei como A, mas você pode usar qualquer letra.

 

Para concatenar,  basta juntar tudo!

 

Dentro dos parênteses depois do DO, chamamos o " wget -c " seguido da variável URL concatenada com os números gerados além da extensão do arquivo.

 

 wget -c %url%000%%A%.pdf

E assim por diante.  

 

Repare que no primeiro bloco de FOR, tem 3 zeros concatenados.

No segundo tem só 2 zeros e no terceiro bloco só tem um zero.

 

Porque?

 

Para seguir aquela nossa ordem mais acima onde

vai do 1 ao 9 incrementados...  então concatenamos o 000  com 1 até 9, ficando  0009.

 

Basicamente é isso. O código foi testado e funciona.

 

  • Obrigado 1
Link para o comentário
Compartilhar em outros sites

Muito obrigado DIF,

 

Você saberia me indicar algum livro ou site que tenha a documentação da linguagem do Ms-dos ? De preferência em português ou espanhol. A maioria das coisas que acho ta em inglês e é superficial.

 

Voltando a falar do script, minha intenção é criar um .bat que baixe tudo sem precisar de interação, quando conseguir vou utilizar o agendador de tarefas para automatizar tudo. Há a possibilidade de colocar o valor final do FOR com EOF(-1), "final de arquivo", ou então para parar quando der erro? 

Porque o numero de paginas do PDF varia de dia para dia.

 

Ex:	[...]
	FOR /L %%A IN (100,1,EOF)
	[...]

 

Também possuo um pouco de conhecimento em linguagem C, tu acredita que seria mais simples desenvolver a solução em "C"? Eu pensei que não porque teria que chamar varias bibliotecas, o script ficaria maior e mais lento. porém gostaria de segundas opiniões.

 

 

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Moderador

@Jessé P. de Melo A linguagem do MS-dos é "Batch" o nome.

Infelizmente não conheço nenhum site em português ou espanhol. Todos, me basei pelos sites em inglês. O melhor que achei foi um que se parece com o w3school, que se chama w3ii:   http://www.w3ii.com/pt/batch_script/default.html

 

Este não é superficial. Tem tudo que a pessoa precisa para entender um pouco.

 

4 horas atrás, Jessé P. de Melo disse:

minha intenção é criar um .bat que baixe tudo sem precisar de interação, quando conseguir vou utilizar o agendador de tarefas para automatizar tudo.

Creio que não tem com baixar tudo em uma tacada só. Ele precisa baixar uma  um, em um laço de repetição.

Talvez, com C/C++ você possa fazer isso, ou seja, converter esse código para C/C++ e tentar fazer com que ele rode até terminar sem mostrar que baixou um a um... eu não sei te ajudar sobre isso.

 

 Na verdade eu não sei quase nada de Batch.  O que fiz foi somente pesquisar e montar um código com base na minha experiência em programação!

 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

@DiF e @Jessé P. de Melo ...

 

Duas sugestões:


1) TENTAR USAR RESPOSTA DO WGET
O wget deve retornar algum erro quando não consegue encontrar o arquivo ou não consegue baixar... daí daria para verificar essas respostas e agir de acordo com tal... Acho que um comando que consegue pegar o texto... acho que < ou > no batch..

 

Supondo que consiga obter esse status, e este seja de "0" ou algo que signifique "sucesso", iniciaria um FOR, por exemplo, de 1 a 300 (ou algum valor coerente), daí se for diferente disso "sucesso", interromperia o FOR... não sei como seria, talvez com o tipo de "break" ou um GOTO / LABEL para outra parte do código.

 

 

2) APROVEITAR O PRÓPRIO WGET

Pelo que o vi aqui, o wget pode usar recursividade... ai tentava baixar toda a pasta. Vide aqui:
https://www.vivaolinux.com.br/dica/Baixando-sites-recursivamente

 

É provável que a pasta só contenhas as páginas. Se tiver muitas outras coisas, tentar algo como "*.pdf", sacou?

 

 

3) REFERENTE A AUTOMAÇÃO

Em relação a automação, verificar se dar para pegar a data do computador e usar para compor o endereço, algo como:

SET ANO=(fórmula_que_pega_ano_via_data_do_computador)
SET MES=(fórmula_que_pega_mes_via_data_do_computador)
SET DIA=(fórmula_que_pega_dia_via_data_do_computador)
SET url=http://diariooficial.imprensaoficial.com.br/doflash/prototipo/%ANO%/%MES%/%DIA%/exec1/pdf/pg_

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

22 horas atrás, DiF disse:

@Jessé P. de Melo A linguagem do MS-dos é "Batch" o nome.

Infelizmente não conheço nenhum site em português ou espanhol. Todos, me basei pelos sites em inglês. O melhor que achei foi um que se parece com o w3school, que se chama w3ii:   http://www.w3ii.com/pt/batch_script/default.html

 

Este não é superficial. Tem tudo que a pessoa precisa para entender um pouco.

 

Creio que não tem com baixar tudo em uma tacada só. Ele precisa baixar uma  um, em um laço de repetição.

Talvez, com C/C++ você possa fazer isso, ou seja, converter esse código para C/C++ e tentar fazer com que ele rode até terminar sem mostrar que baixou um a um... eu não sei te ajudar sobre isso.

 

 Na verdade eu não sei quase nada de Batch.  O que fiz foi somente pesquisar e montar um código com base na minha experiência em programação!

 

Muito obrigado pelo link.

Me expressei mal, não quero baixar tudo de uma vez sem o laço. 

adicionado 2 minutos depois
19 horas atrás, Simon Viegas disse:

@DiF e @Jessé P. de Melo ...

 

Duas sugestões:


1) TENTAR USAR RESPOSTA DO WGET
O wget deve retornar algum erro quando não consegue encontrar o arquivo ou não consegue baixar... daí daria para verificar essas respostas e agir de acordo com tal... Acho que um comando que consegue pegar o texto... acho que < ou > no batch..

 

Supondo que consiga obter esse status, e este seja de "0" ou algo que signifique "sucesso", iniciaria um FOR, por exemplo, de 1 a 300 (ou algum valor coerente), daí se for diferente disso "sucesso", interromperia o FOR... não sei como seria, talvez com o tipo de "break" ou um GOTO / LABEL para outra parte do código.

 

 

2) APROVEITAR O PRÓPRIO WGET

Pelo que o vi aqui, o wget pode usar recursividade... ai tentava baixar toda a pasta. Vide aqui:
https://www.vivaolinux.com.br/dica/Baixando-sites-recursivamente

 

É provável que a pasta só contenhas as páginas. Se tiver muitas outras coisas, tentar algo como "*.pdf", sacou?

 

 

3) REFERENTE A AUTOMAÇÃO

Em relação a automação, verificar se dar para pegar a data do computador e usar para compor o endereço, algo como:


SET ANO=(fórmula_que_pega_ano_via_data_do_computador)
SET MES=(fórmula_que_pega_mes_via_data_do_computador)
SET DIA=(fórmula_que_pega_dia_via_data_do_computador)
SET url=http://diariooficial.imprensaoficial.com.br/doflash/prototipo/%ANO%/%MES%/%DIA%/exec1/pdf/pg_

Agradecido pela informações !!! Vou estudar o ms-dos e vou utilizar esse algorítimo. Com o meu conhecimento atual nem tento seria só passar raiva. 

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...