Busca de CEP com o Lazarus - Parte 1 - UrlEncode

Buscar um endereço através do CEP é importante, tanto para manter as informações do seu cadastro corretas como para evitar fraudes e prejuizos.

Existem vários serviços na web para a busca de CEP, dentre eles podemos citar:

http://www.byjg.com.br/site/xmlnuke.php?xml=onlinecep
e
http://www.buscarcep.com.br/

Neste tutorial vamos aprender a usar o http://www.buscarcep.com.br/ para pesquisar CEP's e auto-preencher formulários de cadastro, usando o lazarus. Tudo o que veremos aqui pode ser aplicado a qualquer outra tecnologia, desde que você saiba lidar com a "matéria prima" necessária.

Matéria prima:
1) Alguma biblioteca para se fazer requisições http a qualquer site.
2) Alguma biblioteca para manupulação de XML
3) Você deve se cadastrar no site http://www.buscarcep.com.br/ e obter uma chave gratuita. A chave gratuita dá o direito a até 10 consultas por minuto. Guarde esta chave.

Primeiro passo: vamos usar a biblioteca synpase para fazer as requisições ao site. Para isso devemos fazer download da mesma no site oficial http://www.ararat.cz/synapse/doku.php da mesma forma que fizemos no tutorial de lazarus + twitter

Você pode colocar os fontes em um diretório que esteja no search path do lazarus ou no mesmo diretório que o programa. Como nosso programa é simples e não pretendemos alterar a biblioteca vamos usar a segunda opção que é mais fácil. Caso use esta biblioteca em muitos projetos a primeira opção torna-se obrigatória.

Antes de começar a mecher com a biblioteca synapse precisaremos criar uma função de UrlEncode. Explicando: alguns caracteres não podem aparecer numa url porque são caracteres especiais, destinados a comandos. Esse é o caso da barra / (separa diretorios/recursos) da interrogação ? (separa url de parâmetros) e assim por diante.

Para que esses caracteres especiais possam ser colocados numa URL eles precisam ser codificados de uma forma especial que usa o caractere % como escape. Por exemplo o caractere         é representado por %20. Esse 20 é hexadecimal e corresponde ao decimal 32, ou seja, o código do espaço na tabela ascii.

Como a chave obtida no site pode ter caracteres especiais, criaremos uma função pública estática e global para transformar alguns caracteres especiais em caracteres "escapados" com %.

Usaremos dois vetores e um laço for aninhado para criar essa função. Não é a maneira mais performática, podemos melhorar isso depois, mas é a mais fácil de se entender e portar para outras linguagens.

function UrlEncode(url: DOMString): DOMString;
var
   substitutos:      array[1..20] of  string = ('%21', '%2A', '%27', '%28', '%29', '%3B', '%3A', '%40', '%26', '%3D', '%2B', '%24', '%2C', '%2F', '%3F', '%25', '%23', '%5B', '%5D', '%2E');
   substituidos:  array[1..20] of  char = ('!', '*', '''', '(', ')', ';', ':', '@', '&', '=', '+', '$', ',', '/', '?', '%', '#', '[', ']', '.');
   i, j: integer;
   tmp: string;
begin
     for i := 1 to Length(url) do
     begin
          for j := 1 to 20 do
          begin
               if url[i] = substituidos[j] then
               begin
                  tmp := substitutos[j];
                  break;
               end
               else
                   tmp := url[i];
          end;
          Result := Result + tmp;
     end;
end; 

Declare esta função na seção implementation e coloque seu cabeçalho na seção interface de sua unit.

function UrlEncode(url: DOMString): DOMString;

Repare aqui que o tipo de entrada e retorno da função é uma DOMString. DOMString nada mais é do que uma WideString de 16 bits normal. Você pode substituir por WideString ou adicionar a unit DOM no seu uses. Perceberá que na unit DOM DOMString está defibido como DOMString = WideString;

Mais tarde falaremos da Unit DOM, necessária para se trabalhar com XML, mas já adiantando: sempre que trabalhar com XML estará trabalhando com Widestrings, que precisarão ser corretamente convertidas para utf-8 a fim de serem exibidas corretamente nos edits e memos.

Informações adicionais
UrlEncode no .net: http://msdn.microsoft.com/pt-br/library/zttxte6w(VS.90).aspx
UrlEncode no php: http://php.net/manual/en/function.urlencode.php
Página que codifica URL's: http://www.albionresearch.com/misc/urlencode.php
A melhor referência sobre UrlEncode: http://www.w3schools.com/TAGS/ref_urlencode.asp

Ir Para:


Parte 1 | Parte 2 | Parte 3 | Parte 4 | Parte 5

Comentários

Postagens mais visitadas deste blog

Detectar o encoding de um arquivo para não corromper ao transformá-lo

erro "ora-12154: tns: não foi possível resolver o identificador de conexão especificado"

Quebras de linha no Delphi 2010