Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
1 task done
jjpaulo2 opened this issue Sep 19, 2024 · 3 comments
Open
1 task done

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

jjpaulo2 opened this issue Sep 19, 2024 · 3 comments
Labels
question Solicitação de informações ou dúvidas

Comments

@jjpaulo2
Copy link
Contributor

jjpaulo2 commented Sep 19, 2024

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
Copy link
Contributor Author

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 trevineju added the question Solicitação de informações ou dúvidas label Sep 19, 2024
@trevineju
Copy link
Member

trevineju commented Sep 19, 2024

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

@ogecece
Copy link
Member

ogecece commented Nov 13, 2024

@jjpaulo2 sabe dizer como seria o fluxo caso tenhamos paginação no resultado da pesquisa? Dá pra montar um arquivo só apenas ou seria necessário mais de um?

Pra mim, está parecendo que usar essa funcionalidade de agrupar em um diário poderia ser mais problema do que solução se a gente não considerar os casos de fronteira como esse. Tendo a pensar que é melhor remodelar o banco pra aceitar esses atos já individualizados na fonte.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
question Solicitação de informações ou dúvidas
Projects
Status: novo
Development

No branches or pull requests

3 participants