telecomHall BR

 

Hunter FTP Client (usando Access, Excel e VBA)

quarta-feira, 11 de janeiro de 2012 19:12:00 Categories: FTP
Rate this Content 1 Votes

Quando precisamos acessar um Servidor FTP específico, e baixar ou enviar um ou mais arquivos, a melhor opção é utilizar os programas de FTP padrão, como por exemplo o que recomendamos Filezilla.

 

 

Entretanto, quando essa tarefa passa a ser repetitiva, como quando precisamos baixar diariamente arquivos de várias OSS (via ftp), surge a necessidade de automatizá-la – menos desperdício de tempo, minimização de erros, etc.

E uma forma de automatizar a realização de FTP no Windows é criar uma aplicação que realize esse trabalho.

Vamos ver hoje então como isso pode ser feito?

 

Objetivo

Criar um cliente FTP básico, que nos permita automatizar as tarefas de busca de arquivos localizados em um servidor FTP.

No caso de hoje, vamos utilizar o Microsoft Access com VBA (embora o mesmo possa ser feito com vários outros programas, como o Microsoft Excel).

Já estamos acostumados a utilizar o Access no sistema Hunter, e esse FTP Client é apenas mais um módulo do mesmo, como sempre adequando-se ou utilizando a Estrutura de Arquivos (e Diretórios) já existente.

 

Estrutura de Arquivos

No tutorial de hoje, incluimos então mais alguns Arquivos e Diretórios a nossa estrutura padrão.

 

O procedimento para obter essa estrutura a partir do arquivo recebido é o mesmo, por isso não necessidade de explicarmos novamente.

 

 

Como fazer um FTP no Windows

Existem diversas formas de se realizar o FTP, e no Windows, a mais básica é através do Prompt de comando (‘cmd’).

Basta digitar o comando ‘ftp’ seguido do nome do servidor, e você já verá o prompt solicitando o seu usuário para prosseguir.

Essa forma básica porém torna-se bastante interessante, uma vez que podemos utilizar arquivos do tipo ‘BAT’ para executar a mesma ação – no caso, a sequência de comandos que digitaríamos.

Um arquivo ‘BAT’ nada mais é do que um arquivo de Texto, só que ao invés da extensão ‘TXT’ tem a extensão ‘BAT’. Os arquivos desse tipo são reconhecidos pelo sistema como arquivos de Lote, e quando abertos, acionam as ações necessárias – executando os comandos do mesmo.

Esse é um recurso muito utilizado por em exemplo em Drive Test de dados, onde você pode criar arquivos para realizar Download e Upload automaticamente, enquanto se preocupa apenas em coletar e/ou analisar os dados.

Após efetuar o login (usuário e senha), temos acesso a um prompt FTP. Nota: existe também o acesso Anônimo, mas não é o nosso caso, pois sempre teremos (ou pelo menos deveríamos ter) Servidores protegidos com Usuário e Senha. De qualquer forma, para acessar no modo Anônimo – quando for permitido – basta entrar com o usuário ‘Anonymous’.

Aqui podemos usar uma série de comandos próprios, para realizar as nossas ações (como buscar um arquivo).

Vamos então conhecer pelo menos os comandos FTP básicos para a aplicação de hoje.

 

Lista de Comandos FTP

Existem mais de 40 tipos de comandos FTP, e os mesmos podem ser acessados facilmente através de uma busca na Internet, por exemplo como no website a seguir:

http://www.nsftools.com/tips/MSFTP.htm

Uma observação importante é que estamos falando aqui de comandos para serem usados na linha de comando do Windows. Existe uma outra relação de comandos, os ‘Raw FTP’ que podem ser encontrados da mesma forma, mas fogem ao nosso escopo aqui hoje.

Continuando então, segue uma breve descrição dos comandos mais utilizados:

  • ‘binary’ (ou ‘bin’): utilizar o modo binário nas transferências (explicação mais abaixo).
  • ‘hash’ (ou ‘ha’): permite acompanhar visualmente a evolução da transferência, através da impressão do sinal ‘#’ para cada bloco transferido.
  • ‘get’: para buscar um determinado arquivo (fazer o Download).
    • O comando ‘mget’ faz o mesmo para múltiplos arquivos.
  • ‘put’: para enviar um determinado arquivo (fazer o Upload).
    • O comando ‘mput’ faz o mesmo para múltiplos arquivos.
  • ‘bye’: para encerrar a conexão FTP.

Cabe aqui uma nota sobre a utilização do comando ‘bin’ antes de se realizar as transferências. A outra opção, ou modo de transferência é o ASCII (comando ‘ascii’), que também é o modo default. O modo ASCII é excelente para transferência de arquivos em formato Texto – e só. No modo ASCII, temos compressão do arquivo, o que torna as transferências mais rápidas. Mas quando temos outros tipos de arquivos, como Imagens, Vídeo ou Documentos do Word por exemplo, o modo de transferência que deve ser utilizado é o Binário, pois transfere os arquivo do jeito que eles são, sem alterações.

Cada comando tem sua própria sintaxe. Por exemplo, o comando ‘get’ tem a sintaxe:

get arquivo-remoto [arquivo-local]

Nesse caso, ‘arquivo-remoto’ especifica o nome do arquivo que será buscado. Se for especificado, o parâmetro opcional ‘arquivo-local’ especifica o nome que este arquivo deve ter quando baixado. Caso contrário – não especificado – o arquivo terá o mesmo nome que o remoto.

Para mais detalhes sobre esses e outros comandos, utilize referência como o link sugerido mais acima.

 

Realizando um FTP

Uma vez conhecidos os comandos, e como fazer através da linha de comando, podemos fazer uma transferência manualmente:

  • Criando um arquivo de Texto com as linhas na sequência como seriam digitadas manualmente (um comando por linha);
  • Renomeando esse arquivo para tipo ‘BAT’;
  • E executando esse arquivo (duplo clique por exemplo).

 

A Aplicação

Agora ficou bem simples entendermos como a nossa Aplicação pode ser criada não é mesmo?

De forma bem simples, ela segue os mesmos passos acima, só que ao invés de fazer tudo manualmente, utiliza os recursos do Access e/ou Excel com VBA.

Manipulando os arquivos programaticamente podemos criar loops para diferentes Servidores, diferentes arquivos, e tudo quanto desejarmos.

Como exemplo, temos uma aplicação para baixar os dados de parâmetros de OSS’s GSM e UMTS, para posterior tratamento através do módulo já visto ‘Hunter Parameters Schema’ (um módulo onde mostramos como extrair os dados desses arquivos baixados, e acumulá-los em um banco de dados).

 

A aplicação é bem simples, mas pode ser facilmente melhorada – evoluida – para alcançar os mesmos resultados que os melhores programas de FTP existentes.

De qualquer forma, as opções atuais nos atendem.

Basicamente, basta Editar um arquivo do Excel com as informações de cada conexão (Servidor, Usuário, etc...). Para editar esse arquivo, basta clicar no botão correspondente da Interface Principal.

 

Em seguida, clicar no botão de Exclamação, para processar as entradas FTP.

Você pode também processar apenas linhas (entradas) específicas, bastando utilizar algum tipo de filtro.

No nosso caso, utilizamos uma consulta: ‘qry_FTPConnections’. Essa é uma consulta simples, buscando os dados da tabela ‘tbl_Config_FTP’ – na verdade, a nossa planilha do Excel vinculada, e já vimos diversas vezes como fazer isso.

 

A macro (VBA) processa os registros dessa consulta, que por sua vez, mostra apenas os registros do arquivo original cujo campo ‘FTPCommand’ não está vazio. Resumindo, se você deixar esse campo em branco, a respectiva entrada FTP não será processada!

Assim você pode manter uma lista de todas as suas possíveis conexões, como das OSS’s. E quando for rodar, faz as edições desejadas.

 

Hunter Logs

Para melhorar um pouco mais a experiência, incluímos uma nova funcionalidade – um arquivo de Log. Introduzimos assim mais um conceito que pode ser replicado em qualquer outro módulo que você utilize ou desenvolva.

A medida que executamos, vamos escrevendo os resultados (sucesso, falha, entre outras informações) num arquivo Texto simples, que podemos consultar ao final da execução.

Nessa aplicação, temos um arquivo de Log gerado para cada vez que a mesma é rodada, contendo todas as informações de todas as transações – o que é mais conveniente.

Uma outra possibilidade, que veremos em breve, é a utilização de arquivo de log único, onde as informações vão sendo apenas acumuladas no final do mesmo.

 

Código VBA – Workarounds Utilizados

O código necessário, pouco mais de 50 linhas, foi escrito de forma bem simples, totalmente comentada, e usando os procedimentos mais adequados para manipulação de arquivos, e pequenos truques para contornar alguns possíveis problemas.

Um desses problemas ocorre quando na manipulação de arquivos, precisamos criar e deletar arquivos temporários. O processamento é muito rápido, e pode ser que o Sistema não tenha tempo de disponibilizar o arquivo, travando o mesmo. Nesse caso, se o arquivo a ser deletado não estiver disponível, teremos o erro 70 – ‘Permission Denied’.

Para resolver esse problema por exemplo, resolvemos não apagar os arquivos temporários, e sim armazená-los em um diretório separado – ‘Transactions’. De certa forma isso acaba sendo bom, pois é possível verificarmos cada um desses arquivos, em caso de algum problema.

Em aplicações desse tipo, é comum as pessoas utilizarem o mesmo nome, e ‘esperarem’ um certo tempo, até que o mesmo esteja disponível – liberado – pelo sistema para manipulação. No nosso caso, em cada transação, adicionamos um sufixo com a data e hora em que o mesmo foi processado. Assim, encontramos uma solução para esse tipo de erro. Além disso, quando não usamos pausas fixas – deixamos de perder tempo, ou seja, tornamos a nossa aplicação mais rápida.

Resumindo: para cada uma transação, temos arquivos com uma certa data e hora. Enquanto os mesmos estão sendo processados – realizando a transação FTP – podemos criar outros (que vão ter data e hora diferentes!) e continuar o processamento para outras transações.

Embora possa parecer complicado, a solução é bem simples. E se você desejar, pode apagar manualmente os arquivos no diretório ‘Transactions’ ou através de um botão na Interface Principal.

 

Conclusão

Mais uma vez, vimos como utilizar a metodologia Hunter para obtermos auxílio no nosso trabalho.

Hoje por exemplo, vimos como é possível construir uma aplicação ‘FTP Client’ utilizando Excel, Access e VBA.

Como vantagens de uma aplicação customizada como essa, destacamos a possibilidade de automação de tarefas repetitivas, e portanto desnecessárias, ou pelo menos passíveis de serem melhoradas.

Também é possível, de forma consideravelmente simples, extender a aplicação para atender outras finalidades específicas, bastando seguir a mesma idéia dos principais pontos discutidos, e mostrados no código VBA comentado.

Por hoje é isso, e se por acaso você achou interessante, compartilha? Abaixo você tem formas simples e rápidas de fazer isso. E mais uma vez, muito obrigado pela sua atenção.