|
[03/07]
:. Resumo do dia [03/07] :. Problemas graves com os links da Telefonica em SP [03/07] :. Texas Instruments integra projetor em BlackBarry [03/07] :. Willcom 9: celular pequeno e integrado ao Google [03/07] :. SSDs consomem mais energia que HDs convencionais [03/07] :. Firefox entrou para o Guinness Book [02/07] :. Revista GIMPZINE nº 8 [02/07] :. Os críticos estão errados: o KDE 4 não precisa de um fork [02/07] :. Resumo do dia [02/07] :. Everex preparando Cloudbook de 10,2 polegadas [02/07] :. AMD Phenom de 45 nm poderá suportar memória DDR3 [02/07] :. Instalando o VMWare Workstation 6.x no Mandriva Linux [01/07] :. Um ano de GPLv3: estudos sobre a adoção da licença [01/07] :. Google e MPF entram em acordo sobre pedofilia no Orkut [01/07] :. Fotos do Eee Monitor: o 'iMac' da Asus :. Mais noticias » |
Este artigo foi escrito para participar de uma promoção em uma outra publicação, porém na época eu solicitei a sua retirada e hoje seus direitos se resumem aqui para o Guia do Hardware.net Você pode copiar e colar em seu site, desde que contenha meus créditos e um link para cá ok? :) Espero poder ajudar com esse meu artigo, onde abordarei as vantagens da troca de informações entre seu software e seu site. Bom, chega de papo furado e vamos ao que interessa: Programação :) Porque integrar?
Atualmente nas grandes cidades existe uma grande concentração de serviços de banda larga e isso tornou nosso trabalho mais interessante, pois podemos utilizar a internet como ferramenta de desenvolvedor. Tente se lembrar de como era a alguns anos atrás. Quantas vezes eu pensei em fazer um sistema de informação de bugs via web mas acabava não fazendo, pois acesso discado além de ser caro é lento. No fim, eu optava por deixar um e-mail de contato no form about do projeto... As possibilidades para esse tipo de código são enormes, vou citar alguns exemplos que estou imaginando agora: Quando o cliente liga para relatar o erro você já está ciente e tem a resposta, e possivelmente a correção. Você pode informar ao seu cliente sobre novas versões, e inclusive já dar a opção de download da mesma. Fez um software gratuito e espalhou pela web? Coloque um formulário de contato dentro de seu software. Sem problemas, com essa técnica você só precisa de um servidor que interprete ASP, PHP ou qualquer outro script que devolva páginas dinâmicas. Você pode desenvolver um sistema de portal de internet e criar a administração apenas via software. Imagine administrar uns 30 sites apenas com alguns cliques e apenas um software rodando localmente? Destrave seu software com uma consulta online em seu database. O pagamento foi feito? use uma conexão segura e libere o software de seu novo cliente em tempo real. Basta ele clicar em um "[ Verificar pagamento ]" por exemplo. Adapte o código para seu uso e necessidade. Agora vamos entender como tudo funciona: Analisando o funcionamento:
Criar uma conexão entre dois micros geralmente é uma coisa meio chata de se fazer, pois exige alguns detalhes e certos cuidados que se não observados devidamente, colocam os micros e os dados em perigo. Mas existe uma forma muito comum de se fazer uma transferência de dados: O "Submit" que é amplamente utilizado nas páginas que encontramos por aí. Algo simples como: <form action='http://dominio.com/pagina.php' method='post'> Pra quem não conhece, esse é um script HTML que envia para o script "pagina.php" a variável "nome" contendo o valor "valor". O dado só é enviado se o botão "Enviar" for clicado pelo usuário. O que nosso projeto faz? Ele monta esse formulário e faz o envio para o script, apartir de qualquer evento de seu software. Agora que já falamos um pouco sobre o funcionamento no software, vamos entender sobre o servidor e o motivo pelo qual indico essa forma: Analisando o servidor:
Na maioria dos casos o desenvolvedor aluga um diretório em um servidor web para colocar o seu site com cadastro de clientes, propaganda, etc. E se quiser integrar os seus softwares ao site ele pode criar uma conexão direta com o servidor, mas acaba esbarrando em vários problemas: E ainda teríamos muitos outros problemas. Neste caso a melhor opção (e bem mais cara) seria a locação de um servidor dedicado. Mas não vamos gastar dezenas de dólares se podemos fazer isso por apenas alguns reais ao mês. Então é simples, não vamos "reinventar a roda" e vamos usar o que já temos: o httpd e a porta 80. Resumindo bem, você vai fazer uma espécie de browser dentro do seu sistema, e o servidor vai recebê-lo tão bem como se fosse seu cliente navegando pelo seu site. Vamos ver a seguir um pequeno exemplo para entender bem o funcionamento. O famoso "Hello World!"
Eu vou usar como exemplo uma conexão com um script PHP aqui dentro de minha máquina. Criei um diretório chamado "uploadmaster/site/" na raiz de meu Apache, já preparado para interpretar PHP e dentro deste diretório salvei um arquivo chamado "script.php". Veja abaixo o conteúdo do mesmo: <?php O script acima quando executado em um navegador web apenas imprime a frase "Hello World!" na tela. Não vamos entrar em detalhes quanto ao funcionamento do PHP, nosso foco é com o Delphi/Kylix. Vejam como ele faz: ![]() Mas e se eu quiser pegar esse "Hello World" e colocar dentro de um showmessage quando meu usuário clicar em "Ler Mensagem"? Usarei o componente "idHTTP" do Indy. Vejam no meu form como está: ![]() E sendo executado: ![]() Vamos ao código: No evento "onclick" do botão precisamos definir a url do script no componente idHTTP: Veja abaixo: procedure TForm1.Button1Click(Sender: TObject); E o tão esperado resultado: ![]() Perfeito :) Com apenas uma linha já entramos em uma página da web, pegamos o conteúdo da mesma e jogamos dentro de uma caixa de mensagem. Obtendo dados mais complexos:
Vamos supor que eu tenha uma distribuidora de alimentos, e que eu queira disponibilizar para meus vendedores uma listagem do estoque da loja em tempo real através do software que eu desenvolvi e que está instalado no laptop de cada um. Num mundo perfeito eles teriam conexão wireless e acesso à internet em qualquer parte da cidade, de forma que em minha aplicação teria o botão "Verificar estoque" que faria essa consulta em meu banco, facilitanto assim a vida de todos e economizando os recursos financeiros de minha loja, pois não precisaria mais contratar telefonistas e pagar a conta do celular de cada vendedor. Do lado do servidor eu teria um script que faria essa consulta ao banco e me devolveria esses dados da forma mostrada logo abaixo: (Como eu já disse acima, não vou entrar em detalhes sobre o PHP e vou escrever apenas o resultado, como se fosse a saída de meu script, ao ser executado) Arroz\n50 Kg\nFeijão\n200 Kg\nMolho de tomate\n500 latasO "\n" é uma quebra de linha, pois vamos fazer um cache em formato texto na aplicação que vai buscar estes dados. Salvem o conteudo acima num arquivo chamado "estoque.php". Dará o mesmo resultado que daria se fosse uma consulta legítima no servidor de dados. Vejam pelo meu navegador como respondeu: ![]() E vamos ver no software. Crie um segundo botão e insira o código: procedure TForm1.Button2Click(Sender: TObject); begin Resultado: ![]() Como a resposta veio correta, vamos tratar a mesma para guarda-la em uma TStringList. O primeiro passo é trocar todos os "\n" por quebras de linha: Veja o código como ficou: procedure TForm1.Button2Click(Sender: TObject); E o resultado: ![]() Explicações básicas: Declarei uma variável "estoque" como variável de texto. Guardei nessa variável o resultado obtido pela web. Quebrei em várias linhas, respeitando a localização do "\n". Adicione mais um botão e um TStringList ao seu form, veja o meu: ![]() E vamos ao código do terceiro botão. Será por ele que iremos inserir o resultado do script no grid. Antes, vamos analisar os dados. Temos as informações agrupadas de dois em dois (Arroz, 50 Kg - Feijão, 200 Kg...). Então precisamor preparar esse grid para exibir estes dados. Como são duas colunas, faça o seguinte no evento onclick do botão3: procedure TForm1.Button3Click(Sender: TObject); Isso irá fixar o grid com duas colunas e uma linha fixa com os títulos. Para saber a quantidade de linhas que iremos utilizar, devemos criar uma TStringList para jogar o resuldado do script. Veja abaixo o evento de cima modificado e comentado: procedure TForm1.Button3Click(Sender: TObject); E o resultado sendo executado: ![]() Se optar por usar um componente visualizador de HTML, você pode até construir um browser dessa forma :) Devo alertar para o uso de try quando forem trabalhar na web. O tratamento de possíveis erros é fundamental para um software profissional. Neste caso aqui não usei o mesmo por se tratar de um software educativo e o servidor web ser meu, em minha rede local. Outro alerta é sobre o quesito segurança. Criem os scripts com login, sessions, cookies, http_referer... Tudo que possa dificultar um acesso que não seja de origem de seu software. o Componente idHTTP é bem completo, veja a documentação dele. Enviando dados pela web
Essa pra mim é a parte mais interessante. Criei um script recebe.php que recebe os dados e salva em um arquivo txt. Veja o código dele abaixo: <?php Resumindo, ele faz o seguinte: No software precisei usar uma função para tratar a variável mensagem, afinal estou enviando via GET e dependendo do texto digitado, poderiam ocorrer alguns erros. Segue a função: function tratavariavel(entrada: String): String; Esta função não é de minha autoria, eu encontrei na web já tem alguns anos e nem sei quem é o autor. (Avisado :)) Adicione no seu form mais um botão, e um TMemo. Veja abaixo a imagem: ![]() E no evento de click deste botão, veja o código que eu inseri, devidamente comentado: procedure TForm1.Button4Click(Sender: TObject); Bem simples não? Esses componentes do Indy são muito úteis e nos fazem ganhar bastante tempo. Vamos ao teste: Digitei minha mensagem: ![]() Cliquei em "Enviar mensagem" e o temos nosso resultado: ![]() Vamos confirmar se realmente o arquivo foi criado, e se minha mensagem está lá dentro: ![]() Feito. Agora de posse dessas informações basta um pouco de criatividade para fazer muitas outras coisas. Já podemos ver, editar, deletar, enfim: administrar um banco de dados e sem precisar de nenhuma configuração especial no servidor. Basta suportar linguagens dinânicas e claro, ter um banco de dados disponível. Não existe fronteira. Pode ser um servidor Windows com IIS ou um FreeBSD com apache. Seu software irá funcionar. Claro que para aplicações complexas e seguras devemos utilizar o método POST [ idHTTP1.Post('url',tstringlist) ], tratar todos os possíveis erros (timeout, conexão já existente, conexão encerrada, 404, etc) e nos dedicar muito na segurança. Quando forem desenvolver os scripts, imaginem que o seu software será um "navegador personalizado", e façam coisas específicas para ele. Uma boa idéia é consultar o HTTP_REFERER e se não for o que você inseriu nas linhas de seu software, recusar a conexão. Lembrem-se: Você não pode evitar conexões não autorizadas, mas pode dificultar ao máximo. Uma boa senha e um servidor seguro não resolvem nada se o sistema de autenticação é falho. Software utilizado: Kylix Open Edition versão 2.0 + indy 9.00.03. (Sim, é a versão gratuita) ATENÇÃO: Não utilizei nenhuma função específica para o linux, logo o fonte é 100% compatível com o CLX na versão Windows, desde que você tenha o Indy instalado. Caso tenha dúvidas, escreva para mim pelo email avalle[no-sp@m]guiadohardware.net Este eu encerro por aqui, espero que seja util e ajude muitas pessoas. » Gostou do texto? Veja nossos livros impressos
|