Wetter herunterladen :)

  • Ich schon wieder ^^

    ICh habe jetzt folgendes Problem:

    Wie bekomme ich am besten Wetterdaten aus dem Internet für einen bestimmten Ort nach AutoIT?

    Ich habe es schon mit wetter.com verscuht, doch der Source-Code der seite lässt scih nicht eindeutig für heute morgen und übermorgen einteilen...

    Hat jemand eine Idee ?(

    Bis dann! :D

  • a) nette Wetterseite suchen
    b) url anschaun und nach gemeinsamkeiten in bezug auf das datum herstellen

    c) source code auslesen
    d) quelltest nach gewünschten daten splitten

    e) anzeigen lassen

  • Das ist schon klar :)

    Ich habe es ja mit wetter.com versucht, aber der Source Code lässt sich nicht aufsplitten.

    Wie kann ich eine Variable über mehrere Zeilen laufen lassen??

    ?( :huh: ?( :huh:

  • Danke für die vielen Antworten ;)

    GtaSpider : Leider sind da nur wenig Orte, aber es ist schon sehr toll aufgebaut :D
    BugFix : Kann man Flash mit AutoIT bearbeiten ?(
    alfred: Danke! Das allererste scheint zu passen. Ich schau es mir mal an!

  • Hi,
    vielleicht könntest du auch noch Google auslesen, das dürfte relativ einfach gehen, vielleicht bekommt man von dort sogar den direkten link, ich hab aber gerade keine Zeit mir das näher anzuschauen. Der Vorteil ist halt, dass es sehr schnell geht das Wetter auf der Seite du öffnest und er sehr viele Städte und Dörfer findet.

    Beispiel:

    Wetter in Franfurt

    • Offizieller Beitrag

    Hab mal weitergesucht - die Daten finde ich am Besten:

    [autoit]

    #include <array.au3>
    #include <IE.au3>
    #include <INet.au3>
    $Ort = 'Berlin'
    ;~ $url = 'http://webde.wetternet.de/cgi-bin/webde/wetter_stadt.pl?ID=2880&TYP=0&ALIAS=' & $Ort ; 5-Tage
    $url = 'http://webde.wetternet.de/cgi-bin/webde/wetter_stadt_ist.pl?ID=2880&TYP=0&ALIAS=' & $Ort ; Aktuell
    $source = _INetGetSource($url)

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

    $oIE = _IECreate($url, 0, 0)
    $oTable = _IETableGetCollection($oIE, 1)

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

    $ar = _IETableWriteToArray($oTable, True)
    $image = StringRegExp($source, 'http://webde.wetternet.de/images/symbole/k_ani\d+.gif', 3)
    $icon = StringRegExp($source, 'http://webde.wetternet.de/images/icon/\w+.gif', 3)

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

    $index = 0
    For $i = 1 To 5
    $ar[1][$i] = $image[$index]
    $index += 1
    Next
    $index = 0
    For $i = 2 To UBound($ar) -1
    $ar[$i][0] = $icon[$index]
    $index += 1
    Next
    _ArrayDisplay($ar)
    _IEQuit($oIE)

    [/autoit]


    Mußt nur noch die Piktogramme für Regen, Bewölkt etc. (werden in der Tabelle als 0 dargestellt) abfragen, dann ist es komplett.
    Edit: Hab ich dir mal schnell noch eingefügt. Den Picture- und IconPath hab ich dir dazugeschrieben, kannst dir ja dann die Symbole laden.

    Edit2: Noch eine Änderung. Hab bemerkt, dass die Indexzuordnung für die Symbole nicht konstant ist. Lade jetzt den kpl. Pfad mit runter. Nun paßt es.

  • Hab mir da jetzt was gebastelt, kannst vllt jemand brauchen. Nur den $html -String anpassen!

    Spoiler anzeigen
    [autoit]

    #NoTrayIcon
    #include <WindowsConstants.au3>
    #include <GUIConstants.au3>
    #include <IE.au3>

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

    Opt("GUIOnEventMode", 1)
    Opt("TrayOnEventMode", 1)
    Opt("TrayMenuMode", 1)

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

    HotKeySet("^!q","_Ende")
    HotKeySet("^!m","_Minimieren")

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

    $ende = TrayCreateItem("Ende")
    TrayItemSetOnEvent( -1, "_Ende")
    $anzeigen = TrayCreateItem("Wieder anzeigen")
    TrayItemSetOnEvent( -1, "_anzeigen")

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

    $html = '<table cellspacing="1" cellpadding="0" border="0" style="background-color:'
    $html &= '#042C50" width="122"><tr><td align="center" style="background-color : #042C50;">'
    $html &= '<a href="http://www.meteo24.de/wetter/43X1198604.html" style="text-decoration: none;" '
    $html &= 'target="_blank"><font face="Verdana" size="1" color="#FFCC00" style="text-decoration: none; '
    $html &= 'font-weight: bold;">Wetter Zellberg</font></a></td></tr><tr><td align="center"><iframe width="120" '
    $html &= 'height="98" scrolling="no" frameborder="0" src="http://www.meteo24.de/hptool/v1?cid=43X1198604&l=de&style=9">'
    $html &= ' </iframe></td></tr><tr><td align="center" height="15" style="background-color : #042C50;"><a href="http://www.meteo24.de/" '
    $html &= 'style="text-decoration: none;" target="_blank"><font face="Verdana" size="1" color="#FFCC00">&copy; meteo24.de</font></a></td></tr></table>'

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

    Do
    $html_file = @TempDir & "\temp" & Hex(Random(0, 65535), 4)
    Until Not FileExists($html_file)
    FileWrite($html_file, $html)

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

    GUICreate("Hallo",124,114, -1, -1, $WS_POPUP, BitOR($WS_EX_TOOLWINDOW, $WS_EX_TOPMOST))
    GUISetOnEvent($GUI_EVENT_PRIMARYDOWN, "_Move")

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

    $oIE = _IECreateEmbedded()
    $GuiActicex = GUICtrlCreateObj($oIE, -11, -16, 200, 200)
    _IENavigate ($oIE, $html_file)
    GUISetState()

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

    While 1
    Sleep(10)
    WEnd

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

    Func _Move() ; Danke eukalyptus für diese Funktion
    Local $DifX, $DifY, $MouseData = GUIGetCursorInfo(@GUI_WinHandle)
    Local $WinPos = WinGetPos(@GUI_WinHandle)
    Local $MPos = MouseGetPos()
    $DifX = $MPos[0] - $WinPos[0]
    $DifY = $MPos[1] - $WinPos[1]
    While $MouseData[2]
    $MPos = MouseGetPos()
    $WinPos = WinGetPos(@GUI_WinHandle)
    If ($WinPos[0] <> ($MPos[0] - $DifX)) Or ($WinPos[1] <> ($MPos[1] - $DifY)) Then
    WinMove(@GUI_WinHandle, '', $MPos[0] - $DifX, $MPos[1] - $DifY)
    EndIf
    Sleep(15)
    $MouseData = GUIGetCursorInfo(@GUI_WinHandle)
    WEnd
    EndFunc

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

    Func _Minimieren()
    GUISetState(@SW_HIDE)
    Opt("TrayIconHide",0)
    EndFunc

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

    Func _anzeigen()
    GUISetState(@SW_SHOW)
    Opt("TrayIconHide",1)
    EndFunc

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

    Func _Ende()
    GUIDelete()
    Exit
    EndFunc

    [/autoit]
    • Offizieller Beitrag

    funkey versehe dein code

    [autoit]

    #NoTrayIcon

    [/autoit]

    nicht. Warum versteckst du des Tay icon ? du hast doch mit

    [autoit]

    $ende = TrayCreateItem("Ende")
    TrayItemSetOnEvent( -1, "_Ende")
    $anzeigen = TrayCreateItem("Wieder anzeigen")
    TrayItemSetOnEvent( -1, "_anzeigen")

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

    ein Tray Menü erstellt . Verstehe die Logic dahinter nicht ganz .

  • Hey, sowas hab ich auch schonmal gebastelt, die Daten hab ich von Google genommen.
    Hier der Code, vielleicht kannst du ja was davon gebrauchen

    Spoiler anzeigen
    [autoit]


    #NoTrayIcon

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

    Opt("MustDeclareVars",1)
    Opt("GUIOnEventMode",1)

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

    ; Hier lässt sich selbstverständlich auch der eigene Wohnort eintragen
    Const $ORT = "Speyer"
    ; ----------------------------------------------------------------------

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

    Const $WIDTH = 470
    Const $HEIGHT = 170
    Const $SEARCHS = "http://www.google.de/search?hl=de&q=Wetter+"
    Const $SEARCHE = "&btnG=Google-Suche&meta="
    Const $FILE = "temp.html"
    Const $ERROR = "<html><head><title>Wetter für "&$ORT&"</title></head><body>"& _
    "<h2>Wetter konnte nicht geholt werden!</h2><p>"& _
    "<center><img src=""images/rain.gif"" width=""40%"" height=""60%""></center></body></html>"
    Local $Input,$Ie

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

    DirCreate(@TempDir&"\wetter\images")
    FileInstall("chance_of_rain.gif",@TempDir&"\wetter\images\chance_of_rain.gif",0)
    FileInstall("thunderstorm.gif",@TempDir&"\wetter\images\thunderstorm.gif",0)
    FileInstall("chance_of_storm.gif",@TempDir&"\wetter\images\chance_of_storm.gif",0)
    FileInstall("mostly_sunny.gif",@TempDir&"\wetter\images\mostly_sunny.gif",0)
    FileInstall("rain.gif",@TempDir&"\wetter\images\rain.gif",0)
    FileInstall("sunny.gif",@TempDir&"\wetter\images\sunny.gif",0)
    FileInstall("cloudy.gif",@TempDir&"\wetter\images\cloudy.gif",0)
    FileInstall("temp.html",@TempDir&"\wetter\temp.html",1)

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

    main()
    Func main()
    GUICreate("Wetter",$WIDTH,$HEIGHT)
    GUISetOnEvent(-3,"_EXIT")
    GUISetState(@SW_SHOW)

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

    $Ie = ObjCreate("Shell.Explorer.2")
    GUICtrlCreateObj ($Ie,0,0,$WIDTH,$HEIGHT-40)
    showweather($ORT)

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

    GUICtrlSetOnEvent(GUICtrlCreateButton("Refresh",300,$HEIGHT-35,120),"_REFRESH")
    $Input = GUICtrlCreateInput($ORT,40,$HEIGHT-35,200)

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

    ; Loop of Death
    While 1
    Sleep(1000)
    WEnd
    EndFunc

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

    Func _EXIT ()
    GUIDelete()
    Exit
    EndFunc

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

    Func _REFRESH ()
    showweather(GUICtrlRead($Input))
    EndFunc

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

    ; zeigt das wetter in dem Internet-Explorer Objekt
    Func showweather ($place)
    Local $google,$temp

    SplashTextOn ("Bitte Warten...","Wetter in "&$place&" wird ermittelt...",200,40)

    ; Anfrage abschicken und code erhalten
    $google = _INetGetSource($SEARCHS&$place&$SEARCHE)
    If $google == 0 Then
    createfile($ERROR)
    Return
    EndIf

    ; Den Anfang der Vorhersage finden
    $temp = StringInStr ($google,"Zu iGoogle hinzufügen</a></div></td></tr><tr><td>",0,1)
    If $temp == 0 Then
    createfile($ERROR)
    Return
    EndIf
    $google = StringRight($google,StringLen($google)-$temp-StringLen("Zu iGoogle hinzufügen</a></div></td></tr><tr><td>")+1)

    ; Das Ende der Vorhersage finden
    $temp = StringInStr ($google,"</td></tr></table>",0,1)
    If $temp == 0 Then
    createfile($ERROR)
    Return
    EndIf
    $google = StringLeft($google,$temp-1)

    ; Einen Ordner weniger bitte ^^
    $google = StringReplace($google,"/images/weather/","images/",0,0)

    ; Die Ausgabe :)
    createfile("<html><head><title>Wetter für "&$ORT&"</title></head><body><b><u>Wetter in "&$place&"</b></u>"&$google&"</body></html>")
    EndFunc

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

    Func createfile($html)
    If FileExists(@TempDir&"\wetter\"&$FILE) Then FileDelete(@TempDir&"\wetter\"&$FILE)
    FileWrite(@TempDir&"\wetter\"&$FILE,$html)
    $Ie.navigate("file:///"&@TempDir&"/wetter/"&$FILE)
    SplashOff ()
    EndFunc

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

    Func _INetGetSource($s_URL, $s_Header = '')

    If StringLeft($s_URL, 7) <> 'http://' And StringLeft($s_URL, 8) <> 'https://' Then $s_URL = 'http://' & $s_URL

    Local $h_DLL = DllOpen("wininet.dll")

    Local $ai_IRF, $s_Buf = ''

    Local $ai_IO = DllCall($h_DLL, 'int', 'InternetOpen', 'str', "wow-autologin", 'int', 0, 'int', 0, 'int', 0, 'int', 0)
    If @error Or $ai_IO[0] = 0 Then
    DllClose($h_DLL)
    SetError(1)
    Return ""
    EndIf

    Local $ai_IOU = DllCall($h_DLL, 'int', 'InternetOpenUrl', 'int', $ai_IO[0], 'str', $s_URL, 'str', $s_Header, 'int', StringLen($s_Header), 'int', 0x80000000, 'int', 0)
    If @error Or $ai_IOU[0] = 0 Then
    DllCall($h_DLL, 'int', 'InternetCloseHandle', 'int', $ai_IO[0])
    DllClose($h_DLL)
    SetError(1)
    Return ""
    EndIf

    Local $v_Struct = DllStructCreate('udword')
    DllStructSetData($v_Struct, 1, 1)

    While DllStructGetData($v_Struct, 1) <> 0
    $ai_IRF = DllCall($h_DLL, 'int', 'InternetReadFile', 'int', $ai_IOU[0], 'str', '', 'int', 256, 'ptr', DllStructGetPtr($v_Struct))
    $s_Buf &= StringLeft($ai_IRF[2], DllStructGetData($v_Struct, 1))
    WEnd

    DllCall($h_DLL, 'int', 'InternetCloseHandle', 'int', $ai_IOU[0])
    DllCall($h_DLL, 'int', 'InternetCloseHandle', 'int', $ai_IO[0])
    DllClose($h_DLL)
    Return $s_Buf
    EndFunc ;==>_INetGetSource

    [/autoit]

    Einmal editiert, zuletzt von bluelamp (17. November 2008 um 15:58)

  • Hallo und Danke an alle :D
    Das funktioniert alles super. Ich versuche das mal zu kombinieren. Danke! :thumbup:

    Dann werd ich auch mal ein bisschen basteln :D

  • So jetzt schreibe ich genaueres:

    BugFix : Danke! Bei mir klappt das nur mit dem Array nicht...
    funkey: Das ist genial mit dem Fenster! :D
    @bluelamp: Das ist auch eine gute Idee, sehr gut sogar.

    Ich dachte mir bei dem Programm folgendes: Es soll das Wetter in Variablen abspeichern und dann über Speech ausgeben (s. meinen Beitrag zur "Innovativen Windowsbedienung"). Danke für Eure Anregungen! Ich versuche das mal zu kombinieren... ;)

  • Es ist jetzt wohl etwas ganz anderes geworden :D Für das Programm braucht ihr die Stimme, die auch für das Uhrzeit-Gadget in meinen Beitrag "Intuitive Bedienung für Windows" angekündigt wurde. Schaut es euch bitte an. Ich bitte um Aregungen und Kritik! ;)