você está aqui: Home  → Arquivo de Mensagens

Baixando o Diário Oficial inteiro de uma vez só

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


 

 

Veja a relação completa dos artigos de Bruno Buys

Opinião dos Leitores

Eduardo
06 Jan 2016, 09:02
Bom cheguei no site aleatoriamente, buscando uma forma eficaz de fazer pesquisa no DOU de forma eficaz, Tiago o site que sugeriu e Fantástico. Obrigado pela dica.
tiago
23 Dez 2015, 09:31
A gráfica da UFES faz a publicação inteira por seção.
http://grafica.ufes.br/diario-oficial-da-uniao
Jorge Jordão
06 Jun 2014, 16:57
Olá Gostaria de saber mais detalhes como fazer funcionar, eu também não sou entendido em programações!
jonatas
09 Abr 2013, 09:35
Também não entendi direito, onde coloco os comandos para baixar. Poderia por favor me explicar.
nildo
25 Jan 2013, 06:13
Bom dia Amigo..desculpe preciso de mais detalhes...atenciosamente Nildo
felipe
17 Mai 2011, 21:34
gostaria de saber como fazer?
david
13 Abr 2011, 10:35
ainda nao entendi como fazer isso, poderia me dar mais detalhes de como fazer e qual programa utilizar pois tenho muito interesse em baixar todos os cadernos do estadual tambem sem precisar de intermediarios.muito obrigado
Marcio Pivoto
05 Abr 2011, 04:57
Otima sua dica mais me diga uma coisa e para o diario da união de são paulo é possivel tambem?
Alfredo
06 Jan 2011, 18:53
Que bom Juracy!
juracy alves silva
07 Out 2010, 16:00
eu juracy alves gostaria de pedir encarecidamente, aos ministros q fizesem leis governamentais p q fossem feito perice medicas p auxilio doença mediante exame; no proprio postos do inss este é minha revindicaçaõ com beneficiario muito grata obrigada
andré
03 Set 2010, 09:16
como eu faço pra rodar isso?? desculpe minha ignorancia...
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script