De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.
Colaboração: Bruno Buys
Data de Publicação: 09 de Agosto de 2007
Quem precisa trabalhar com o Diário Oficial da União tem que usar um aplicativo em javascript no site da Imprensa Nacional, que, convenhamos, deixa a desejar. Só se vê uma página de cada vez, é lento e não dá para fazer buscas no Diário inteiro.
Eu decidi escrever o shell script abaixo porque salvar página por página no braço não era uma opção, e também porque precisei citar o link direto para o arquivo pdf de uma página.
O script aceita quatro formas de rodar:
baixadiario secao1 # baixa somente a secao 1 do D.O. baixadiario secao2 # baixa somente a secao 2 do D.O. baixadiario secao3 # baixa somente a secao 3 do D.O.
e
baixadiario # sem argumento nenhum ele baixa o D.O. inteiro
Ao fim do processo, o arquivo links.txt guarda os links para cada página do D.O.. Facilita a vida de quem precisa citar páginas, enviar links por email ou coisa parecida.
OBS - O número de página é o último número antes da extensão: "do3-86.pdf" significa "D.O. seção 3, página 86"
OBS 2 - Para quem tiver o pdfjoin instalado (parte do pacote 'pdfjam', no Debian Sarge), os últimos três comandos juntam os pdf's das seções em um único pdf. Quem não fizer questão disso, pode comentar as três linhas, para não ficar vendo mensagem de erro.
#!/bin/bash # Baixadiario, baixa os DO's do site da Imprensa Nacional. Bruno Buys, dez-2005, out-2006. # Sob os termos da licensa GNU GPL, v2.0. ANO=`date +%Y` MES=`date +%m` DIA=`date +%d` # Baixa as paginas com a informacao do numero de pdf's das secoes do DO. for N in 1 2 3 ; do wget "http://www.in.gov.br/imprensa/jsp/jsp/jornaiscompletos/visualizacao/pdf/visualiza_pdf.jsp?jornal=do&secao="$N"&pagina=1&data="$DIA"/"$MES"/"$ANO"" mv visua* index$N.htm #Vamos guardar o index, depois, por conveniencia done #Isso salva os numeros de paginas que cada secao do DO tem. SEC1=`cat index1.htm |grep -o totalarquivos="[0-9]*[0-9]"|cut -c15-` SEC2=`cat index2.htm |grep -o totalarquivos="[0-9]*[0-9]"|cut -c15-` SEC3=`cat index3.htm |grep -o totalarquivos="[0-9]*[0-9]"|cut -c15-` funcao_pega_0a9(){ for ((d=1;d<10;d++)) ; do wget http://www.in.gov.br/materias/pdf/do/secao"$1"/"$DIA"_"$MES"_"$ANO"/do"$1"-"$d".pdf echo "http://www.in.gov.br/materias/pdf/do/secao"$1"/"$DIA"_"$MES"_"$ANO"/do"$1"-"$d".pdf" >> links.txt mv do"$1"-"$d".pdf `basename do"$1"-"$d".pdf "$d".pdf`00$d.pdf done } funcao_pega_10a99(){ if [ $2 -le 100 ] ; then for ((d=10;d<$2;d++)) ; do wget http://www.in.gov.br/materias/pdf/do/secao"$1"/"$DIA"_"$MES"_"$ANO"/do"$1"-"$d".pdf echo "http://www.in.gov.br/materias/pdf/do/secao"$1"/"$DIA"_"$MES"_"$ANO"/do"$1"-"$d".pdf" >> links.txt mv do"$1"-"$d".pdf `basename do"$1"-"$d".pdf "$d".pdf`0$d.pdf done fi if [ $2 -gt 100 ] ; then for ((d=10;d<100;d++)) ; do wget http://www.in.gov.br/materias/pdf/do/secao"$1"/"$DIA"_"$MES"_"$ANO"/do"$1"-"$d".pdf echo "http://www.in.gov.br/materias/pdf/do/secao"$1"/"$DIA"_"$MES"_"$ANO"/do"$1"-"$d".pdf" >> links.txt mv do"$1"-"$d".pdf `basename do"$1"-"$d".pdf "$d".pdf`0$d.pdf done fi } funcao_pega_restantes(){ for ((d=100;d<$2;d++)) ; do wget http://www.in.gov.br/materias/pdf/do/secao"$1"/"$DIA"_"$MES"_"$ANO"/do"$1"-"$d".pdf echo "http://www.in.gov.br/materias/pdf/do/secao"$1"/"$DIA"_"$MES"_"$ANO"/do"$1"-"$d".pdf" >> links.txt done } funcao_pega_secao_1(){ funcao_pega_0a9 1 funcao_pega_10a99 1 $SEC1 funcao_pega_restantes 1 $SEC1 } funcao_pega_secao_2(){ funcao_pega_0a9 2 funcao_pega_10a99 2 $SEC2 funcao_pega_restantes 2 $SEC2 } funcao_pega_secao_3(){ funcao_pega_0a9 3 funcao_pega_10a99 3 $SEC3 funcao_pega_restantes 3 $SEC3 } case $1 in secao1) funcao_pega_secao_1 ;; secao2) funcao_pega_secao_2 ;; secao3) funcao_pega_secao_3 ;; *) funcao_pega_secao_1 funcao_pega_secao_2 funcao_pega_secao_3 ;; esac #Opcional, pra quem tiver o pdfjoin (parte do pacote 'pdfjam', no Debian) instalado: pdfjoin `ls do1*.pdf` --outfile secao1.pdf pdfjoin `ls do2*.pdf` --outfile secao2.pdf pdfjoin `ls do3*.pdf` --outfile secao3.pdf exit 0
This policy contains information about your privacy. By posting, you are declaring that you understand this policy:
This policy is subject to change at any time and without notice.
These terms and conditions contain rules about posting comments. By submitting a comment, you are declaring that you agree with these rules:
Failure to comply with these rules may result in being banned from submitting further comments.
These terms and conditions are subject to change at any time and without notice.
Comentários