okfn-brasil / querido-diario

📰 Diários oficiais brasileiros acessíveis a todos | 📰 Brazilian government gazettes, accessible to everyone.
https://queridodiario.ok.org.br/
MIT License
1.08k stars 392 forks source link

[Novo spider base]: diario oficial dos municipios [Piauí] #1272

Open jjpaulo2 opened 19 hours ago

jjpaulo2 commented 19 hours ago

URL

http://www.diarioficialdosmunicipios.org

Municípios replicados

É um site único, mas que pode listar diários de vários municípios do Piauí de acordo com os filtros.

1. http://www.diarioficialdosmunicipios.org/consulta/ConPublicacaoGeral/ConPublicacaoGeral.php

image

Formato da publicação

Os diários oficiais são publicados em PDF (imagem scanneada)

Detalhes do site de publicação

Possui paginação, Possui filtro por data

Observações

Podem haver vários documentos publicados para um mesmo dia. Mas o próprio sistema tem uma função para selecionar esses documentos e gerar um pdf único.

Não existe uma issue aberta sobre isso

jjpaulo2 commented 18 hours ago

Exemplo de requisição para listar os diários de Piripiri-PI no dia 18/09/2024.

POST http://www.diarioficialdosmunicipios.org/consulta/ConPublicacaoGeral/ConPublicacaoGeral.php
Content-Type: application/x-www-form-urlencoded
script_case_init=8073&script_case_session=7am12sl4hcefgh0kn452ail2v3&nmgp_opcao=busca&nmgp_save_name_top=&NM_filters_del_top=&nomeentidade_cond=eq&nomeentidade=Prefeitura%23%23%40%40Prefeitura&numedicao_cond=qp&numedicao=&nomemunicipio_cond=eq&nomemunicipio=Piripiri%23%23%40%40Piripiri&nomedoc_cond=qp&nomedoc=&data_cond=bw&data_dia=18&data_mes=09&data_ano=2024&data_input_2_dia=18&data_input_2_mes=09&data_input_2_ano=2024&codigo_cond=eq&codigo=&NM_operador=and&nmgp_tab_label=nomeentidade%3F%23%3FEntidade%3F%40%3Fnumedicao%3F%23%3FN%B0+Edi%E7%E3o%3F%40%3Fnomemunicipio%3F%23%3FMunic%EDpio%3F%40%3Fnomedoc%3F%23%3FDocumento%3F%40%3Fdata%3F%23%3FData%3F%40%3Fcodigo%3F%23%3FIdentificador%3F%40%3F&bprocessa=pesq&nmgp_save_name_bot=&NM_filters_del_bot=&form_condicao=3

Retorno:

<script type="text/javascript">parent.NM_apaga_erro()</script><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
            "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd">
<HTML>
<BODY class="scGridPage">
<SCRIPT type="text/javascript">
   parent.document.getElementById('nmsc_iframe_ConPublicacaoGeral').src = 'ConPublicacaoGeral.php?nmgp_opcao=pesq&script_case_init=8073&script_case_session=7am12sl4hcefgh0kn452ail2v3';
</SCRIPT>
</BODY>
</HTML>

Podemos usar uma regex pra extrair o trecho de url ConPublicacaoGeral.php?nmgp_opcao=pesq&script_case_init=8073&script_case_session=7am12sl4hcefgh0kn452ail2v3, e concatenar à url base http://www.diarioficialdosmunicipios.org/consulta/ConPublicacaoGeral.

Dessa forma, obtemos a URL da página (iframe) contendo a tabela com os diários daquela data.

image

Usamos essa página para fazer uma leitura de quantos registros vieram. Após isso, podemos solicitar um arquivo PDF único para todos os registros retornados.

POST http://www.diarioficialdosmunicipios.org/consulta/ConPublicacaoGeral/ConPublicacaoGeral.php
Content-Type: application/x-www-form-urlencoded
nmgp_opcao=formphp&rec=&nm_call_php=AgruparPDFs&nm_run_opt_sel=1%3B2%3B3%3B4%3Bundefined&script_case_init=8073&script_case_session=7am12sl4hcefgh0kn452ail2v3&NM_ck_grid%5B%5D=0&NM_ck_grid%5B%5D=1&NM_ck_grid%5B%5D=2&NM_ck_grid%5B%5D=3&NM_ck_grid%5B%5D=4

Retorno:

     <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
            "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd">
      <html DIR='LTR'>
      <head>
       <META http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
        <script type="text/javascript" src="/consulta/_lib/prod/third/jquery/js/jquery.js"></script>
        <script type="text/javascript" src="/consulta/_lib/prod/third/jquery_plugin/malsup-blockui/jquery.blockUI.js"></script>
        <script type="text/javascript">var sc_pathToTB = '/consulta/_lib/prod/third/jquery_plugin/thickbox/';</script>
        <script type="text/javascript" src="/consulta/_lib/prod/third/jquery_plugin/thickbox/thickbox-compressed.js"></script>
        <link rel="stylesheet" href="/consulta/_lib/prod/third/jquery_plugin/thickbox/thickbox.css" type="text/css" media="screen" />
        <link rel="stylesheet" type="text/css" href="../_lib/css/Tipo2/Tipo2_grid.css" /> 
        <link rel="stylesheet" type="text/css" href="../_lib/css/Tipo2/Tipo2_gridLTR.css" /> 
      </head>
      <body class="scGridPage">
      <table class="scGridTabela" align="center"><tr><td>
<script>window.open('http://www.diarioficialdosmunicipios.org/intranet/_lib/file/doc/temp/result19092024110941.pdf');</script>   <form name="Fredir" method="post" 
                     target="_self"> 
     <input type="hidden" name="nmgp_parms" value=""/>
     <input type="hidden" name="nmgp_url_saida" value="/consulta/ConPublicacaoGeral/ConPublicacaoGeral.php">
     <input type="hidden" name="script_case_init" value="8073"/> 
     <input type="hidden" name="script_case_session" value="7am12sl4hcefgh0kn452ail2v3"/>
   </form> 
      <SCRIPT type="text/javascript">
          document.Fredir.target = "_self"; 
          document.Fredir.action = "/consulta/ConPublicacaoGeral/ConPublicacaoGeral.php";
          document.Fredir.submit();
      </SCRIPT>

Por fim, com regex conseguiríamos extrair a URL do documento http://www.diarioficialdosmunicipios.org/intranet/_lib/file/doc/temp/result19092024110941.pdf dentro da função window.open.

trevineju commented 12 hours ago

Marco esta issue como question pq acho que não temos outro raspador que implemente uma solução pra um caso assim; é também a primeira vez que me deparo com isso.

Mas já é bacana saber que já achou um caminho