Função para Previsão do Tempo - acessando API do Google

Aqui você poderá oferecer suas Contribuições, Dicas e Tutoriais (Texto ou Vídeo) que sejam de interesse de todos.

Moderador: Moderadores

Stanis Luksys
Colaborador
Colaborador
Mensagens: 1329
Registrado em: 18 Jun 2005 03:04
Localização: São Paulo
Contato:

Função para Previsão do Tempo - acessando API do Google

Mensagem por Stanis Luksys »

Fala Rapazeada,

Estava lendo na internet sobre os vários tipos de recursos on-line que podemos implementar em sistemas, seja através de XML, RSS, JSON ou outros formatos disponíveis em web services mundo afora, e comecei a pesquisar algumas ferramentas do Harbour para interagir com este mundo de informações que é a internet.

Resolvi então fazer uma funçãozinha bem legal em Harbour para pegar a previsão do tempo de determinada cidade em tempo real, acessando a API do Google Weather.

A função utiliza recursos das bibliotecas HBTIP e XHB. Lembrando que a XHB.LIB é um amontoado de funções que só existiam no xHarbour e foram pro Harbour em forma de LIB, portanto quem compilar com o Xharbour não precisa ficar procurando essa lib pelo computador.

Enfim, a função é simples, o mais complicado é entender o retorno que é um hash "hasheado" de dados... rs

Quem quiser ver funfando pode baixar neste link o código-fonte de um exemplo de uso e o programa compilado para Windows:
http://sites.google.com/site/hblibs/exe ... otempo.rar

Obs: Executar preferencialmente pelo Prompt de Comandos.

Aí vai o código:

Código: Selecionar todos

/********* * * * * *
*
*	PrevisaoDoTempo 
*
*	Parametro: string com o 'nome da cidade, estado'
*
*	Retorno: hash com dados sobre o clima
*
*	hash["CidadeBase"]			=> Cidade localizada com este nome
*	hash["CondicaoAtual"]		=> Condição climatica atual na cidade
*	hash["TemperaturaAtual"]	=> Temperatura atual na cidade
*	hash["UmidadeAtual"]			=> Umidade atual na cidade
*	hash["VentoAtual"]			=> Vento atual na cidade (direcao e velocidade)
*	hash["aProximosDias"]		=> Array com a previsao para os proximos dias
*		   aProximosDias	= { cDiaDaSemana, cTempMax, cTempMin, cCondicao }
*
*
*/
FUNCTION PrevisaoDoTempo( cCidade )

	LOCAL oHttp, cXML, oXML
	LOCAL oCidade,	oTemperatura, oUmidade, oVento, oCondicao
	LOCAL oPrevisao, oTagAtual, oIterator
	
	LOCAL cDia, cMax, cMin, cCond, i
	LOCAL	aDias := {}
	
	LOCAL hPrevisaoDoTempo	:= HB_Hash()
	LOCAL hDiasSemana 		:= HB_Hash()
	
	hDiasSemana["dom"] := "Domingo"
	hDiasSemana["seg"] := "Segunda-feira"
	hDiasSemana["ter"] := "Terçaa-feira"
	hDiasSemana["qua"] := "Quarta-feira"
	hDiasSemana["qui"] := "Quinta-feira"
	hDiasSemana["sex"] := "Sexta-feira"
	hDiasSemana["sáb"] := "Sábado"

	cCidade := StrTran( AllTrim( cCidade ), " ", "%20" )
	
	oHttp:= TIpClientHttp():new( "http://www.google.com/ig/api?weather="+cCidade+"&hl=pt-br" ) 
   IF ! oHttp:open()
      RETURN 0
   ENDIF
	cXML := oHttp:readAll()
	oHttp:close()
			
   oXML := TXmlDocument():New( cXML )
   IF oXML:nError != HBXML_ERROR_NONE
      RETURN 0
   ENDIF
	
	oCidade 		  := oXML:findfirst( "city" )	
	oCondicao		 := oXML:findfirst( "condition" )
	oTemperatura    := oXML:findfirst( "temp_c" )
	oUmidade		  := oXML:findfirst( "humidity" ) 
	oVento		    := oXML:findfirst( "wind_condition" ) 
	
   oPrevisao := oXML:findfirst( "forecast_conditions" )
   IF oPrevisao == NIL
		RETURN hPrevisaoDoTempo
   ENDIF
   
	DO WHILE .T.
      oIterator := TXmlIterator():New( oPrevisao )
      DO WHILE .T.
         oTagAtual := oIterator:Next()
         IF oTagAtual == NIL
            aAdd( aDias, { cDia, cMin, cMax, cCond } )
            EXIT
         ELSE
            IF oTagAtual:cName == "day_of_week"
            	cDia	:= oTagAtual:aAttributes[ "data" ]
            ELSEIF oTagAtual:cName == "low"
            	cMin	:= StrZero( val( oTagAtual:aAttributes[ "data" ] ), 2 )
            ELSEIF oTagAtual:cName == "high"
            	cMax	:= StrZero( val( oTagAtual:aAttributes[ "data" ] ), 2 )
            ELSEIF oTagAtual:cName == "condition"
            	cCond	:= oTagAtual:aAttributes[ "data" ]
            ENDIF
         ENDIF
      ENDDO
      oPrevisao := oXML:findnext()
      IF oPrevisao == NIL
         EXIT
      ENDIF
	ENDDO	

	hPrevisaoDoTempo["CidadeBase"]			= oCidade:aAttributes[ "data" ]
	hPrevisaoDoTempo["CondicaoAtual"]		= oCondicao:aAttributes[ "data" ]
	hPrevisaoDoTempo["TemperaturaAtual"]	= oTemperatura:aAttributes[ "data" ]
	hPrevisaoDoTempo["UmidadeAtual"]			= oUmidade:aAttributes[ "data" ]
	hPrevisaoDoTempo["VentoAtual"]			= oVento:aAttributes[ "data" ]
	hPrevisaoDoTempo["aProximosDias"]		= {}
	FOR i:=1 to LEN( aDias )
		AAdd( hPrevisaoDoTempo["aProximosDias"], { hDiasSemana[aDias[i][1]], aDias[i][3], aDias[i][2], aDias[i][4] } )
	NEXT


RETURN hPrevisaoDoTempo
Stanis Luksys
sites.google.com/hblibs

Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
Avatar do usuário
HASA
Colaborador
Colaborador
Mensagens: 1088
Registrado em: 01 Set 2003 19:50
Localização: São Paulo
Contato:

Re: Função para Previsão do Tempo - acessando API do Google

Mensagem por HASA »

:{
Bom dia, apenas para agradecer a dica, já coloquei em uso
:)Pos
Adalberto
Usuário Nível 3
Usuário Nível 3
Mensagens: 343
Registrado em: 01 Set 2007 01:09
Localização: Santa Cruz de la Sierra - Bolivia

Função para Previsão do Tempo - acessando API do Google

Mensagem por Adalberto »

Olá Stanis,

Pesquisando coisinhas esquisitas encontre esta função para a previcao do tempo, interessante demais, copie e intente compilar com xHb, com tristeza só obtive um mensagem de erro: HB_HASH e uma função que não tem o xHb, me ajuda por favor, para poder compilar.

Agradecido, desde já, e sempre.

Com atenção, Adalberto
Stanis Luksys
Colaborador
Colaborador
Mensagens: 1329
Registrado em: 18 Jun 2005 03:04
Localização: São Paulo
Contato:

Função para Previsão do Tempo - acessando API do Google

Mensagem por Stanis Luksys »

Olá,

Se não me engano, no xharbour é somente Hash() ao invés de HB_Hash().

Acho é só esta a diferença. Tenta aí e diz para nós. MESMO QUE DÊ CERTO.

Abraços.
Stanis Luksys
sites.google.com/hblibs

Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
Adalberto
Usuário Nível 3
Usuário Nível 3
Mensagens: 343
Registrado em: 01 Set 2007 01:09
Localização: Santa Cruz de la Sierra - Bolivia

Função para Previsão do Tempo - acessando API do Google

Mensagem por Adalberto »

Stanis,

Gracias, de verdad por tua resposta tão rápida, foi mesmo assim, a função e Hash, agora compila sem problemas o erro acontece na execução diz:

Error BASE/1004 Class: 'NIL' has no exported method:
NPORT Arguments: ()


Justo nesta linña:

Código: Selecionar todos

IF !oHttp:open()
Aguardo seus acertados comentários.

Muito obrigado. Com atenção, Adalberto
Avatar do usuário
HASA
Colaborador
Colaborador
Mensagens: 1088
Registrado em: 01 Set 2003 19:50
Localização: São Paulo
Contato:

Função para Previsão do Tempo - acessando API do Google

Mensagem por HASA »

:))
Olá Adalberto se estiver usando xHarbour acrescente no inicio do PRG

#include "hbxml.ch"

:)Pos
Adalberto
Usuário Nível 3
Usuário Nível 3
Mensagens: 343
Registrado em: 01 Set 2007 01:09
Localização: Santa Cruz de la Sierra - Bolivia

Função para Previsão do Tempo - acessando API do Google

Mensagem por Adalberto »

Hasa, boa tarde

Incrementei a linha que me sugeriu , trabalho com xHb modo consola, e o erro continua na mesma linha.

Muito obrigado, se tem alguma outra dica por favor não duvide em me ajudar.

Fico aguardando.

Deus seja com você

Adalberto
Avatar do usuário
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Função para Previsão do Tempo - acessando API do Google

Mensagem por sygecom »

Deve está faltando linkar no seu projeto a lib TIP.LIB, de uma revisada.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Adalberto
Usuário Nível 3
Usuário Nível 3
Mensagens: 343
Registrado em: 01 Set 2007 01:09
Localização: Santa Cruz de la Sierra - Bolivia

Função para Previsão do Tempo - acessando API do Google

Mensagem por Adalberto »

Olá sygecom,

Agradeço sua colaboração, inseri a TIP.LIB em o Arquivo.MLk compila sem problemas, na execução continua o mesmo erro, que estará faltando.
Rogo a você e a todas as pessoas caritativas me ajude com este tema.

Muito abrigado, aguardo suas noticias.

Com atenção, Adalberto
Avatar do usuário
HASA
Colaborador
Colaborador
Mensagens: 1088
Registrado em: 01 Set 2003 19:50
Localização: São Paulo
Contato:

Função para Previsão do Tempo - acessando API do Google

Mensagem por HASA »

:-O
Adalberto, isirá também a hbole.lib
Hasa
Adalberto
Usuário Nível 3
Usuário Nível 3
Mensagens: 343
Registrado em: 01 Set 2007 01:09
Localização: Santa Cruz de la Sierra - Bolivia

Função para Previsão do Tempo - acessando API do Google

Mensagem por Adalberto »

Olá Hasa

Na pasta (em meu Pc) C:\xHarbour\Lib não tem a HbOle, será que você pode me facilitar essa libraria?

Grato com tu ajuda, aguardo tus noticias.

Um grande abraço.

Adalberto
Avatar do usuário
HASA
Colaborador
Colaborador
Mensagens: 1088
Registrado em: 01 Set 2003 19:50
Localização: São Paulo
Contato:

Função para Previsão do Tempo - acessando API do Google

Mensagem por HASA »

:))
Bom dia, segue anexo,
Hasa
Anexos
hbole.zip
(146 Bytes) Baixado 243 vezes
Adalberto
Usuário Nível 3
Usuário Nível 3
Mensagens: 343
Registrado em: 01 Set 2007 01:09
Localização: Santa Cruz de la Sierra - Bolivia

Função para Previsão do Tempo - acessando API do Google

Mensagem por Adalberto »

Olá Hasa, boa tarde.

Agradecido com você, mais ainda compilando com as Lib propostas e realizando os câmbios sugeridos não consigo rodar esse exemplo tão bonito.
O erro já citado continua imutável, no mesmo lugar e com a mesma cara seria.

Quero matar essa fera, e só será possível com a ajuda de você e a ajuda de todas as pessoas que quiser ajudar.

Mais uma vez, Graças.

Com atenção Adalberto
Avatar do usuário
HASA
Colaborador
Colaborador
Mensagens: 1088
Registrado em: 01 Set 2003 19:50
Localização: São Paulo
Contato:

Função para Previsão do Tempo - acessando API do Google

Mensagem por HASA »

:-O
Ok, poste seu exemplo que vou compilar aqui
Hasa
Adalberto
Usuário Nível 3
Usuário Nível 3
Mensagens: 343
Registrado em: 01 Set 2007 01:09
Localização: Santa Cruz de la Sierra - Bolivia

Função para Previsão do Tempo - acessando API do Google

Mensagem por Adalberto »

Olá Hasa,

O exemplo e o fornecido por Stanis no inicio de este tópico, só modifique as linhas seguintes:

LOCAL hPrevisaoDoTempo := HB_Hash()
LOCAL hDiasSemana := HB_Hash()

LOCAL hPrevisaoDoTempo := Hash()
LOCAL hDiasSemana := Hash()

Todo o código e o código do Stanis

Muito obrigado Hasa, aguardo com ânsias seus comentários.

Adalberto
Responder