[PROJEKT] Automatisierter Download und Verarbeitung von Audiodateien

  • Also es passiert einfach Nichts. keine ErrorMeldung, kein Download ... nichts.

    Die InetGet's geben alle drei "0" zurück

    Ein Tag ist schön, wenn am ende vom "exit" alles gut gelaufen ist :)

  • Und was sagt @error?

    Zitat von AutoIt Help > INetGet

    Failure: Background: A handle is returned. To determine if there was an error with the download, use InetGetInfo().
    The handle must be closed with InetClose(). Wait: Sets @error to non-zero and returns 0.

    Grüße Yaerox

    Grüne Hölle

  • Ich habe jetzt mal die Funktion aus dem Programm gelöst und auf ein Minimum reduziert. Also ohne irgendwas drum rum.

    Die FTP-Zeile habe ich im FF getestet und sie funktioniert. ftp://anna:anna:passwort@server.com/News/Opener.mp3

    Trotzdem bekomme ich keine Ergebnisse.

    [autoit]

    $Test = InetGet("ftp://anna:anna:passwort@server.com/News/Opener.mp3", "Opener.mp3", 1, 1)

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

    $aData = InetGetInfo($Test, -1) ; Hole alle Informationen.
    InetClose($Test) ; Handle schließen um die Resourcen freizugeben.
    MsgBox(0, "", "Bytes gelesen: " & $aData[0] & @CRLF & _
    "Größe: " & $aData[1] & @CRLF & _
    "Komplett?: " & $aData[2] & @CRLF & _
    "Erfolgreich?: " & $aData[3] & @CRLF & _
    "@error: " & $aData[4] & @CRLF & _
    "@extended: " & $aData[5] & @CRLF)

    [/autoit]

    Ergebnis:
    Bytes gelesen: 0
    Größe: 0
    Komplett?: False
    Erfolgreich?: False
    @error: 0
    @extended: 0

    Ich verstehs nicht mehr :(

    Ein Tag ist schön, wenn am ende vom "exit" alles gut gelaufen ist :)

  • Teste mal den URL Aufruft im IE. Da Autoit bei InetGet auf IE-Schnittstelle zugreift, würde ich fast Wetten, das IE mit dem Doppelpunkt im Benutzernamen nicht klar kommt.

    Aber warum nimmt dazu eigentlich nicht die FTP-Funktionern:

    [autoit]

    _FTP_FileGet

    [/autoit]

    Oder noch besser das hier, dann hast noch eine Fortschrittsanzeige:

    [autoit]

    _FTP_ProgressDownload

    [/autoit]

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Sowas habe ich schon vermutet, darum hat es mti _FTP__ProgressDownload auch funktioniert und der InetGet nicht :(

    Das heißt Sendechef anschreiben und PW ändern lassen.

    Bevor wir hier aber ein anderes PW haben das auch wieder nicht funzt. Gibt es irgendwo eine Liste von Zeichen die in einem PW niemals vorkommen sollten?

    Ein Tag ist schön, wenn am ende vom "exit" alles gut gelaufen ist :)

  • Warum nimmst nicht einfach _FTP Funktionen? Ist ja schließlich FTP also komplett sinnfrei da InetGet zu nehmen.

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • hmmmm ....

    Tja, warum? ...

    Ich fürchte weil ich grade froh war InetGet kapiert zu haben und da wieder neu einsteigen müßte :D

    Wird aber wohl nötig sein ... :(

    Ein Tag ist schön, wenn am ende vom "exit" alles gut gelaufen ist :)

  • Das kann man doch bestimmt escapen?

    Im Internet das hier gefunden:

    Zitat

    All you have to do to escape special characters in your ftp password is find the hexidecimal value of the value to be escaped, and prefix it with a %

    hence the password b@ner would now be b%40ner

  • Geht leider nicht ... :(

    Denn entweder wird "%40" vor der Übermittlung wieder in "@" gewandelt, dann hast Du das selbe Problem wie vorher.

    Oder es wird "%40" übertragen und der FTP interpretiert das leider nicht zurück bekommt dann eben auch "%40" anstatt "@" und man bekommt einen Passwort Error.

    Ich habs jetzt über FTPEx.aue gelöst, war zwar jetzt nochmal heftig aufwand alles umzusellen und mich da neu rein zudenken, aber es funktioniert. :)

    Ein Tag ist schön, wenn am ende vom "exit" alles gut gelaufen ist :)

  • Meine FTP-Probleme habe ich inzwischen gelöst bekommen :D ... Danke nochmal an alle die mir geholfen haben.

    Ich hatte ja schon mal erwähnt, dass ich unter anderemauch testenmöchte ob ein User auch seine Zugangsdaten korrekt eingegeben hat. Der ursprüngliche Gedanke war eine simple Abfrage ob die Verbindung hergestellt wurde, was aber dann doch nicht so einfach war.

    Inzwischen habe ich mir überlegt, dass es sinnvoll wäre die Überprüfung zu erweitern. Es ist ja nicht nur der Verbindungsaufbau wichtig, sondern auch ein funktionierender Download und das Auslesen der dort abgelegten Ini-Datei.

    Zu dem Zweck möchte ich mit der folgenden Funktion eine Vebindung aufbauen, die original zugangs.ini herunterladen, eine Variable namens check auslesen und überprüfen. Wenn der Wert der Variablen "OK" ist, kommt die Meldung, dass die Verbindung in Ordnung ist. Ist es hingegen nicht möglich den Wert der Variablen zu ermitteln, kommt eine Meldung über die fehlgeschlagene Verbindung und es öffnet sich die Gui für die Optionen, um die Angaben zu überprüfen.

    Das funktioniert so weit auch, aber wenn ich zum testen einmal einen falschen Benutzernamen eingegeben habe und die If-Schleife mit der Fehlermeldung durchlaufen wurde, bekomme ich immer die Fehlermeldung, obwohl die Verbindung OK war.

    Allerdings finde ich mal wieder nicht meinen Denkfehler :(

    Spoiler anzeigen
    [autoit]

    Func _ConTest()
    Local $_S1_Open = _FTP_Open('MyFTP Control')
    Local $_S1_Conn = _FTP_Connect($_S1_Open, $sOptFtpServer, $sOptFtpUser, $sOptFtpPasswd, 0, $INTERNET_DEFAULT_FTP_PORT, $INTERNET_SERVICE_FTP, 0) ; Verbindung zum FTP-Server
    _FTP_ProgressDownload($_S1_Conn, "temp" & $sOptFtpZugang, "../_func/" & $sOptFtpZugang, "_UpdateProgress") ; Download der Datei "zugangs.ini"
    _FTP_Close($_S1_Open) ; Schließen der FTP-Verbindung

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

    Sleep(500)
    Local $check = IniRead("temp\zugang.ini", "sektion1", "check", "Nicht gefunden") ;Auslesen der Datei "zugangs.ini" ([Sektion1] check = "OK") - Wenn alles OK dann $check = OK, wenn nicht dann $check = Nicht gefunden
    Sleep(500)
    FileDelete("temp\zugang.ini") ; löschen der geladenen Datei zugangs.ini
    If $check = "Nicht gefunden" Then ;überprüfen der $check auf "OK" oder "Nichtgefunden
    MsgBox (64, "Verbindungs Check", "Verbindung zum Server fehlgeschlagen") ; Nachricht bei "Nicht gefunden"
    GUISetState(@SW_SHOW, $sGuiMain) ; MainGUI bleibt offen
    GUISetState(@SW_SHOW, $sGuiOpt) ; OptionenGUI wird geöffnet
    Return 1
    Else
    MsgBox (64, "Verbingungs Check", "Verbindung zum Server fehlerfrei") ; Nachricht wenn $check = "OK"
    Return 1
    Endif
    EndFunc

    [/autoit]

    Wie gesagt an sich funktioniert alles wie gewollt. Nur wenn die Verbindung einmal fehlgeschlagen ist, durchläuft die If-Schleife nur noch den Bereich (Nachricht bei "Nicht gefunden"). Erst nach Neustart des Programms läuft wieder alles normal.


    EDIT:
    Den Fehler habe ich zwar gefunden, aber keine ahung wie ich ihn beheben soll.

    Wenn keine Verbindung zustande kommt, legt das Programm im Verzeichnis "temp" trotzdem eine Datei mit dem Namen "zugang.ini" an, diese ist allerdings leer und kann wohl nicht gelöscht werden. Sie verschwindet erst mit dem Beenden des Programms.

    Ein Tag ist schön, wenn am ende vom "exit" alles gut gelaufen ist :)

    2 Mal editiert, zuletzt von AnMa (21. September 2013 um 03:18)

  • Schau dir mal das Beispiel in der Hilfe bei _FTP_Connect an dort wird genau das gemacht was du willst. Sprich geprüft ob Verbindung hergestellt wurde, Zugangsdaten stimmen und Downlaod geht.

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • chip: Danke, hört sich interessant an. Ich muß nur mal sehen wo ich die entsprechende Hilfe finde. Inzwischen verlaufe ich mich zwischen all den Tutorials, UDF's OnlineHilfen usw... Ich weiß kaum noch wo ich nach was suchen muß :)

    In der Zwischenzeit kämpfe ich mit einem weiteren Progblem. Ich muß bevor ich das feritfe File am Ende in das entsprechende Audioverzeichnis kopieren lasse noch den ID3Tag ändern, bzw. anlegen.

    Dazu nutze ich aktuell diese UDF - http://www.autoitscript.com/forum/topic/43…id3v2-mp3-tags/

    Für den ID3v1 Tag habe ich auch eine Lösung ausgearbeitet.
    Aufrufen der Funktion:

    [autoit]

    _Write_ID3Tag(@ScriptDir & "\temp\Mix.mp3", "Nachrichtenstudio", "Die " & $sStd & ":00 Uhr News - aus dem")

    [/autoit]

    Die Funktion:

    [autoit]

    #Region ### WRITE ID3 TAG ###
    Func _Write_ID3Tag($sAudMix, $sArtist, $sTitel)
    _ID3v1Field_SetString("Title",$sTitel,0) ;force pad with 0x00
    _ID3v1Field_SetString("Artist",$sArtist,0) ;force pad with 0x00)
    _ID3v1Tag_WriteToFile($sAudMix)
    EndFunc
    #EndRegion ### WRITE ID3 TAG ###

    [/autoit]

    Ich habe zwar auch den Lösungsansatz für das schreiben des ID3v2 Tags, aber ich finde noch keinen Weg die Daten (Interpret und Titel) zu übergeben.

    Das hier in die obige Funktion mit einzubeziehen scheint der vollkommen falsche Ansatz zu sein.

    [autoit]

    _ID3v2Frame_SetFields("TIT2",$sTitel)
    _ID3v2Frame_SetFields("TPE1",$sArtist)
    _ID3v2Tag_WriteToFile($sAudMix)

    [/autoit]

    Ein Tag ist schön, wenn am ende vom "exit" alles gut gelaufen ist :)

  • chip: Danke, hört sich interessant an. Ich muß nur mal sehen wo ich die entsprechende Hilfe finde. Inzwischen verlaufe ich mich zwischen all den Tutorials, UDF's OnlineHilfen usw... Ich weiß kaum noch wo ich nach was suchen muß :)[/autoit]

    Gibt nur eine offzielle Hilfe und zwar die welche mit Autoit mitkommt bzw. die deutsche Übersetung dazu. Hier drauf klicken:

    [autoit]

    _FTP_Connect

    [/autoit]

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Ja richtig, wir konnten heute ein Mißverständnis bezüglich der Hilfe klären und aufeinmal verstehe ich wovon ihr hier oft gesprochen habt :)

    Fühl mich mit der korrekten Hilfe jetzt wie Anna im Wunderland :D

    Ein Tag ist schön, wenn am ende vom "exit" alles gut gelaufen ist :)

  • Ich arbeite gerade an einer Überprüfungsroutine, hierbei soll in regelmäßigen Abständen überprüft werden ob die Verbindung zum Server noch steht und entsprechend die Buttons aktiviert bzw. deaktiviert werden und in der Stuszeile eine ensprechende Info erscheinen.

    Dazu habe ich eine Funktion geschrieben die die Verbindung zum Server überprüft und die ich gern alle X Minuten aufrufen möchte, aber irgendwie kapier ich nicht ganz wie ich in einer bereits laufende While-Schleife (While-Schleife des MainGui) eine andere initegriere.
    Auch zu den Buttons habe ich eine Funktion geschrieben, die eben dann aufgerufen werden soll, wenn sich der Status der von der Verbindungsüberprüfung zurück gegebenen Variablen verändert hat (True/False).

    Das erste wäre die zeitliche Schleife ...

    Die müßte dann ja irgendwie parallel zur Hauptschleife laufen oder?

    Ein Tag ist schön, wenn am ende vom "exit" alles gut gelaufen ist :)

  • Du kannst in Autoit nichts parallel laufen lassen. Sprich sobald du in der Überprüfung bist funktioniert so lange nichts anderes.

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Zitat

    Dazu habe ich eine Funktion geschrieben die die Verbindung zum Server überprüft und die ich gern alle X Minuten aufrufen möchte

    Glaub du suchst das:

    [autoit]

    AdlibRegister("_test",250)

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

    while 1

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

    Sleep(10)
    WEnd

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

    Func _test()
    ConsoleWrite("test");
    EndFunc

    [/autoit]

    Unterbricht die While Schleife alle 250ms und führt die Funktion aus

  • OK, danke erstmal ... Das "AdlibRegister werde ich mal austesten.
    Ich muß mal sehen wie ich das anstelle.


    Könnte ich die Überprüfungsroutinen eventuell auch in ein anderes Programm packen, so dass das eigentliche Programm mit "Run" die entsprechenden Überprüfungen ausführt?

    Wobei dann da wieder die Frage ist wie ich die Statusänderung in das Hauptprogramm zurück bekomme.

    Ein Tag ist schön, wenn am ende vom "exit" alles gut gelaufen ist :)