Automatischer Downloader

  • Hi,

    ich habe vor einen automatischen Downloader zu programmieren.

    Grundidee: Der User soll die .exe Datei starten und das Programm sucht auf dem Server ob eine neu Datei von diesem Monat vorhanden ist. Die Datei soll immer jeden Monat "neu" erscheinen und wird von mir mit einer entsprecheneden "Monatsendung" versehen, wie z.B. Inventarliste-Okt10.doc . Das Programm soll nun den User fragen ob diese neue Datei (für diesen Monat) gedownloadet werden soll, anschließend soll er nur noch auf einen Button klicken müssen und die Datei wird gedownloadet.


    Ich stehe noch ziemlich in den Kinderschuhen, da ich auch erst seit einer woche ca. mit autoit "bastel":

    Vllt könnt ihr mir ja Tipps, Beispiele usw geben ;)

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <ProgressConstants.au3>
    #include <WindowsConstants.au3>
    #include <Array.au3>
    #Include <date.au3>

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

    $pfad = @TempDir & "\"
    $server = "http://www.irgendwas.de/test"
    $ininame = "\config.ini"
    $data = filename von Download

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Auto Download", 345, 252, 193, 125)
    $Edit = GUICtrlCreateEdit("", 24, 56, 281, 129, BitOR($ES_AUTOVSCROLL,$ES_AUTOHSCROLL,$ES_WANTRETURN,$WS_VSCROLL))
    GUICtrlSetState($Edit,$GUI_Disable)
    GUICtrlSetData(-1, "+++ Programm wurde gestartet+++")
    $Downloadbutton = GUICtrlCreateButton("Download", 24, 192, 281, 49, 0)
    $Dlprogress = GUICtrlCreateProgress(24, 16, 281, 25)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    Case $Downloadbutton
    If InetGet($server,$pfad & $data,1,0) Then
    MsgBox(64,"Info","Download OK")
    IniWrite(@ScriptDir & $ininame,"Downloads", "Dl-" & _NowDate() , $data)
    GUICtrlSetData($Dlprogress, Filesize von Datei/100)
    if $Dlprogress = 100 Then MsgBox(64,"Downloader", "Die Datei wurde erfolgreich gedownloadet!")
    EndSwitch
    WEnd

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


    Neu:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <ProgressConstants.au3>
    #include <WindowsConstants.au3>
    #include <Array.au3>
    #Include <date.au3>

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

    $pfad = @TempDir & "\"
    $server = "http://www.irgendwas.de/test"
    $ininame = "\config.ini"
    $data = filename von Download
    $mediaformat = "doc"
    $FileList = "files.txt"
    $SaveFileList = @TempDir & "\files.txt"
    If InetGet($ServerUrl & $FileList,$SaveFileList,1) = 0 Then
    MsgBox(48,"Fehler","Fehler beim Download der Dateiliste")
    Exit 1
    EndIf
    Dim $fso = FileOpen($SaveFileList,0)
    Dim $txt = FileRead($fso)
    FileClose($fso)
    $txt = StringReplace($txt,@CRLF,"|")
    MsgBox(64,"File",$txt)

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Auto Download", 345, 252, 193, 125)
    $Edit = GUICtrlCreateEdit("", 24, 56, 281, 129, BitOR($ES_AUTOVSCROLL,$ES_AUTOHSCROLL,$ES_WANTRETURN,$WS_VSCROLL))
    GUICtrlSetState($Edit,$GUI_Disable)
    GUICtrlSetData(-1, "+++ Programm wurde gestartet+++")
    $Downloadbutton = GUICtrlCreateButton("Download", 24, 192, 281, 49, 0)
    $Dlprogress = GUICtrlCreateProgress(24, 16, 281, 25)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    Case $Downloadbutton
    $SaveFile = FileSaveDialog("Datei speichern..",@DesktopDir,"Word (*." & $mediaformat & ")",2,GUICtrlRead($FileList))
    If NOT @error Then Download()

    EndSwitch
    WEnd

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

    Func Download()
    If InetGet($server,$pfad & $data,1,0) Then
    MsgBox(64,"Info","Download OK")
    IniWrite(@ScriptDir & $ininame,"Downloads", "Dl-" & _NowDate() , $data)
    GUICtrlSetData($Dlprogress, Filesize von Datei/100)
    if $Dlprogress = 100 Then MsgBox(64,"Downloader", "Die Datei wurde erfolgreich gedownloadet!")
    EndIf

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

    EndFunc

    [/autoit]


    Ich hoffe ihr könnt mir helfen;
    ~ Johannes ~

    2 Mal editiert, zuletzt von Johannes (9. Oktober 2008 um 17:19)

  • Ah jaaa....
    Und was genau möchtest Du? Funktioniert dein Skript nicht oder möchtest Du Tipps, wie es evtl. anders geht?
    Im Moment sehe ich ein Programmskript, aber nichts, was eigentlich in "Hilfe & Unterstützung" gehört.

    Oder einfach: Wo benötigts Du Hilfe oder Unterstützung? Hier wird dir sicher gern geholfen, aber eben nur dann, wenn man weiß wie/wobei.

  • Also mein Script funktioniert schonmal nicht: "Line -1: Error: Error parsing function call"

    Ich benötige Hilfe beim Umsetzten der Grundidee. Ihr könnt ja mal versuchen das Script mit dem Konzept zu vergleichen und mir Tipps geben, wie ich es besser/so das es überhaupt geht machen kann.

    Auch z.B. wie man die Progressbar auf die jeweilige Datengröße aufteilt, so das ein richtiger Downloadbalken entsteht.

    [autoit]

    GUICtrlSetData($Dlprogress, Filesize von Datei)

    [/autoit]

    Das nächste Mal versuche ich es besser^^ ;)

  • Hi, ich hab das Script mal etwas überarbeitet. Progressbar funktioniert leider immernoch nicht.


    Neuster Script:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <ProgressConstants.au3>
    #include <WindowsConstants.au3>
    #include <Array.au3>
    #Include <date.au3>

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

    $pfad = @TempDir & "\"
    $server = "http://www.dieadressehalt.de/test/"
    $ininame = "\config.ini"
    $data = "dataname"
    $mediaformat = "doc"
    $FileList = "files.txt"
    $SaveFileList = @TempDir & "\files.txt"
    If InetGet($server & $FileList,$SaveFileList,1) = 0 Then
    MsgBox(48,"Fehler","Fehler beim Download der Dateiliste")
    Exit 1
    EndIf
    Dim $fso = FileOpen($SaveFileList,0)
    Dim $txt = FileRead($fso)
    FileClose($fso)
    $txt = StringReplace($txt,@CRLF,"|")
    $orisize = InetGetSize($server)
    MsgBox(64,"File",$txt)

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Auto Download", 345, 252, 193, 125)
    $Edit = GUICtrlCreateEdit("", 24, 56, 281, 129, BitOR($ES_AUTOVSCROLL,$ES_AUTOHSCROLL,$ES_WANTRETURN,$WS_VSCROLL))
    GUICtrlSetState($Edit,$GUI_Disable)
    GUICtrlSetData(-1, "+++ Programm wurde gestartet+++")
    $Downloadbutton = GUICtrlCreateButton("Download", 24, 192, 281, 49, 0)
    $Dlprogress = GUICtrlCreateProgress(24, 16, 281, 25)
    GUISetIcon("shell32.dll",14)
    $prog_2 = GUICtrlCreateLabel("" ,10,87,200,50)
    GUICtrlCreateLabel("% ( ",32,87,200,50)
    $prog_4 = GUICtrlCreateLabel("", 50,87,60,50)
    GUICtrlCreateLabel(") Kb wurde heruntergeladen" ,90,87,200,50)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    Case $Downloadbutton
    $SaveFile = FileSaveDialog("Datei speichern..",@DesktopDir,"Word (*." & $mediaformat & ")",2,GUICtrlRead($FileList))
    If NOT @error Then Download()
    EndSwitch
    WEnd

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

    Func Download()
    If InetGet($server,$pfad & $data,1,0) Then
    MsgBox(64,"Info","Download OK")
    IniWrite(@ScriptDir & $ininame,"Downloads", "Dl-" & _NowDate() , $data)
    if $Dlprogress = 100 Then
    MsgBox(64,"Downloader", "Die Datei wurde erfolgreich gedownloadet!")
    EndIf

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


    EndFunc

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

    While @InetGetActive
    Sleep(200)
    $size1 = FileGetSize($SaveFile)
    $MBsize1 = FileGetSize($SaveFile)
    $Prozent = 100 * @InetGetBytesRead / $orisize
    $decimalplace = Round ($Prozent)
    $decimalplaceMBsize1 = Round (@InetGetBytesRead / 1024)
    GUICtrlSetData($Dlprogress,$decimalplace)
    GUICtrlSetData($prog_2,$decimalplace)
    GUICtrlSetData($prog_4,$decimalplaceMBsize1)
    WEnd

    [/autoit]

    Wie ihr vllt oben seht, wird erst eine file.txt eingelesen. Dort sollen die Dateien stehen, welche gedownloadet werden können. Zum Beispiel sieht eine Liste so aus:

    Inventarliste-Okt10
    Inventarliste-Nov11
    Inventarliste-Dez12
    Inventarliste-Jan01
    ....usw.

    Nun soll das Programm, wenn es gestartet wird, selbst prüfen ob die neuste "version" schon vorhanden ist. Also irgendwie muss das Datum mit der Endung der Datei überprüft werden und dann eine Variable auf "1" gesetzt werden, das die Datei für diesen Monat nicht nochmal gedownloadet wird.

    Könnt ihr mir da vllt etwas unter die Arme greifen habe nämlich noch keine ahnung wie ich das anstellen kann.
    Thx!

  • Ich würde das "vom Prinzip" so aufbauen:

    Spoiler anzeigen
    [autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    Case $Downloadbutton
    $files = FileOpen($SaveFileList,0)
    If $files = -1 Then
    MsgBox(0, "Fehler", "Konfig-Datei kann nicht geöffnet werden.")
    Exit
    EndIf

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

    While 1
    $file=FileReadLine($files)
    If @error = -1 Then ExitLoop ; letzte erreicht

    ; z.B. Unterschied ermitteln
    If StringLeft(StringRight($file,6),2) = @MON Then

    ; Fragen ob Downloaden
    ; wenn 'ja' Download-Funktion starten

    EndIf
    Wend
    FileClose($files)

    EndSwitch
    WEnd

    [/autoit]

    Zur Nutzung dieses Forum's, ist ein Übersetzer für folgende Begriffe unerlässlich:

    "On-Bort, weier, verscheiden, schädliges, Butten steyling, näckstet, Parr, Porblem, scripe, Kompletenz, harken, manuel zu extramieren, geckukt, würglich, excell, acces oder Compilevorgeng"

  • Vielen Dank! Ich habe mal versucht auf dein Script auszubauen:

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <ProgressConstants.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <Array.au3>
    #Include <date.au3>

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

    Dim $server = "http://www.irgendwas.de/test/"

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

    ; Dateiliste die runtergeladen werden soll
    Dim $filelist = "files.txt"

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

    ;Speicherpfad für die Liste
    Dim $savefilelist = @TempDir & "\files.txt"

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

    ;Textdatei laden
    If InetGet($server & $filelist, $savefilelist, 1) = 0 Then
    MsgBox(48, "Fehler...", "Fehler beim Download der Dateiliste")
    Exit 1
    EndIf

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

    ;Speicherort
    Dim $savefile

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

    ;Variable für die Dateiendung
    Dim $mediaformat = "doc"

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

    ;Dateiliste zum lesen öffnen
    Dim $fso = FileOpen($savefilelist, 0)

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

    ;Inhalt der Datei einlesen
    Dim $txt = FileRead($fso)

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

    Dim $programme = @ProgramFilesDir

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

    Dim $mediaformat = "doc"

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

    #Region ### START Koda GUI section ### Form=c:\users\johannes\desktop\lutherkirche ft webseite\gemeindebrief downloader\mainw.kxf
    $Form1 = GUICreate("Auto Download", 318, 302, 193, 125)
    $Edit = GUICtrlCreateEdit("", 16, 16, 281, 129, BitOR($ES_AUTOVSCROLL,$ES_AUTOHSCROLL,$ES_WANTRETURN,$WS_VSCROLL))
    GUICtrlSetState($Edit,$GUI_Disable)
    GUICtrlSetData(-1, "+++ Programm wurde gestartet+++")
    $Downloadbutton = GUICtrlCreateButton("Download", 16, 232, 281, 49, 0)
    $Dlprogress = GUICtrlCreateProgress(16, 160, 281, 25)
    GUISetIcon("shell32.dll",14)
    $prog_2 = GUICtrlCreateLabel("" ,24, 200, 36, 17)
    GUICtrlCreateLabel("% ( ",24, 200, 36, 17)
    $prog_4 = GUICtrlCreateLabel("", 128, 200, 36, 17)
    GUICtrlCreateLabel(") Kb wurde heruntergeladen" ,128, 200, 36, 17)
    $Label3 = GUICtrlCreateLabel("Label3", 216, 200, 36, 17)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    DirCreate("C:\" & $programme & "\Test")

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    Case $Downloadbutton
    $files = FileOpen($SaveFileList,0)
    If $files = -1 Then
    MsgBox(0, "Fehler", "Konfig-Datei kann nicht geöffnet werden.")
    Exit
    EndIf

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

    While 1
    $file=FileReadLine($files)
    If @error = -1 Then ExitLoop ; letzte erreicht

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

    ; z.B. Unterschied ermitteln
    If StringLeft(StringRight($file,6),2) = @MON Then
    If Not @error Then Download()
    MsgBox(64,"success","gleicher Monat")

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

    ; Fragen ob Downloaden
    ; wenn 'ja' Download-Funktion starten
    Else
    MsgBox(64,"erorr","anderer Monat")

    EndIf
    Wend
    FileClose($files)

    EndSwitch
    WEnd

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

    Func Download()
    $SaveFile = FileSaveDialog("Datei Speichern...", @DesktopDir, "Word (*." & $mediaformat & ")", 2, $txt)
    GUISetState(@SW_DISABLE)
    $selectet = $server & $txt
    $FileSize = InetGetSize($selectet)
    InetGet($selectet, $SaveFile, 1, 1)
    $curSize = 0

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

    Do
    GUICtrlSetData($Dlprogress, $curSize)
    $curFileSize = FileGetSize($SaveFile)
    $curSize = $curFileSize * 100
    $curSize = $curSize / $FileSize
    $curSize = Ceiling($curSize)
    $curFileSize = Round($curFileSize / 1024 / 1024, 2)
    GUICtrlSetData($Label3, $curFileSize & " - " & Round($FileSize / 1024 / 1024, 2) & " MB (" & $curSize & "%)")
    Sleep(200)
    Until $curSize >= 99
    GUISetState(@SW_ENABLE)
    GUICtrlSetData($Label3, "Download beendet!!!")
    GUICtrlSetData($Dlprogress, 0)
    EndFunc ;==>RunDownload

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

    Nur richtig funktionieren tut es leider noch nicht. Zum Beispiel:

    - Die Progressbar zeigt nicht den aktuellen Downloadfortschritt an
    - Die Label "$prog_4" und "$prog_2" zeigen nicht die gewünschten % Zahlen bzw. die derzeitg schon gedownloadete Menge an


    Ausgabe der Variablen:
    file= Inventarliste-Okt10
    files= 2
    savefilelist= C:\Users\Johannes\AppData\Local\Temp\files.txt
    server= http://www.irgendwas.de/test/
    filelist= files.txt
    fso= 1
    txt= Inventarliste-Okt10.txt


    Komisch ist jetzt nur, das:

    [autoit]

    $savefile = FileSaveDialog("Datei Speichern...", @DesktopDir, "Word (*." & $mediaformat & ")", 2, $txt)

    [/autoit]

    nicht ausgeführt wird, jedoch:

    [autoit]

    MsgBox(64,"savefile","hi")

    [/autoit]

    ..danach.

    2 Mal editiert, zuletzt von Johannes (9. Oktober 2008 um 17:24)