- Offizieller Beitrag
Hi,
eine Funktion zum Abfragen lokaler Wetterdaten
- Aktuell (letzte 5 Std.) oder
- kommende 5 Tage (inkl. heute)
_GetWeather
#include <array.au3>
#include <INet.au3>
$ret = _GetWeather('Köln')
If IsArray($ret) Then
_ArrayDisplay($ret, 'Köln - aktuell')
Else
MsgBox(0, '', $ret & ' - ' & @error)
EndIf
$ret = _GetWeather('Köln', 0)
If IsArray($ret) Then
_ArrayDisplay($ret, 'Köln - 5-Tage')
Else
MsgBox(0, '', $ret & ' - ' & @error)
EndIf
;===============================================================================
; Function Name: _GetWeather($ORT [, $TYP=1])
; Description:: Wetterangaben für einen Ort
; Parameter(s): $ORT Ortsname
; optional $TYP 1= Aktuell (Standard), 0= 5-Tage
; Requirement(s): #include <INet.au3>
; Return Value(s): Erfolg Array mit den Wetterdaten
; Fehler 1 @error 1 Host nicht erreichbar
; @error 2 Source konnte nicht gelesen werden
; Author(s): BugFix ([email='bugfix@web.de'][/email])
;===============================================================================
Func _GetWeather($ORT, $TYP=1)
If $TYP < 0 Or $TYP > 1 Then $TYP = 1
Ping('www.web.de')
If @error Then Return SetError(1,0,1)
If $TYP = 0 Then ; 5-Tage
Local $url = 'http://webde.wetternet.de/cgi-bin/webde/wetter_stadt.pl?ID=2880&TYP=0&ALIAS=' & $ORT
Else ; Aktuell
Local $url = 'http://webde.wetternet.de/cgi-bin/webde/wetter_stadt_ist.pl?ID=2880&TYP=0&ALIAS=' & $ORT
EndIf
Local $arTmp, $ret, $source = _INetGetSource($url)
If @error Then Return SetError(2,0,1)
Local $aZuordnung[14] = ['sonnig','heiter','bewölkt','wolkig','stark bewölkt','Regenschauer','Regen', _
'Gewitter','teilw. Schneefall','Schneefall','Schneeregen','Nebel','gering bewölkt','Niesel']
Local $image = StringRegExp($source, '(?<=http://webde\.wetternet\.de/images/symbole/)k_ani\d+\.gif', 3)
Local $icon = StringRegExp($source, '(?<=http://webde\.wetternet\.de/images/icon/)\w+\.gif', 3)
Local $wind_r = StringRegExp($source, '(?<=\<td\>)[OSWN]-?[OSWN]?-?[OSWN]?', 3)
Local $wind_g = StringRegExp($source, '\d{1,3}\s(?:m/s|km/h)', 3)
If $TYP = 0 Then
Local $arValue[7][6]
Local $tage = StringRegExp($source, '(?<=scope="col"\>)[MDFS][oira]', 3)
Local $max_min = StringRegExp($source, '(-?\d*,?\d?)(?>°)', 3)
Local $nieder = StringRegExp($source, '(?<=\<td\>)\d{1,3}%', 3)
Else
Local $arValue[10][6]
Local $zeit = StringRegExp($source, '[0-2]\d\.[0-5]\d Uhr', 3)
Local $temp_tau = StringRegExp($source, '(-?\d*,?\d?)(?>°)', 3)
Local $feuchte = StringRegExp($source, '(?<=\<td\>)\d{1,3}%', 3)
Local $druck = StringRegExp($source, '\d{1,4}\shPa', 3)
Local $sicht = StringRegExp($source, '(\d{1,3}\sk?m)(?>\<\/td\>)', 3)
Local $wolken = StringRegExp($source, '\d{2,5}\s-\s\d{2,5}m', 3)
EndIf
For $i = 0 To UBound($arValue) -1
Switch $i
Case 0
If $TYP Then
$arTmp = $zeit
Else
$arTmp = $tage
EndIf
Case 1
$arTmp = $image
For $k = 0 To 4
$ret = StringRegExp($arTmp[$k], '\d+', 1)
$arTmp[$k] = $aZuordnung[$ret[0]-1]
Next
Case 2
If $TYP Then
For $k = 0 To 4
$arTmp[$k] = $temp_tau[$k]
Next
Else
For $k = 0 To 4
$arTmp[$k] = $max_min[$k]
Next
EndIf
Case 3
If $TYP Then
For $k = 5 To 9
$arTmp[$k-5] = $temp_tau[$k]
Next
Else
For $k = 5 To 9
$arTmp[$k-5] = $max_min[$k]
Next
EndIf
Case 4
If $TYP Then
$arTmp = $wind_r
Else
$arTmp = $nieder
EndIf
Case 5
If $TYP Then
$arTmp = $wind_g
Else
$arTmp = $wind_r
EndIf
Case 6
If $TYP Then
$arTmp = $feuchte
Else
$arTmp = $wind_g
EndIf
Case 7
$arTmp = $druck
Case 8
$arTmp = $sicht
Case 9
$arTmp = $wolken
EndSwitch
For $k = 0 To UBound($arTmp) -1
$arValue[$i][$k+1] = $arTmp[$k]
Next
If $i > 1 Then $arValue[$i][0] = StringTrimRight($icon[$i-2], 4)
Next
Return $arValue
EndFunc ;==>_GetWeather