Page 1 sur 2

Api Google Weather

Publié : mar. 10/janv./2012 20:06
par MetalOS
Salut les amis,

Pour une application que je doit faire, j'avais besoin de récupérer les conditions météo actuel d'un lieu précis. J'ai donc utilisé l'api xml que fournis gratuitement google. Voici comment récupérer les conditions actuel. Cette source n'est pas de moi, je l'ai trouvé sur le forum allemand de PB. Je n'est plus le nom de l'auteur, j'ai juste traduit certaine partie pour mieux ce repérer.

Code : Tout sélectionner

;###############################################################################
;##### 
;##### Api Google Weather (xml)
;##### Traduction MetalOS
;##### 
;##### Auteur: Forum Allemand
;###############################################################################

UsePNGImageDecoder()

Structure weather_data
  Celsius.i
  Fahrenheit.i
  Date.s
  Condition_Text.s
  Humidite.i
  Wind_Text.s
  Image.i
EndStructure
Procedure.i iGoogle_Weather(Location.s, Path.s, Map Weather_Data.weather_data(), Language.s = "fr")
  
  Url.s = "http://www.google.com/ig/api?weather=" + Location + "&hl=" + Language

  ClearMap(Weather_Data())

  If ReceiveHTTPFile(Url,Path + "wet.txt")
    Nr = ReadFile(#PB_Any,Path + "wet.txt")
    If Nr
      res.s = ReadString(Nr)
      CloseFile(Nr)
    EndIf
  EndIf
  DeleteFile(Path + "wet.txt")

  If res <> ""
    
    With Weather_Data(Location)
      
      Anz = CountString(res,">")
      Dim XML.s(Anz)
      
      For i=1 To Anz
        XML(i) = StringField(res,i,">")+">"
      Next i    
      
      For i=1 To Anz
        
        String.s = XML(i)
        
        If d=0
          If FindString(String,LCase("current_date_time data"),1)
            TempString.s = StringField(String,2,Chr(34))
            Datum = ParseDate("%yyyy-%mm-%dd %hh:%ii:%ss", TempString)
            d = 1
            \Date = FormatDate("%dd.%mm.%yyyy - %hh:%ii:%ss",Date)
          EndIf
        EndIf  
        If c=0
          If FindString(String,LCase("condition data"),1)
            \Condition_Text = StringField(String,2,Chr(34))
            c = 1
          EndIf
        EndIf      
        If a=0
          If FindString(String,LCase("temp_c data"),1)
            \Celsius = Val(StringField(String,2,Chr(34)))
            a = 1
          EndIf
        EndIf
        If b=0
          If FindString(String,LCase("temp_f data"),1)
            \Fahrenheit = Val(StringField(String,2,Chr(34)))
            b = 1
          EndIf          
        EndIf 
        If h=0
          If FindString(String,LCase("humidity data"),1)
            \Humidite = Val(RemoveString(StringField(String,2,":"),"%"))
            h=1
          EndIf
        EndIf  
        If Not IsImage(Image)
          If FindString(String,LCase("icon data"),1)
            ImageUrl.s = "http://img0.gmodules.com"+StringField(XML(i),2,Chr(34))
            ImageUrl = Left(ImageUrl,Len(ImageUrl)-3) + "png"
            If ReceiveHTTPFile(ImageUrl,Path + "weather.png")
              \Image = LoadImage(#PB_Any,Path + "weather.png")
              Image = \Image
              If IsImage(Image)
                DeleteFile(Path + "weather.png")
              EndIf
            EndIf             
          EndIf
        EndIf  
        If w=0
          If FindString(String,LCase("wind_condition data"),1)
            w=1
            \Wind_Text = Trim(RemoveString(StringField(String,2,":"),Chr(34)+"/>"))
          EndIf
        EndIf                 
        
      Next i  

    EndWith
    ProcedureReturn #True
  Else
    ProcedureReturn #False
  EndIf
  
EndProcedure

;##### Beispiel

InitNetwork()

  NewMap Weather.weather_data()
  
  Image = CreateImage(#PB_Any,40,40)
  
  Location.s = "paris"
  
  If iGoogle_Weather(Location, GetTemporaryDirectory(), Weather())
    
    OpenWindow(0,0,0,300,100,"Météo : "+Location,#PB_Window_ScreenCentered|#PB_Window_SystemMenu)
    
    If IsImage(Weather(Location)\Image)
      ImageGadget(0,10,10,40,40,ImageID(Weather(Location)\Image))
    EndIf
    TextGadget(1,55,10,250,15,Weather(Location)\Condition_Text)    
    TextGadget(2,55,25,250,15,Str(Weather(Location)\Celsius) + " Degrés Celsius à "+Str(Weather(Location)\Humidite)+"% Humidité")
    TextGadget(3,55,40,250,15,"Vent de "+Weather(Location)\Wind_Text)
    Repeat
      Event = WaitWindowEvent()
      
      If Event = #PB_Event_CloseWindow
        Quit = 1
      EndIf
      
      
    Until Quit = 1
    
  EndIf

Re: Api Google Weather

Publié : mar. 10/janv./2012 21:55
par GallyHC
Bonjour Ar-s,

Perso avec une petite routine perso j'ai fait une petite routine qui donne cela :)

Image

Cordialement,
GallyHC

Re: Api Google Weather

Publié : mar. 10/janv./2012 22:33
par Ar-S
Bonjour GallyHC :mrgreen:

Re: Api Google Weather

Publié : mar. 10/janv./2012 22:42
par Ar-S
Petit correctif pour le code de Metalos

remplacer

Code : Tout sélectionner

TextGadget(1,55,10,250,15,Weather(Location)\Condition_Text)     
par

Code : Tout sélectionner

  text1.s = Weather(Location)\Condition_Text
  text1 = ReplaceString(text1,"#39;","'")
  TextGadget(1,55,10,250,15,text1)    
Sinon #39; apparait au lieu des apostrophes.

P.S : jolie interface GallyHC

Re: Api Google Weather

Publié : mer. 11/janv./2012 4:50
par SPH
GallyHC a écrit :Bonjour Ar-s,

Perso avec une petite routine perso j'ai fait une petite routine qui donne cela :)

Image

Cordialement,
GallyHC
Tres beau :idea:

Re: Api Google Weather

Publié : mer. 11/janv./2012 13:29
par GallyHC
Bonjour,

Si sa interresse quelqu'un je peu, peu etre voir a metttre le source?

Cordialement,
GallyHC

Re: Api Google Weather

Publié : mer. 11/janv./2012 13:58
par Mesa
Moi je veux bien les sources stp.

merci.

Mesa.

Re: Api Google Weather

Publié : mer. 11/janv./2012 14:42
par GallyHC
bonjour,

donc je vous donne le lien de ce source comme il y a des images ect... c'est plus simple de faire un zip. l'url est http://www.koakdesign.info/news/?url=4d&val=40. En esperent quil soit utile pour quelque personne :)

Cordialement,
GallyHC

Re: Api Google Weather

Publié : mer. 11/janv./2012 21:20
par Kwai chang caine
Merci beaucoup à vous deux pour le partage 8)

Re: Api Google Weather

Publié : mer. 11/janv./2012 21:59
par SPH
GallyHC a écrit :bonjour,

donc je vous donne le lien de ce source comme il y a des images ect... c'est plus simple de faire un zip. l'url est http://www.koakdesign.info/news/?url=4d&val=40. En esperent quil soit utile pour quelque personne :)

Cordialement,
GallyHC
Avant que je ne matte le code, j'ai une question : tu interroges quoi sur le net pour afficher la meteo ?

Re: Api Google Weather

Publié : mer. 11/janv./2012 22:37
par Ar-S
Merci pour le zip :)

Re: Api Google Weather

Publié : jeu. 12/janv./2012 19:18
par MetalOS
Ca SPH

http://www.google.com/ig/api?weather="paris,france"

On remplace la ville et le pays de sont choix.

Re: Api Google Weather

Publié : lun. 03/sept./2012 13:49
par MetalOS
Le code n'est plus valable car Google semble avoir supprimé definitivement son API Météo. :( Dommage...

Re: Api Google Weather

Publié : lun. 03/sept./2012 15:36
par Ar-S
Je pense qu'il était lié à igoogle qui va finir par être supprimé.
A mon avis tout ça est la faute des xxxStore qu'ils veulent imposer.

Mais il existe tellement de site présentant les prévisions qu'un webgadget suffit.

Site qui génère une prévision selon la ville:

Code : Tout sélectionner

http://www.meteorologic.net/webmaster.php

Re: Api Google Weather

Publié : lun. 03/sept./2012 19:35
par MetalOS
Yahoo fournit un api assez sympas.