você está aqui: Home  → Arquivo de Mensagens Programe sua mente para aprender inglês - ebook gratuito

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