Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
Jessé P. de Melo

Outro Fazer download de PDF direto do MSdos

Recommended Posts

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.

 

Editado por DiF
Acrescentar o prefixo de linguagem

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tem o wget no Windows? como você está fazendo?

 

obs.: não manjo muito de MS Dos, senão eu mesmo te ajudava, rs. Mas sei que dá para criar variáveis para, por exemplo, você informar o ano, mês e o dia, e deixar o stript "universal".

Compartilhar este post


Link para o post
Compartilhar em outros sites

@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.

 

Editado por DiF
  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  • 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

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    @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!

     

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    @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

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • 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. 

     

    Editado por Jessé P. de Melo
    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Crie uma conta ou entre para comentar

    Você precisar ser um membro para fazer um comentário






    Sobre o Clube do Hardware

    No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

    ×