• Offizieller Beitrag

    Hi,
    eine Funktion zum Abfragen lokaler Wetterdaten
    - Aktuell (letzte 5 Std.) oder
    - kommende 5 Tage (inkl. heute)

    _GetWeather
    [autoit]

    #include <array.au3>
    #include <INet.au3>

    [/autoit] [autoit][/autoit] [autoit]

    $ret = _GetWeather('Köln')
    If IsArray($ret) Then
    _ArrayDisplay($ret, 'Köln - aktuell')
    Else
    MsgBox(0, '', $ret & ' - ' & @error)
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    $ret = _GetWeather('Köln', 0)
    If IsArray($ret) Then
    _ArrayDisplay($ret, 'Köln - 5-Tage')
    Else
    MsgBox(0, '', $ret & ' - ' & @error)
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    ;===============================================================================
    ; 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?)(?>&deg)', 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

    [/autoit]
  • Nice Script, es klappt super!

    Nur ab und zu kommt bei mir

    Spoiler anzeigen
    [autoit]


    C:\Program Files\AutoIt3\Include\_GetWeather.au3 (81) : ==> Subscript used with non-Array variable.:
    $arTmp[$k] = $max_min[$k]
    $arTmp[$k] = $max_min^ ERROR

    [/autoit]
    • Offizieller Beitrag

    Hi,
    das kann passieren, wenn evtl. eine Temperatur nicht angegeben ist. Da Max- und Mintemperatur durch Regexabfrage nicht zu trennen sind (absolut identisch im Sourcecode), "hoffe" ich darauf dass diese da sind. Ich nehme halt 5 für min und 5 für max. Falls RegEx nur 9 gefunden hat, ist natürlich die Arrayadressierung falsch und der Fehler kommt.
    Mal sehen, wie ich das beheben kann.