Desenvolvimento - ASP

Garimpando componentes - parte II

Neste artigo vamos explorar outra possibilidade muito interessante de uso do AspTear - a comunicação entre sites diferentes, com o envio e recebimento de informações entre os sites.

por Eraldo Júnior



No artigo anterior apresentamos o componente gratuito AspTear e colocamos em prática o seu funcionamento com uma aplicação muito útil - o cache de páginas dinâmicas.

Neste artigo vamos explorar outra possibilidade muito interessante de uso do AspTear - a comunicação entre sites diferentes, com o envio e recebimento de informações entre os sites.

Imagine que uma determinada aplicação deve checar se o CPF de uma pessoa corresponde ao nome que foi digitado. Somente em caso positivo o cadastro é aceito e alguma informação ou compra liberada. Resumindo : nossa aplicação deve checar se um CPF pertence a uma determinada pessoa. Para fazer este trabalho não existe nada melhor do que o site da Receita Federal, que retorna o nome da pessoa para um determinado CPF e a situação do mesmo, se está regular ou foi cancelado.

Existem dois problemas básicos para o desenvolvimento da solução:

1. Temos que ter uma maneira que permita trocar dados com outro site, no caso o da Receita Federal.

Este problema é plenamente resolvido com o uso do AspTear.

2. Devemos esperar uma padronização de resposta do site para que possamos compreender os dados corretamente, sem ambiguidades fatais.

Infelizmente este é um ponto fraco. O site da Receita Federal devolve apenas HTML, não existe nenhuma padronização que facilite a compreensão correta das informações. No entanto, não devemos desanimar, podemos extrair do HTML bruto as informações que necessitamos. Existe um risco de que se as informações mudarem muito radicalmente neste HTML o nosso algoritmo pare de funcionar, mas podemos minimizar este risco construindo a lógica do nosso programa da forma mais genérica possível.

Normalmente, quando dois sites parceiros precisam trocar informações, as equipes de desenvolvimento conversam bastante para criarem uma padronização absolutamente precisa das informações. Um exemplo de um formato padronizado de saída de dados pode ser o seguinte:

Listagem 1: Exemplo de formato de saída de dados

<nome>Eraldo Sergio</nome>
<situacao>Regular</situacao>

Qualquer semelhança com parte do XML não é mera coincidência :))

Mas, infelizmente, já vimos que este não é o caso na questão do site da Receita Federal, portanto, vamos a luta.

Vamos atacar este dois problemas, um de cada vez. Primeiro devemos pegar os dados do site da Receita Federal.

Listagem 2: Obtenção e tratamento dos dados do site da Receita Federal

<%
function tira_acentos(nome)
nm_tranformado = UCase(trim(nome))
nm_tranformado =replace(nm_tranformado,"É","E")
nm_tranformado =replace(nm_tranformado,"Ç","C")
nm_tranformado =replace(nm_tranformado,"Ã","A")
nm_tranformado =replace(nm_tranformado,"Ú","U")
nm_tranformado =replace(nm_tranformado,"Ó","O")
" não vou desenvolver toda a função aqui, é um bom exercício 
e não é difícil. 
"Ela é necessária porque no site da Receita os nomes estão 
sem acentos e em caixa alta, portanto temos que transformar o 
nome digitado pelo usuário para podermos compará-lo com o nome 
da Receita Federal. 
"Outra possibilidade é exigir que o usuário digite o nome 
tal como no documento de CPF.
tira_acentos = nm_tranformado
end function
" vamos considerar que request.form("nome") é o nome digitado pelo 
usuário em um formulário e que request.form("cpf") é o seu CPF. 
Devemos então checar se este Cpf pertence a este nome.
on error resume next
" primeiro vamos ver se o nome veio em branco. Caso positivo não faremos nada.
if len(trim(request("nome")))<>0 then
Const Request_POST = 1
Const Request_GET = 2 
Set xobj = Server.CreateObject("SOFTWING.ASPtear")
variavel_string = xobj.Retrieve("http://www.receita.fazenda.gov.br//Scripts/srf/cpf/cpf2000.dll?Consultar&CPF="&request.form("cpf") &"&indAutoatend=0" , Request_GET ,"", "", "")
" checa se ocorreram erros de conexão com o site da 
Receita tais como timeout ou site indisponível.
if err.number=0 then
" Vamos primeiro retirar o nome do usuário do arquivo HTML da Receita.
" as variaveis abaixo marcam o início e fim dos marcadores de HTML para o nome.
" Isso significa que o nome está entre estes marcadores.
str_inicio="Nome:"
str_fim="</b></td></tr>"
" existem mais 26 caracteres após a ocorrência da string Nome:, 
"por isso somamos 26 na variável abaixo.
posicao=instr(variavel_string, str_inicio)+26
posicao2=(len(variavel_string) - ( len(str_inicio)+posicao))+1
strtemp=trim(right(variavel_string, posicao2))
posicao=instr(strtemp, str_fim)
nome_usuario_receita=trim(left(strtemp, posicao-1))
" Depois de trasnformar o nome digitado pelo usuário para maiúsculo e retirar os 
"seus acentos usando a função tira_acentos, vamos compará-lo com o nome retirado do 
"arquivo HTML da Receita.
if nome_usuario_receita<>tira_acentos(request("nome")) then
response.write("O nome digitado não corresponde a este CPF.")
else
response.write("O nome digitado corresponde a este CPF.")
end if
" Em seguida vamos ver se a situação do CPF é regular, vamos procurar a 
"ocorrência da palavra REGULAR dentro do arquivo HTML gerado pela Receita usando a função INSTR
if instr(variavel_string,"REGULAR")=0 then
response.write("<p>O CPF está em condição irregular.")
else
response.write("<p>A situação do CPF é normal.")
end if
else
response.write("Ocorreu um problema nos Servidores. Tente mais tarde")
end if
else
response.write("Nome em branco.")
end if 
%>

No próximo artigo continuaremos explorando as possibilidades de comunicação entre sites diferentes usando o componente AspTear.

Abraços e boa programação !!

Baixe aqui os arquivos com o código desta aplicação: http://www.linhadecodigo.com.br/colunas/eraldo/arquivos/eraldo_2.zip

Eraldo Júnior

Eraldo Júnior - Programador há mais de 10 anos, trabalha com desenvolvimento Web há 5 anos, tendo participado como consultor de projetos para as seguintes empresas: Embratel, Rede Globo e Maria Bonita Confecções. Atualmente é o programador do site Ti Master e consultor em projetos Web da empresa Infodream, http://www.infodream.com.br