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