sábado, 5 de julho de 2014

Criando uma automacao com C# para captura processos judiciais - Parte I

Aaueba!,

Hoje vou apresentar para vocês como criar um projeto para fazer a leitura de processos jurídicos no sistema de automação da justiça o SAJ. Este é um projeto bem simples, mas que pode servir como um norte para quem estiver precisando fazer algo parecido.


Bem, as ferramentas que iremos utilizar são:  

1) Visual Studio com suporte ao framework 4.0 para escrever o programa em C#, o download da ultima versao pode ser obtido no site da Microsoft ou clicando aqui.

2) Fiddler para depurarmos as requisições web e o download pode ser obtido no site da Telrik ou clicando aqui. Em breve irei publicar um post explicando detalhadamente como utilizar este aplicativo embora não tem muito segredo.


3) E por ultimo a DLL do Html Agility Pack para nos auxiliar na consulta do html retornado das paginas requisitadas, você pode fazer o download clicando aqui.


Depois de instalado as ferramentas, vamos criar um novo projeto do tipo Windows Form Application no Visual Studio e vamos dar o nome de WallE


O seu projeto no Visual Studio devera estar parecido como na figura ao lado.


Feito isto vamos adicionar um nova classe ao projeto e vamos dar o nome de  Automacao.


Com a classe criada, e o control + c no gatilho, substitua o código da classe pelo listado abaixo:

namespace WallE
{
    using System;
    using System.Net;

    public class Automacao : WebClient
    {
        private readonly CookieContainer _container = new CookieContainer();

        protected override WebRequest GetWebRequest(Uri address) {
            var requisicao = base.GetWebRequest(address) as HttpWebRequest;

            if (requisicao != null) {
                requisicao.Method = "Post";
                requisicao.CookieContainer = _container;
            }

            return requisicao;
        }
    }
}


Note que a nossa classe esta herdando da classe WebClient e sobrescrevendo o método GetWebRequest, isto é necessário para que possamos armazenar os cookies de cada requisição.

Agora vamos abrir o programa Fiddler e configura-lo para monitorar as requisições web, as opções deverão estar igual a imagem ao lado, depois de configurado vamos acessar o site do SAJ ( https://esaj.tjsp.jus.br ) e você vai observar que o fiddler começara a monitorar a sua navegação pelo site e as urls acessadas poderão ser visualizadas no painel esquerdo do fiddler. Se até agora foi tudo bem então vamos criar os métodos para que a nossa automação possa acessar o site.

Abra o "Form1" que foi criando juntamente com o nosso projeto e adicione um botão, vamos chamar este botão de btnProcessar, depois clique duas vezes sobre ele para gerar o evento click. Neste mesmo Form1, adicione as variáveis globais exibidas no  código abaixo:

private const string CodigoForo = "11";

// Vamos ver se o prefeito de São Paulo tem processos nas costas.
private const string NomeParte = "Fernando Haddad"; 
private const string UrlESaj = "http://esaj.tjsp.jus.br/";
private Automacao _automacao;

Agora crie um método chamado ConsultarParteProcesso e substitua-o com o código abaixo. 


private string ConsultarParteProcesso() {
            _automacao = new Automacao();
            _automacao.Headers.Add("user-agent",
                                   "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; InfoPath.2; .NET  CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET CLR 1.0.3705; .NET4.0C; .NET4.0E)");

            var parametros = new List {
                "cbPesquisa=NMPARTE",
                "conversationId=",
                "dePesquisaNuAntigo=",
                "dePesquisaNuUnificado=",
                "foroNumeroUnificado=",
                "localPesquisa.cdLocal=" + CodigoForo,
                "numeroDigitoAnoUnificado=",
                "paginaConsulta=1",
                "tipoNuProcesso=UNIFICADO",
                "dePesquisa=" + NomeParte
            };

            return _automacao.DownloadString(string.Format("{0}cpo/pg/search.do?{1}",
                                                           UrlESaj,
                                                           string.Join(",", parametros.ToArray()).Replace(",", "&")));
        }

E por fim substitua o evento click do botão btnProcessar pelo código abaixo:


private void btnProcessar_Click(object sender, EventArgs e) {
            try {
                string pagina = ConsultarParteProcesso();

                if (pagina.Contains("Não existem Informações disponíveis para os parâmetros informados."))
                    MessageBox.Show(@"Olha que beleza! O camarada nunca foi processado neste forum.");                
            }
            catch (WebException we) {
                Console.WriteLine(we.Message + @"\n" + we.Status.ToString());
            }
        }

CONTINUA...