Capturando Data e Hora da Internet
Nota importante: para ter acesso aos vídeos e arquivos exemplos deste site, adquira um dos planos apresentados abaixo. Você pode comprar em até 5x no Cartão de Crédito.
Veja como comprar e saiba mais sobre o material oferecido, clicando aqui.
Podemos acessar o Internet Explorer, via código e assim capturar ou passar dados para uma página web de nosso interesse.
Capturar dados pode ser uma tarefa simples ou complicada, isso depende de como a página web foi construída. Por exemplo, se o programador usar o atributo ID para identificar, de forma exclusiva, os controles de um formulário na página, ficará muito fácil capturar as informações, utilizando o comando getElementById .
Observe na linha HTML abaixo, o uso do atributo ID no campo que fornece a Data e a Hora, da nossa página dataweb.asp.
<form method="get" name="frmRegistro">
<p><input type="text" id="ds" name="dataweb" value="<%=Cdbl(now())%>" size="18"></p>
</form>
Preste bem atenção nos comentários do código utilizado para capturar a data/hora da página dataweb.asp e veja como a tarefa se torna simples com a presença do atributo ID.
Como saber se os campos de um formulário da página utilizam o ID ?
Como exemplo, clique aqui para abrir a página dataweb.asp.
Clique sobre a página, com o botão da direita do mouse.
Selecione a opção "Ver código-fonte" - Observe a seta, na imagem abaixo:
Veja na imagem abaixo, o Identificador Exclusivo ID, do campo que fornece a data e a hora.
O que fazer quando não houver o Identificador Exclusivo ID?
Clique aqui para abrir a página do Observatório Nacional, na qual podemos extrair a data e a hora.
Ao investigar o código HTML da página, observamos que a data e a hora estão em uma tabela e sem o atributo ID, na tag <TD>.
Para este caso, vamos tratar o código HTML da página como um simples texto e utilizarmos algumas das funções de manipulação de string do Access para extrair o valor desejado.
Antes de aplicar a técnica diretamente na página HTML, vamos treinar o uso das funções envolvidas em um caso simples.
Como exemplo, observe os seguintes textos:
"Avelino Sampaio completa 40 anos no dia 7 de dezembro"
"João Henrique completa 102 anos no dia 5 de fevereiro"
"O sobrinho Luiz Claudio completa 5 anos no dia 25 de março"
Como extrair as idades dos textos acima? O primeiro passo é identificar uma palavra ou uma frase referencial, que esteja presente em todos os textos e que esteja o mais próximo possível do valor que desejamos extrair. A palavra "completa" e a palavra "Anos" são as nossas opções de referência mais próximas. Vamos optar pela palavra "Completa".
Usaremos a função InStr(), que retorna à posição da palavra, dentro do texto.
Instr("Avelino Sampaio completa 40 anos no dia 7 de dezembro","completa") ::> Retorna à posição 17 Instr("João Henrique completa 102 anos no dia 5 de fevereiro","completa") :::> Retorna à posição 15
Instr("O sobrinho Luiz Claudio completa 5 anos no dia 25 de março","completa") :::> Retorna à posição 25
Observe que somando a posição da palavra "completa", dentro do texto + 8 caracteres correspondentes ao comprimento da palavra "completa" + 1 caracter de espaço, obtemos a posição exata, aonde começa o valor da idade.
PosiçãoIdade = InStr("Texto","completa") + 9
PosiçãoIdade será utilizada para indicar na função Mid() o início da posição no texto, do valor a ser resgatado.
O comprimento da idade, como podemos observar nos textos acima, pode variar de 1 a 3 caracteres. Vamos resgatar pelo comprimento máximo 3
Idade = Mid("texto",PosiçãoIdade, 3)
Para os três textos exemplos, temos como resultado:
Idade = 40<espaço> Idade = 102 Idade = 5<espaço>a
Dependendo da idade, podemos ter no resultado o caracter "<espaço>" ou os caracteres "<espaço>a". Usaremos a função Replace() para suprimir a letra "a" e a função Val() para suprimir o <espaço>.
Idade = Val(Replace(idade, "a",""))
Pondo em prática o treinamento
Volte a observar o código HTML da página do Observatório Nacional, na imagem acima. Veja que a nossa frase referencial mais próxima do resultado é "Hora Oficial de Brasília". Somando a posição desta frase referencial com mais 82 caracteres, teremos a posição exata no texto, dos valores Data e Hora.
intPos = InStr(PaginaHtml, "Hora Oficial de Brasília") + 82
O comprimento máximo da Data/Hora é de 19 caracteres (dd/mm/yyyy hh:mm:ss). Já que temos a posição inicial (intPos) da data/hora a ser extraída, usaremos na função mid():
datahora = mid(PaginaHtml, intPos, 19)
Observei que o resultado não é fixo em 19 caracteres, podendo ser com 17 caracteres (1/1/2014 13:05:10) ou com 18 caracteres (5/10/2013 15:00:56). Isso implica em caracteres indesejados no resultado, conforme lista exemplo abaixo:
mid(PaginaHtml, intPos, 19) ::::> 1/1/2014 13:05:10</ mid(PaginaHtml, intPos, 19) ::::> 5/10/2013 15:00:56< mid(PaginaHtml, intPos, 19) ::::> 15/10/2013 08:17:00
Usaremos a função Replace() para extrair o caracter "<" ou os caracteres "</", ficando o resultado final desta forma:
datahora = Replace(Replace(Mid(PaginaHtml, intPos, 19),"</",""), "<","")
Agora preste bem atenção nos comentários da função completa, usada para extrair a Data e a Hora da página do Observatório Nacional:
O risco
É muito arriscado utilizar este tipo de busca pelo código HTML, pois qualquer modificação que o programador fizer na página, entre o texto de referência (Hora Oficial de Brasília) e o valor da Data/Hora, acarretará erro na função. Então, o mais garantido é escolher páginas que se utilizam do ID.
Outras Técnicas
Existem outras técnicas de busca pelo código HTML e que serão apresentadas em outros artigos do site. Caso queira se aprofundar, estude pelo oráculo Google, os seguintes comandos:
innerText, outerText, innerHTML, outerHTML, Document.all getElementsByTagName("table"), tbl.Rows, row.Cells
Função Auxiliar para verificar conexão com a internet.
Segue abaixo a função WMI, que realiza um PING na página e identifica se a conexão está ativa entre o micro e a página.
Caso a conexão não esteja ativa, a idéia é abortar a abertura do Internet Explorer, nas funções propostas. Observe esta função fncSiteAtivo() no primeiro código, apresentado no artigo.
Arquivo exemplo.
O formulário do arquivo exemplo possui dois botões para resgatar a Data e a Hora dos sites UsandoAccess e Observatório Nacional.
Desafio
Tente extrair o data e hora do site http://horariodebrasilia.org
Bom estudo!
Os dez artigos mais visitados
MontaRibbons v.7.0 - Assistente completo para criar ribbons no Access
Vídeo - Controle personalizado de Acesso de Usuários
Vídeo - Aprenda sobre filtragens
Vídeo - Segurança máxima, usando o OPEN
Uma ajuda para quem está começando um negócio ou um projeto
Integrando o Access com Servidor MySQL - Introdução
Desabilitando a faixa(ribbon) superior do Access
Vídeo - Programação de relatórios - Parte 1
Como carregar o seu menu sem que ele vá para lista de suplementos
Adquira o kit UsandoAccess e aprenda em alta velocidade
24 comentário(s) Almir Rogerio 03/08/2023 14:47:37 Avelino primeiro quero agradecer por tudo que vc ja me ajudou, esse é um dos melhores sites que gosto. Qro registar uma pergunta: se eu criar um form google para obter algumas respostas, depois que estas respostas estiverem sendo preenchidas em uma planilha google, eu escolho a opção de publicar esta planilha, gostaria de saber se tem como eu alimentar uma tabela do access com essa planilha? e como realizar essa conexão? se alguem puder me ajudar eu agradeço Mauro A. Griggio 28/06/2023 05:48:45 Estou adorando esses e-mails com dicas muito oportunas. Obrigado VITOR JOSE DE PAULA 27/06/2023 11:32:14 Obrigado Avelino; um dos pilares em referencia para programadores access. alaor 26/06/2023 04:55:34 só faltou dar uma cutucada de leve naquele programador master hiper blaster pica das galaxias do itlab que gastou muito dedo pra tentar convencer que não tem jeito de saber se a net ta conectada hahaha Avelino Sampaio 29/01/2022 19:23:26 Ronilson, veja no tutorial: Vídeo - Sistema Shareware com liberação online Bom estudo! Ronilson Silva 28/01/2022 11:02:07 Avelino bom dia e agradeço a dica que esta resolvendo um dos muitos problemas que tinha, no entanto no inicio do tópico você diz que também é possível inserir um dado em uma pagina Web. Ja procurei em vários tutorias e tópicos mais sem êxito, pode nos mostrar como isso é possível. Obrigado pela sua grande ajuda aos amantes do Access. []´s Ronilson Aristóteles Luciano 29/10/2021 08:14:19 Avelino, Windows 7 Professional, 32 Bits. Access 2010, 32 bits. Grato. Avelino Sampaio 29/10/2021 06:33:23 Aristóteles, qual é versão do seu Windows ? 7 ou 8 ? 32 ou 64 bits ? Seu Access 2010 e de 64 ou 32 bits ? No aguardo Aristóteles Luciano 27/10/2021 14:30:16 Prezado Avelino, Primeiramente, obrigado por mais essa luz. Não obtive sucesso em nenhuma das formas. Em todas elas, recebo o erro "O objeto não aceita esta propriedade ou método" ao tentar passar o código para a variável PaginaHtml. É necessário adicionar alguma biblioteca? Uso o Access 2010. Grato! Bruno La Terza 23/09/2021 19:05:29 Avelino, gostaria de parabeniza-lo pelo site. Realmente é um impulso enorme aos usuários iniciantes ou não. Bom ... como me encaixo na categoria de iniciantes, venho aqui também tentar esclarecer algumas dúvidas. Utilizo o Windows 8.1, com EI 11 nativo (versão 11.0.9600) obs. sem possibilidade de instalar o IE10. Access 2010 32bits Pelo que andei pesquisando o readystate . document.complete.... document.all. ..... e alguns outros no IE11 foram desabilitados.... Estou procurando algum modo de verificar o carregamento completo de uma página web, e também a verificação do carregamento após um evento click no ie11... Agradeço qualquer ajuda Até mais WELSON ZEFERINO 29/08/2021 09:52:51 Avelino, primeiramente parabéns pelo seu trabalho. Excelente! Não poderei realizar o desafio no site http://horariodebrasilia.org, pois no div id=relogio tem um comentário que avisa "!--<<< AVISO: NÃO USE ESTA HORA EM APLICATIVOS --> kkkkkkkkkk Marcio Melo - RJ 10/07/2021 16:03:13 Gostei muito desse artigo, tava precisando pegar algumas informações de home page de informação de clima tempo para montar numa rádio online no software Zararadio tem uma opção de falar as horas, temperatura e umidade só precisava ter em um arquivo txt formatado com essas informações. Avelino muitas de suas dicas podemos usar em outras frentes, montar um aplicativo e no agendador de tarefa executa-lo de tempo em tempo para obter um determinado documento formatado com informações de alguma página na internet. Show, mais alguns mistérios desvendados... Forte abraço! Avelino Smpaio 02/07/2021 05:02:30 Renato, a ideia de pingar para um site é de verificar se a conexão com a internet está estabelecida com a máquina. Basta então pingar para a página do Goggle. Sucesso! Renato Silva 01/07/2021 18:46:14 Em alguns sites os sistemas de segurança não aceitam PING. Tiago 11/06/2021 15:25:24 Pelo cmd também não consigo, dá "esgotado o tempo limite do pedido", para qualquer site. Mas pelo browser acesso normalmente. abs. Avelino Sampaio 11/06/2021 06:39:27 Tiago, usando a janela do CMD vc consegue dar um PING em uma página ? c:\user\Tiago> ping www.usandoaccess.com.br No aguardo Tiago 10/06/2021 11:16:19 Parabéns Avelino, muito bom e muito bem explanado! Acredito que posso usar esse método no seu exemplo do sistema shareware ao ao invés do ActiveX Web Browser, certo? Contudo, a título de feedback, a função fncSiteAtivo() está retornando false apesar de eu conseguir acessar a página, então comentei as linhas dela forçando a abertura do IE sempre. Como será gerado um erro se não conseguir acessar a página e o erro já é tratado está funcionando muito bem aqui. Estou no trabalho atrás de firewall e proxy. Obrigado por compartilhar seu conhecimento. Diamantino 08/06/2021 19:36:26 Muito bom mesmo, meus parabéns, continue compartilhando conosco é sempre um prazer. Abraços. Obrigado por lembrar de mim. Wellington Rodrigues - MG 04/06/2021 13:19:40 Muito bom esse artigo. Mais uma vez um excelente conteúdo para podemos aproveitar!!! Muito obrigado por compartilhar um pouco do seu conhecimento com todos nós... Valeu!!! Alessandro Batistuti 04/06/2021 08:52:12 Excelente Avelino, com esse exemplo abre-se um leque para várias coisas, obrigado por compartilhar conosco seus conhecimentos. Isaias Carvalho - BA 30/05/2021 11:52:35 Avelino, Parabéns!! Um excelente artigo, perfeito para perfeição da questão segurança em nossos sistemas. Parabéns!! Avelino Sampaio 14/01/2021 01:03:49 Wagner Estude também sobre WMI. Veja como capturar data do servidor: https://social.msdn.microsoft.com/Forums/pt-BR/3ab8c11a-bc66-472d-85a7-30b1150ed4b7/pegar-datahora-de-outro-computador?forum=vscsharppt Mais sobre WMI neste meu artigo: https://www.usandoaccess.com.br/dicas/wmi-e-environ-gerenciando-windows-e-hardware.asp?id=1&idlista=130#inicio Bom estudo! Avelino Sampaio 14/01/2021 00:43:22 Wagner veja neste artigo, utilizando API: http://www.macoratti.net/vb_hserv.htm Adapte as API's (prtSafe) com as orientações deste meu artigo: https://www.usandoaccess.com.br/tutoriais/configurar-api-access-de-64-e-32-bits-ptrsafe.asp?id=1#inicio Sucesso! Vagner 13/01/2021 17:48:16 Avelino, teria como buscar a data do servidor? pq meu projeto roda na intranet do trabalho. O acesso a internet depedne de um login antes. Então teria que ser adata dio servidor. |