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úniorNo 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