Script funktioniert nicht mehr.

  • Hi leute.
    Habe anhand von beispielen einen kleinen Youtube to MP3 download gebastelt.
    Das Problem ist, anfangs funktionierte alles doch dann hab ich irgendetwas geändert (denke ich mal) und nun geht er nicht mehr 100%.

    Das Problem ist er lädt die flv datei aber wandelt diese nicht mehr um.

    Code:
    EDIT////////

    Hab den Fehler gefunden!

    Aber andere frage. Wie kann ich machen das er warten soll bis datei 1 existiert befor er datei 2 löscht?

    Einmal editiert, zuletzt von slash (18. Oktober 2009 um 15:57)

  • Was meinst du damit?
    Also wenn die Datei erfolgreich umgewandelt wurde, dann soll die "Quelldatei" (.flv) gelöscht werden?

  • Mhm bekomme des iwie nich hin ??

    SourceCode:

    [autoit]

    #include <GUIconstants.au3>
    #include <Guiedit.au3>
    #include <inet.au3>
    #include <string.au3>
    #include <array.au3>

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

    FileDelete( @TempDir & "\ytbg.jpg")
    FileDelete( @TempDir & "\ytbtn.jpg")
    FileDelete( @TempDir & "\ytsplash.jpg")
    Filedelete( @TempDir & "\ytflv.exe")

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

    FileInstall(@ScriptDir & "\ytbg.jpg", @TempDir & "\ytbg.jpg")
    FileInstall(@ScriptDir & "\ytbtn.jpg", @TempDir & "\ytbtn.jpg")
    FileInstall(@ScriptDir & "\ytsplash.jpg", @TempDir & "\ytsplash.jpg")
    FileInstall(@ScriptDir & "\ytflv.exe", @TempDir & "\ytflv.exe")

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

    $destination = @TempDir & "\ytsplash.jpg"

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

    SplashImageOn("", $destination,398,41)
    Sleep(3000)
    SplashOff()

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

    GUICreate("YouTube 2 MP3 Converter by Slash", 398, 340)
    GUICtrlCreatePic(@TempDir & "\ytbg.jpg", 0, 0, 398, 340)
    GUICtrlSetState(-1,$GUI_DISABLE)
    $lurl = GUICtrlCreateLabel("Url:", 0, 41)
    GUICtrlSetBkColor ($lurl, 0xFFFFFF)
    $URL = GUICtrlCreateInput("", 20, 41, 378)
    $dl_AND = GUICtrlCreatePic(@TempDir & "\ytbtn.jpg", 0, 62, 398, 41)
    GUICtrlSetCursor (-1, 0)
    $Console = GUICtrlCreateEdit("", 0, 100, 398, 220, BitOR($GUI_SS_DEFAULT_EDIT, $ES_READONLY))
    $progress=GUICtrlCreateProgress(0,320,398,20)
    GUICtrlSetBkColor($Console, "0xFFFFFF") ; Set background color of output field
    GUICtrlSetColor($Console, "0xff0000") ; Set font color of output field
    GUISetState()
    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $dl_AND
    _Start()
    EndSwitch
    WEnd
    Func _Start()
    $lastest=0
    ;~ Local
    $you_url = GUICtrlRead($URL)
    If Not StringInStr($you_url, "youtube.com") Then Return MsgBox(0, "Fehler!", "Dieser Link ist kein Gültiger Youtube Link!")
    add("Url zum Downloaden:" & $you_url)
    ;~ First get the v= parameter
    for $1=1 to StringLen($you_url)
    if StringMid($you_url,$1,2) = "v=" Then
    $url_1=StringMid($you_url,$1+2)
    ExitLoop
    EndIf
    Next
    if StringInStr($url_1,"&") Then
    ;~ MsgBox(0,"NEW","")
    for $1=1 to StringLen($url_1)
    if StringMid($url_1,$1,1) = "&" Then
    $url_1=StringMid($url_1,1,$1-1)
    EndIf
    Next
    EndIf

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

    ;~ MsgBox(0,0,$url_1&@CR&$you_url)
    $download = "http://www.youtube.com/get_video?video_id=" & $url_1 & "&t="
    $source=_INetGetSource("http://www.youtube.com/api2_rest?method=youtube.videos.get_video_token&video_id=" & $url_1)
    ;~ ConsoleWrite($source & @CRLF)
    $between = _StringBetween($source, '<t>', '</t>')
    $download &= $between[0]
    add("Link zur FLV Datei:" & $download)
    $size = InetGetSize($download) / 1024 / 1024
    $calculateperc = InetGetSize($download) / 100
    add("Downloaden..")
    $name=_StringBetween(_INetGetSource($you_url),'<meta name="title" content="','">')
    $name=StringReplace(StringReplace($name[0],"'",""),"´","")
    ;~ MsgBox(0,0,$name&@CRLF& @ScriptDir&"\"&$name&".flv")
    GUICtrlSetData($progress,0)
    InetGet($download, @ScriptDir&"\"&$name&".flv", 1, 1)
    While @InetGetActive
    $get = @InetGetBytesRead
    For $1 = 0 To 100
    If $get > $calculateperc * $1 And $get < $calculateperc * ($1 + 1) Then
    if $lastest = $1-1 Then
    GUICtrlSetData($progress,$1)
    $lastest=$1
    EndIf
    EndIf
    Next
    Sleep(10)
    WEnd
    GUICtrlSetData($progress,100)
    add("Download abgeschlossen")
    add("Starte nun das Umwandeln der Datei!")
    Run(@TempDir&'\ytflv.exe "'&@ScriptDir&'\'&$name&'.flv'&'"',@ScriptDir,@SW_HIDE )
    add("Umwandeln abgeschlossen!:"&@ScriptDir&"\"&$name&".mp3")
    add("Löschen der FLV Datei")
    If FileExists (@ScriptDir&"\"&$name&".mp3") Then
    FileDelete (@ScriptDir&"\"&$name&".flv")
    EndIf
    add("FLV Datei erfolgreich gelöscht!")
    EndFunc ;==>_Start

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

    Func add($zText)
    _GUICtrlEdit_AppendText($Console, $zText & @CRLF)
    EndFunc ;==>add

    [/autoit]

    Was mache ich falsch?

  • Hallo slash,

    das löschen der Datei funktioniert bei mir (musste zwar manuell eine Datei mit mp3 Endung erzeugen da ich die ytflv.exe nicht habe) aber die Anzeige ist verkehrt. Du musst die Zeilen 102 und 103 umtauschen, da immer die Meldung erfolgreich gelöscht kommt. Ausserdem wiederholt sich die Func _Start fortwährend, hierzu habe ich noch keine Lösung,

    mfg (Auto)Bert

  • Ähm, wenn ich deinen Code testen will, krieg ich direkt beim Start den Fehler, dass die URL kein Youtube-Link ist, ohne eine Chance zu haben, was einzugeben. ???
    Desweiteren gibt er mir den Fehler aus, Dass die Variable in Zeile 50 (Die $URL) nicht deklariert wurde :o?

  • Hallo slash,

    die FLV wird bei mir gelöscht, nur die Ausgabe in der Console ist falsch (siehe meinen vorhegehenden Post).

    @Rubberducky die Variable wird in Zeile 48 deklariert, die Fehlermeldung mit der MsgBox resultiert wohl daraus, dass die Func _Start ausgeführt wird, du kannst aber trotzdem eine URL eingeben und danach die MsgBox wegklicken.

    Edit: Zeile 29

    [autoit]

    $dl_AND = GUICtrlCreatePic(@TempDir & "\ytbtn.jpg", 0, 62, 398, 41)

    [/autoit]

    löst den automatischen Start aus, wenn das JPG-File nicht existiert

    mfg (Auto)Bert

  • Ja aber ich schu neben bei im ordner nach wo er die dateien herunter lädt.
    Und nach abschluss vom umwandeln ist die flv noch da auch wenn ich 5mins warte^^
    daher ja, ich hab ka wie ich des lösen soll

  • Hallo slash,

    wie bereits gepostet: wenn ich eine LIED. MP3 manuell erstelle wird die LIED.FLV gelöscht, kannst du die EXE zum umwandeln bzw. den Link dazu hier einstellen, damit ich das Programm vollständig testen kann,

    PS.: die Ziel.MP3 hat bei mir immer 0 KB (Inetstörungen bei mobilem Download???)

    mfg (Auto)Bert

  • Bei mir funktioniert es einwandfrei
    zum löschen habe ich dies hier benutzt, finde es irgendwie eleganter (kann mich aber auch irren)

    [autoit]


    Do
    Sleep(1)
    Until FileExists (@ScriptDir&"\"&$name&".mp3")
    FileDelete (@ScriptDir&"\"&$name&".flv")

    [/autoit]

    autoBert
    Versuch mal Zeile 29 zu folgendem zu ändern:

    [autoit]

    $dl_AND = GUICtrlCreateButton("Download",0,62,398,41)

    [/autoit]

    Da wir das von GUICtrlCreatePic gefragte Bild nicht haben, ist $dl_AND = "" , oder?
    Wenn also GUIGetMsg einen leeren wert liefert weil nichts geklickt wurde, startet Case $dl_AND (da es auch leer ist) in dem Fall die Funktion immer und immer wieder.

  • Hallo slash,

    hier ein abgeändertes Skript:

    Spoiler anzeigen
    [autoit]

    #include <GUIconstants.au3>
    #include <Guiedit.au3>
    #include <inet.au3>
    #include <string.au3>
    #include <array.au3>

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

    FileDelete(@TempDir & "\ytbg.jpg")
    FileDelete(@TempDir & "\ytbtn.jpg")
    FileDelete(@TempDir & "\ytsplash.jpg")
    FileDelete(@TempDir & "\ytflv.exe")

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

    FileInstall(@ScriptDir & "\ytbg.jpg", @TempDir & "\ytbg.jpg")
    FileInstall(@ScriptDir & "\ytbtn.jpg", @TempDir & "\ytbtn.jpg")
    FileInstall(@ScriptDir & "\ytsplash.jpg", @TempDir & "\ytsplash.jpg")
    FileInstall(@ScriptDir & "\ytflv.exe", @TempDir & "\ytflv.exe")

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

    $destination = @TempDir & "\ytsplash.jpg"

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

    SplashImageOn("", $destination, 398, 41)
    Sleep(3000)
    SplashOff()

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

    GUICreate("YouTube 2 MP3 Converter by Slash", 398, 340)
    GUICtrlCreatePic(@TempDir & "\ytbg.jpg", 0, 0, 398, 340)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $lurl = GUICtrlCreateLabel("Url:", 0, 41)
    GUICtrlSetBkColor($lurl, 0xFFFFFF)
    $URL = GUICtrlCreateInput("", 20, 41, 378)
    $dl_AND = GUICtrlCreatePic(@TempDir & "\ytbtn.jpg", 0, 62, 398, 41)
    GUICtrlSetCursor(-1, 0)
    $Console = GUICtrlCreateEdit("", 0, 100, 398, 220, BitOR($GUI_SS_DEFAULT_EDIT, $ES_READONLY))
    $progress = GUICtrlCreateProgress(0, 320, 398, 20)
    GUICtrlSetBkColor($Console, "0xFFFFFF") ; Set background color of output field
    GUICtrlSetColor($Console, "0xff0000") ; Set font color of output field
    GUISetState()
    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $dl_AND
    _Start()
    EndSwitch
    WEnd
    Func _Start()
    $lastest = 0
    ;~ Local
    $you_url = GUICtrlRead($URL)
    If Not StringInStr($you_url, "youtube.com") Then Return MsgBox(0, "Fehler!", "Dieser Link ist kein Gültiger Youtube Link!")
    add("Url zum Downloaden:" & $you_url)
    ;~ First get the v= parameter
    For $1 = 1 To StringLen($you_url)
    If StringMid($you_url, $1, 2) = "v=" Then
    $url_1 = StringMid($you_url, $1 + 2)
    ExitLoop
    EndIf
    Next
    If StringInStr($url_1, "&") Then
    ;~ MsgBox(0,"NEW","")
    For $1 = 1 To StringLen($url_1)
    If StringMid($url_1, $1, 1) = "&" Then
    $url_1 = StringMid($url_1, 1, $1 - 1)
    EndIf
    Next
    EndIf

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

    ;~ MsgBox(0,0,$url_1&@CR&$you_url)
    $download = "http://www.youtube.com/get_video?video_id=" & $url_1 & "&t="
    $source = _INetGetSource("http://www.youtube.com/api2_rest?method=youtube.videos.get_video_token&video_id=" & $url_1)
    ;~ ConsoleWrite($source & @CRLF)
    $between = _StringBetween($source, '<t>', '</t>')
    $download &= $between[0]
    add("Link zur FLV Datei:" & $download)
    $size = InetGetSize($download) / 1024 / 1024
    $calculateperc = InetGetSize($download) / 100
    add("Downloaden..")
    $name = _StringBetween(_INetGetSource($you_url), '<meta name="title" content="', '">')
    $name = StringReplace(StringReplace($name[0], "'", ""), "´", "")
    ;~ MsgBox(0,0,$name&@CRLF& @ScriptDir&"\"&$name&".flv")
    GUICtrlSetData($progress, 0)
    InetGet($download, @ScriptDir & "\" & $name & ".flv", 1, 1)
    While @InetGetActive
    $get = @InetGetBytesRead
    For $1 = 0 To 100
    If $get > $calculateperc * $1 And $get < $calculateperc * ($1 + 1) Then
    If $lastest = $1 - 1 Then
    GUICtrlSetData($progress, $1)
    $lastest = $1
    EndIf
    EndIf
    Next
    Sleep(10)
    WEnd
    If @InetGetBytesRead > -1 Then ; <======== nur wenn kein Downloadfehler
    GUICtrlSetData($progress, 100)
    add("Download abgeschlossen")
    add("Starte nun das Umwandeln der Datei!")
    RunWait(@TempDir & '\ytflv.exe "' & @ScriptDir & '\' & $name & '.flv' & '"', @ScriptDir, @SW_HIDE) ; <======== damit ytflv.exe auch wirklich mit dem Umwandeln fertig ist und nicht die QUELL.FLV blockiert
    add("Umwandeln abgeschlossen!:" & @ScriptDir & "\" & $name & ".mp3")
    add("Löschen der FLV Datei")
    Sleep(1000) ; <======== vorsichtshalber eingebaut
    If FileExists(@ScriptDir & "\" & $name & ".mp3") Then
    FileDelete(@ScriptDir & "\" & $name & ".flv")
    add("FLV Datei erfolgreich gelöscht!")
    EndIf
    Else ; <======== wenn Downloadfehler (bei mir leider immer)
    add("Downloadfehler von " & $you_url & @CRLF & "(" & $name & ")")
    ;FileDelete(@ScriptDir & "\" & $name & ".flv")
    EndIf
    EndFunc ;==>_Start

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

    Func add($zText)
    _GUICtrlEdit_AppendText($Console, $zText & @CRLF)
    EndFunc ;==>add

    [/autoit]

    leider sind die heruntergeladenen Dateien immer 0-Bytes groß also unbrauchbar

    SEuBo

    Zitat

    autoBert
    Versuch mal Zeile 29 zu folgendem zu ändern:

    [autoit]

    $dl_AND = GUICtrlCreateButton("Download",0,62,398,41)

    [/autoit]

    Da wir das von GUICtrlCreatePic gefragte Bild nicht haben, ist $dl_AND = "" , oder?
    Wenn also GUIGetMsg einen leeren wert liefert weil nichts geklickt wurde, startet Case $dl_AND (da es auch leer ist) in dem Fall die Funktion immer und immer wieder.

    stimmt genau, das Problem habe ich gelöst indem ich mir das fehlende JPG erzeugt habe (X-Beliebe JPG-Datei umkopiert)

    Die Lösung mit dem Löschen von dir führt zu einer endlosschleife, sollte aus irgendeinem Grund die MP3 nicht vorhanden sein. Ich habe deshalb runwait statt run für den Aufruf von ytflv.exe und noch einen sleep von 1000 ms danach genommen, dies erscheint mir sicherer.

    mfg (Auto)Bert

  • Hi, ich denke, das Problem ist:
    Die Datei wird erstellt - es sind aber noch daten drin. Diese werden erst noch geschrieben.
    Mach doch vor dem löschen einfach noch ein Sleep(1000) rein..
    oder prüfe per processexists, ob das umwandeln abgeschlossen ist...

    Gruß
    Chrischn

    ... wasweisichdennschon...