Hallo!
Mit meinem Multidownloader ist es möglich, Videos aus dem Netz herunterladen und diese konvertieren.
Schon eine Weile ist's her, dass ich an meinem Multidownloader rumgeschrieben hab.
Verschiedene Teile des Skriptes lassen wahrscheinlich darauf deuten =)
Spoiler anzeigen
#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_icon=D:\DOWNLOADS\Download.ico
#AutoIt3Wrapper_outfile=..\..\Fertige Programme\Multidownloader\Multidownloader.exe
#AutoIt3Wrapper_Res_Language=1031
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
#include <GUIConstants.au3>
#include<Guilistview.au3>
#include<array.au3>
#include<Inet.au3>
#include<string.au3>
#include<guibutton.au3>
#include <WindowsConstants.au3>
#include <ComboConstants.au3>
#include<ie.au3>
$inireader = IniRead(@ScriptDir & "\data.ini", "default", "Ausgabeort", @DocumentsCommonDir)
$Multidownloader_1 = GUICreate("Multidownloader", 670, 530, 208, 107)
$ListView1 = GUICtrlCreateListView("Link|Portal|Ausgabeort|Ausgabename|Format|Qualität", 5, 50, 655, 313)
GUICtrlSendMsg(-1, 0x101E, 0, 250)
GUICtrlSendMsg(-1, 0x101E, 1, 50)
GUICtrlSendMsg(-1, 0x101E, 2, 150)
GUICtrlSendMsg(-1, 0x101E, 3, 150)
GUICtrlSendMsg(-1, 0x101E, 4, 50)
GUICtrlSendMsg(-1, 0x101E, 5, 100)
$Download = GUICtrlCreateGroup("Download hinzufügen", 5, 369, 652, 122)
$LINK = GUICtrlCreateInput("MTV.video / Youtube-Link hier eingeben", 18, 392, 421, 21)
$Input1 = GUICtrlCreateInput("Ausgabetitel hier eingeben", 449, 392, 200, 21)
$Ausgabeort = GUICtrlCreateButton("Ausgabeort ändern", 339, 420, 98, 29, $WS_GROUP)
$Button1 = GUICtrlCreateButton("Download hinzufügen", 8, 458, 641, 28, $WS_GROUP)
$Radio1 = GUICtrlCreateRadio("Mp3", 450, 414, 43, 20)
GUICtrlSetState(-1, $GUI_CHECKED)
$Radio2 = GUICtrlCreateRadio("Mp4", 450, 431, 46, 20)
$Ausgabe = GUICtrlCreateInput("", 18, 424, 313, 21)
GUICtrlSetState($Ausgabe, $gui_disable)
If $inireader = "" Then
GUICtrlSetData($Ausgabe, @DocumentsCommonDir)
Else
GUICtrlSetData($Ausgabe, $inireader)
EndIf
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Button2 = GUICtrlCreateButton("Liste downloaden", 10, 496, 638, 25, $WS_GROUP)
$Pic1 = GUICtrlCreatePic(@ScriptDir & "\multidownloader.jpg", 0, 0, 669, 100)
$Label2 = GUICtrlCreateLabel("Multidownloader by 2$Billie", 3, 3, 320, 36)
GUICtrlSetFont(-1, 20, 400, 0)
GUICtrlSetColor(-1, 0x3D95FF)
GUICtrlSetBkColor(-1, 0x000000)
WinSetTrans($Multidownloader_1, "", 230)
GUISetState(@SW_SHOW)
GUICtrlSetState($Button2, $gui_disable)
Global $portal = ""
Global $sformat = True
Global $blabla = False
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $LINK
$linkread = GUICtrlRead($LINK)
If $linkread = "" Then MsgBox(16, "Fehler", "Bitte gib einen Link ein")
If StringRegExp($linkread, "^(?:http:\/\/)*www\.mtv\.de\/videos") Then $portal = "mtv"
If StringRegExp($linkread, "(?i)(?:http\:\/\/)?www\.youtube\.\w+\/watch\?v=[\d\w-_]+(?:\s*$|&feature=\w+\s*$)") Then $portal = "youtube"
If StringRegExp($linkread, "^(?:http:\/\/)*www\.myvideo.de/watch/") Then $portal = "Myvideo"
Case $Ausgabeort
$OUtPUTFILE = FileSelectFolder("Ausgabeort", "Eigene Dateien", 1, "")
If $OUtPUTFILE = "" Then
MsgBox(16, "Fehler", "Bitte gib einen Speicherort an")
Else
IniWrite(@ScriptDir & "\data.ini", "default", "Ausgabeort", $OUtPUTFILE)
$inireadb = IniRead(@ScriptDir & "\data.ini", "default", "Ausgabeort", @DocumentsCommonDir)
GUICtrlSetData($Ausgabe, $inireadb)
EndIf
If $OUtPUTFILE = "arbeitsplatz" Then
MsgBox(16, "Fehler", "Du kannst keine Datei auf dem Arbeitsplatz speichern")
GUICtrlSetData($Ausgabe, @DocumentsCommonDir)
Else
GUICtrlSetState($Button1, $gui_enable)
EndIf
Case $Radio2
If GUICtrlRead($Radio2) = $GUI_CHECKED Then
$combobox = GUICtrlCreateCombo("", 504, 424, 113, 25, BitOR($CBS_DROPDOWNLIST, $CBS_AUTOHSCROLL))
GUICtrlSetData(-1, "Pessimus|Normal|Optimus", "Optimus")
$blabla = True
Else
$blabla = False
EndIf
Case $Radio1
If $blabla = True Then
GUICtrlDelete($combobox)
EndIf
Case $Button1
If $blabla = False Then
$combobox1 = "normal"
Else
$combobox1 = GUICtrlRead($combobox)
EndIf
$ausgaberead = GUICtrlRead($Input1)
If $portal = "Myvideo" Then $combobox1 = "Normal"
If GUICtrlRead($Radio1) = $GUI_CHECKED Then
$formatauswahl = "MP3"
Else
$formatauswahl = "MP4"
EndIf
If $portal = "" Or GUICtrlRead($Ausgabe) = "" Then
MsgBox(0, "Fehler", "Gib einen gültigen Link/Ausgabeort an!")
Else
GUICtrlCreateListViewItem($linkread & "|" & $portal & "|" & GUICtrlRead($Ausgabe) & "|" & $ausgaberead & "|" & $formatauswahl & "|" & $combobox1, $ListView1)
GUICtrlSetState($Button2, $gui_enable)
GUICtrlSetData($LINK, "MTV.video / Youtube-Link hier eingeben")
GUICtrlSetData($Input1, "Ausgabetitel hier eingeben")
EndIf
Case $Button2
linkchecker()
EndSwitch
WEnd
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;Funktionen;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Func mtvdownload()
$aItem = _GUICtrlListView_GetItemTextArray($ListView1, 0)
TrayTip("Info", "Download und Konvertierung von " & $aItem[4] & ". Bitte warten", 30)
TraySetToolTip("DL/Konv. läuft")
$url1 = "http://de.esperanto.mtvi.com/www/xml/flv/flvgen.jhtml?vid="
$url2 = "&hiLoPref=hi"
$Quelltext = _INetGetSource($aItem[1])
$sStart = 'var so = new SWFObject("http://media.mtvnservices.com/mgid:uma:video:mtv.de:'
$sEnde = '",'
$string = _StringBetween($Quelltext, $sStart, $sEnde)
If IsArray($string) Then
$adresse = $url1 & $string[0] & $url2
$Quelltext2 = _INetGetSource($adresse)
$string2 = _StringBetween($Quelltext2, '<src>', '</src>')
$ausgabetitel = $aItem[4]
$mp3zieladresse = $aItem[3]
$tempadresse = @ScriptDir & "\video.flv"
$zieladresse = $mp3zieladresse & "\" & $ausgabetitel & ".mp3"
$mp4zieladresse = $mp3zieladresse & "\" & $ausgabetitel & ".mp4"
$downloadbla = InetGet($string2[0], $tempadresse, "", 0)
$ffmpeg = @ScriptDir & "\ffmpeg.exe"
$sformat = $aItem[5]
If $sformat = "MP3" Then
RunWait('ffmpeg.exe -i "' & $tempadresse & '"' & ' -ab 320k "' & $zieladresse & '"', "", @SW_HIDE)
EndIf
If $sformat = "MP4" And $aItem[6] = "Pessimus" Then
RunWait('ffmpeg.exe -i "' & $tempadresse & '"' & ' -ab 320k -b 500k -r 20 "' & $mp4zieladresse & '"', "", @SW_HIDE)
EndIf
If $sformat = "MP4" And $aItem[6] = "Normal" Then
RunWait('ffmpeg.exe -i "' & $tempadresse & '"' & ' -ab 320k -b 1000k -r 30 "' & $mp4zieladresse & '"', "", @SW_HIDE)
EndIf
If $sformat = "MP4" And $aItem[6] = "Optimus" Then
RunWait('ffmpeg.exe -i "' & $tempadresse & '"' & ' -ab 320k -b 15000k -r 70 "' & $mp4zieladresse & '"', "", @SW_HIDE)
EndIf
GUICtrlSetState($Button2, $gui_disable)
EndIf
_GUICtrlListView_DeleteItem($ListView1, 0)
If _GUICtrlListView_GetItemCount($ListView1) = 0 Then
MsgBox(0, "Tadaaa", "Der Download war erfolgreich")
GUICtrlSetState($Button1, $gui_enable)
GUICtrlSetState($Button2, $gui_disable)
GUISetState(@SW_SHOW, $Multidownloader_1)
TraySetToolTip("")
Else
FileDelete($tempadresse)
linkchecker()
EndIf
EndFunc ;==>mtvdownload
Func linkchecker()
$bItem = _GUICtrlListView_GetItemTextArray($ListView1, 0)
If $bItem[2] = "mtv" Then
GUISetState(@SW_HIDE, $Multidownloader_1)
mtvdownload()
EndIf
If $bItem[2] = "youtube" Then
GUISetState(@SW_HIDE, $Multidownloader_1)
youtubedownload()
EndIf
If $bItem[2] = "Myvideo" Then
GUISetState(@SW_HIDE, $Multidownloader_1)
myvideodownload()
EndIf
EndFunc ;==>linkchecker
Func youtubedownload()
$aItem = _GUICtrlListView_GetItemTextArray($ListView1, 0)
TraySetToolTip("DL/Konv. läuft")
TrayTip("Info", "Download und Konvertierung von " & $aItem[4] & ". Bitte warten", 30)
$aItem = _GUICtrlListView_GetItemTextArray($ListView1, 0)
$source2 = _INetGetSource($aItem[1])
$linkgen = _StringBetween($source2, "img.src = '", "'")
$downloadlink2 = StringReplace($linkgen[0], "/generate_204", "/videoplayback")
$downloadlink2 = StringReplace($downloadlink2, "\/", "/")
$tempadresse = @ScriptDir & "\video.flv"
InetGet($downloadlink2, $tempadresse, "", 0)
$mvmp3zieladresseb = $aItem[3] & "\" & $aItem[4] & ".mp3"
$mvmp4zieladresseb = $aItem[3] & "\" & $aItem[4] & ".mp4"
If $aItem[5] = "MP3" Then
RunWait('ffmpeg.exe -i "' & $tempadresse & '"' & ' -ab 320k "' & $mvmp3zieladresseb & '"', "", @SW_HIDE)
EndIf
If $aItem[5] = "Mp4" Then
RunWait('ffmpeg.exe -i "' & $tempadresse & '"' & ' -ab 320k -b 5000k -r 50 "' & $mvmp4zieladresseb & '"', "", @SW_HIDE)
EndIf
_GUICtrlListView_DeleteItem($ListView1, 0)
If _GUICtrlListView_GetItemCount($ListView1) = 0 Then
MsgBox(0, "Tadaaa", "Der Download war erfolgreich")
GUISetState(@SW_SHOW, $Multidownloader_1)
GUICtrlSetState($Button1, $gui_enable)
GUICtrlSetState($Button2, $gui_disable)
TraySetToolTip("")
Else
linkchecker()
EndIf
EndFunc ;==>youtubedownload
Func myvideodownload()
$aItem = _GUICtrlListView_GetItemTextArray($ListView1, 0)
TrayTip("Info", "Download und Konvertierung von " & $aItem[4] & ". Bitte warten", 30)
$id = _StringBetween($aItem[1], "/watch/", "/")
$source = _INetGetSource($aItem[1])
$string2 = _StringBetween($source, "rel='image_src' href='", "/thumbs/")
$downloadlink = $string2[0] & "/" & $id[0] & ".flv"
$tempadresse = @ScriptDir & "\video.flv"
InetGet($downloadlink, $tempadresse, "", 0)
$mvmp3zieladresse = $aItem[3] & "\" & $aItem[4] & ".mp3"
$mvmp4zieladresse = $aItem[3] & "\" & $aItem[4] & ".mp4"
If $aItem[5] = "MP3" Then
RunWait('ffmpeg.exe -i "' & $tempadresse & '"' & ' -ab 320k "' & $mvmp3zieladresse & '"', "", @SW_HIDE)
EndIf
If $aItem[5] = "Mp4" Then
RunWait('ffmpeg.exe -i "' & $tempadresse & '"' & ' -ab 320k -b 5000k -r 50 "' & $mvmp4zieladresse & '"', "", @SW_HIDE)
EndIf
_GUICtrlListView_DeleteItem($ListView1, 0)
If _GUICtrlListView_GetItemCount($ListView1) = 0 Then
MsgBox(0, "Tadaaa", "Der Download war erfolgreich")
GUISetState(@SW_SHOW, $Multidownloader_1)
GUICtrlSetState($Button1, $gui_enable)
GUICtrlSetState($Button2, $gui_disable)
TraySetToolTip("")
Else
linkchecker()
EndIf
EndFunc ;==>myvideodownload
Eine Progressbar ist leider nicht eingebaut. links mit feature/related klappen nicht(einfach den teil des links wegmachen) - den kleinen Bug werd ich demnächst mal wegzaubern
Ansonsten sollte alles funktionieren.
Hier der Downloadlink: http://www.2shared.com/file/UXqt2EtT/Multidownloader.html
Viel Spaß beim Testen