quinta-feira, 12 de agosto de 2010

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

Nenhum comentário:

Postar um comentário

Postagens populares

Marcadores

delphi (60) C# (31) poo (21) Lazarus (19) Site aos Pedaços (15) sql (13) Reflexões (10) .Net (9) Humor (9) javascript (9) ASp.Net (8) api (8) Básico (6) Programação (6) ms sql server (5) Web (4) banco de dados (4) HTML (3) PHP (3) Python (3) design patterns (3) jQuery (3) livros (3) metaprogramação (3) Ajax (2) Debug (2) Dicas Básicas Windows (2) Pascal (2) games (2) linguagem (2) música (2) singleton (2) tecnologia (2) Anime (1) Api do Windows (1) Assembly (1) Eventos (1) Experts (1) GNU (1) Inglês (1) JSON (1) SO (1) datas (1) developers (1) dicas (1) easter egg (1) firebird (1) interfaces (1) introspecção (1) memo (1) oracle (1) reflexão (1)