YouTube Converter

  • Hi Community
    Hatte langeweile und das ist dabei rausgekommen:

    Mein Prog. nutzt die WinSlide() UDF von SEuBo
    Viel Spaß damit: Au3 autoit.de/wcf/attachment/7942/
    Exe autoit.de/wcf/attachment/7943/

    Spoiler anzeigen
    [autoit]


    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_icon=Images\Icon.ico
    #AutoIt3Wrapper_outfile=Yt-Converter.exe
    #AutoIt3Wrapper_Compression=4
    #AutoIt3Wrapper_Res_Description=YouTube Converter
    #AutoIt3Wrapper_Res_Fileversion=1.0
    #AutoIt3Wrapper_Res_LegalCopyright=DP-Ware.de
    #AutoIt3Wrapper_Res_SaveSource=y
    #AutoIt3Wrapper_Res_Field=Homepage|http://www.dp-ware.de/
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <ProgressConstants.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <INet.au3>

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

    ;Test-URL: [media]http://www.youtube.com/watch?v=FZSUPCoIUsY[/media]

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

    If (Not FileExists(@ScriptDir & "\Videos\")) Then DirCreate(@ScriptDir & "\Videos\")

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

    Global $hDll32 = DllOpen("user32.dll")
    Global $bSlidedIn = False

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

    FileInstall("Images\YT.jpg", @TempDir & "\YT.jpg", 1)
    FileInstall("Images\Icon.ico", @TempDir & "\Icon.ico", 1)

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

    Opt("TrayMenuMode", 1)
    TraySetIcon(@TempDir & "\Icon.ico")

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

    TrayCreateItem("YT-Converter")
    TrayItemSetState(-1, $GUI_DISABLE)
    TrayCreateItem("Copyright " & @YEAR & " - " & (@YEAR + 3) & " DP-Ware.de")
    TrayItemSetState(-1, $GUI_DISABLE)
    TrayCreateItem("")
    $hExitTray = TrayCreateItem("Beenden")

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

    TraySetState()

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

    $hWin1 = GUICreate("YT-Converter", 164, 185, -1, -1, BitOR($WS_POPUP, $WS_CLIPSIBLINGS, $WS_EX_TOOLWINDOW, $WS_DLGFRAME, $DS_MODALFRAME, $WS_EX_LAYERED), 0x80)
    ; BitOR($WS_POPUP, $WS_CLIPSIBLINGS, $WS_EX_TOOLWINDOW, $WS_DLGFRAME, $DS_MODALFRAME, $WS_EX_LAYERED))
    GUISetBkColor(0xFFFFFF)
    GUICtrlCreatePic(@TempDir & "\YT.jpg", 8, 8, 148, 65, BitOR($SS_NOTIFY, $WS_GROUP, $WS_CLIPSIBLINGS))
    GUICtrlCreateLabel("YouTube Video URL:", 8, 80, 148, 17, $SS_CENTER)
    GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
    $hInp1 = GUICtrlCreateInput("", 8, 104, 148, 21, BitOR($ES_CENTER, $ES_AUTOHSCROLL)) ;Video URL
    $hPrg1 = GUICtrlCreateProgress(8, 130, 148, 17) ;Fortschritt's-Anzeige
    $hBtn1 = GUICtrlCreateButton("Download!", 40, 152, 80, 25, $WS_GROUP) ;Download Button

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

    _SlideWin($hWin1, "out", "right") ;Rechts an Bildschirm positionieren

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

    GUISetState(@SW_SHOW)

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

    While 1 * Sleep(10)

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

    Switch TrayGetMsg()
    Case $hExitTray
    For $iStep = 255 To 000 Step -3
    WinSetTrans($hWin1, '', $iStep)
    Sleep(10)
    Next
    FileDelete(@TempDir & "\YT.jpg")
    DllClose($hDll32)
    Exit
    EndSwitch

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

    $nMsg = GUIGetMsg(1)
    Select
    Case $nMsg[0] = $hBtn1
    $sYtURL = GUICtrlRead($hInp1)
    If $sYtURL = "" Then ContinueLoop

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

    GUICtrlSetState($hInp1, $GUI_DISABLE)
    GUICtrlSetState($hBtn1, $GUI_DISABLE)

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

    For $iStep = 255 To 100 Step -3
    WinSetTrans($hWin1, '', $iStep)
    Sleep(10)
    Next

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

    $aPos = WinGetPos($hWin1)

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

    WinMove($hWin1, '', @DesktopWidth - 164, @DesktopHeight - 185, 164, 185, 10) ; Breite = 164, Höhe = 185
    WinSetOnTop($hWin1, '', 1)

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

    _Download($sYtURL)

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

    For $iStep = 100 To 255 Step 3
    WinSetTrans($hWin1, '', $iStep)
    Sleep(10)
    Next

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

    GUICtrlSetState($hInp1, $GUI_ENABLE)
    GUICtrlSetState($hBtn1, $GUI_ENABLE)

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

    WinSetOnTop($hWin1, '', 0)
    GUICtrlSetData($hInp1, '')

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

    WinMove($hWin1, '', $aPos[0], $aPos[1], 164, 185, 10) ; Breite = 164, Höhe = 185

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

    Case _WinIsHovered($hWin1, $hDll32)
    If Not $bSlidedIn Then
    _SlideWin($hWin1, "in", "right")
    $bSlidedIn = True
    EndIf

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

    Case Else
    Select
    Case $bSlidedIn
    _SlideWin($hWin1, "out", "right")
    $bSlidedIn = False
    EndSelect
    EndSelect
    WEnd

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

    Func _SlideWin($hWnd, $sMode, $sSide)
    ;$hWnd = Window to slide.
    ;$sMode = Slide-In or -out (in|out)
    ;$sSide = Side where you want the GUI to slide. (left|right|top|bottom)
    Local $aWPos = WinGetPos($hWnd), $m = 0 - ($sMode = "in") + ($sMode = "out")
    Local $h = 0 - ($sSide = "left") + ($sSide = "right"), $v = 0 - ($sSide = "top") + ($sSide = "bottom")

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

    WinMove($hWnd, "", _ ; Move GUI according to $sMode and $sSide.
    0 - (($h = -1) * ($m = -1) * ($aWPos[2] - 10)) _
    + (($h = 1) * (($h = 1) * @DesktopWidth - (10 * ($m = -1)) - ($m <> -1) * $aWPos[2])) _
    + (($h = 0) * (($h = 0) * (@DesktopWidth / 2) - ($aWPos[2] / 2))) _
    , _
    0 - (($v = -1) * ($m = -1) * ($aWPos[3] - 10)) _
    + (($v = 1) * (($v = 1) * @DesktopHeight - (10 * ($m = -1)) - ($m <> -1) * $aWPos[3])) _
    + (($v = 0) * (($v = 0) * (@DesktopHeight / 2) - ($aWPos[3] / 2))) _
    )

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

    $aWPos = WinGetPos($hWnd)
    ; Slide GUI.
    Switch $sSide
    Case "left", "right"
    Local $STEP = (((($h = 1) And ($m = 1)) Or (($h = -1) And ($m = -1))) - ((($h = -1) And ($m = 1)) Or (($h = 1) And ($m = -1)))) * 10
    Local $FROM = $aWPos[0], $TO = $aWPos[0] _
    + (((($h = 1) And ($m = 1)) Or (($h = -1) And ($m = -1))) * ($aWPos[2])) _
    - (((($h = 1) And ($m = -1)) Or (($h = -1) And ($m = 1))) * ($aWPos[2])) - $STEP
    For $i = $aWPos[0] To $TO Step $STEP
    WinMove($hWnd, "", $i, $aWPos[1])
    Sleep(10)
    Next
    Case "top", "bottom"
    Local $STEP = (((($v = 1) And ($m = 1)) Or (($v = -1) And ($m = -1))) - ((($v = -1) And ($m = 1)) Or (($v = 1) And ($m = -1)))) * 10
    Local $FROM = $aWPos[1], $TO = $aWPos[1] _
    + (((($v = 1) And ($m = 1)) Or (($v = -1) And ($m = -1))) * ($aWPos[3])) _
    - (((($v = 1) And ($m = -1)) Or (($v = -1) And ($m = 1))) * ($aWPos[3])) - $STEP
    For $i = $aWPos[1] To $TO Step $STEP
    WinMove($hWnd, "", $aWPos[0], $i)
    Sleep(10)
    Next
    EndSwitch
    EndFunc ;==>_SlideWin

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

    Func _WinIsHovered($hWnd, $vDLL = "User32.dll")
    Local $aResult, $aWPos = WinGetPos($hWnd), $aMPos = MouseGetPos()
    Local $tRect = DllStructCreate("int Left;int Top;int Right;int Bottom")
    Local $iLeft = $aWPos[0], $iTop = $aWPos[1], $iWidth = $aWPos[2], $iHeight = $aWPos[3]
    Local $iX = $aMPos[0], $iY = $aMPos[1]
    DllStructSetData($tRect, "Left", $iLeft)
    DllStructSetData($tRect, "Top", $iTop)
    DllStructSetData($tRect, "Right", $iLeft + $iWidth)
    DllStructSetData($tRect, "Bottom", $iTop + $iHeight)

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

    $aResult = DllCall($vDLL, "int", "PtInRect", "ptr", DllStructGetPtr($tRect), "int", $iX, "int", $iY)
    If @error Then Return SetError(@error, 0, False)

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

    Return $aResult[0] <> 0
    EndFunc ;==>_WinIsHovered

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

    Func _Download($sURL, $bHD = False)
    Local $sSource, $sTitle, $sID, $sDownloadLink, $sSWFArgs, $sSWFID, $iSize, $iCurrent, $iProzent
    $sSource = _INetGetSource($sURL)
    $sSource = StringStripCR($sSource)
    $sSource = StringReplace($sSource, @LF, '')

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

    $sTitle = StringRegExp($sSource, "'VIDEO_TITLE': '(.*?)'", 1, 1) ;Titel Auslesen
    If IsArray($sTitle) Then $sTitle = $sTitle[0] ;Anpassen
    GUICtrlSetData($hPrg1, 25)
    Sleep(500)

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

    $sID = StringRegExp($sSource, "'VIDEO_ID': '(.*?)'", 1, 1) ;ID Auslesen
    If IsArray($sID) Then $sID = $sID[0] ;Anpassen
    GUICtrlSetData($hPrg1, 50)
    Sleep(500)

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

    ;SWF ARG - Bereich auslesen
    $sSWFArgs = StringRegExp($sSource, 'SWF_ARGS(.*?)}', 1, 1)
    If IsArray($sSWFArgs) Then $sSource = $sSWFArgs[0]
    GUICtrlSetData($hPrg1, 75)
    Sleep(500)

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

    ;Code ID aus dem SWF ARG Bereich auslesen
    $sSWFID = StringRegExp($sSource, '"t": "(.*?)",', 1, 1)
    If IsArray($sSWFID) Then $sSWFID = $sSWFID[0]
    GUICtrlSetData($hPrg1, 100)
    Sleep(500)
    GUICtrlSetData($hPrg1, 0)

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

    $sDownloadLink = 'http://www.youtube.com/get_video?fmt=18&video_id=' & $sID & '&t=' & $sSWFID
    $iDlSize = InetGetSize($sDownloadLink)
    $hDL = InetGet($sDownloadLink, @ScriptDir & "\Videos\" & StringRegExpReplace($sTitle, "((?<!.)([a-zA-Z]\:\\)(?!\s)(([\w-+.]*" & _
    "((?<!\s)(\s{1})(?!\\)|(?<!\\)(\\{1})(?!\s))*)*)(\\?)(?!.))", "") & ".mp4", 1, 1)
    Do
    $iSize2 = InetGetInfo($hDL, 0)
    $PROZENT = (100 * $iSize2) / $iDlSize
    GUICtrlSetData($hPrg1, $PROZENT)
    Sleep(200)
    Until $iSize2 = $iDlSize
    Return 1
    EndFunc ;==>_Download

    [/autoit]
  • Es ist aber, soweit ich weiss, verboten Vids von YouTube zu loaden.


    Nein, ist es nicht, denn dafür zahlen YouTube/MyVideo ja GEMA (da gab es auch schon heftige Diskussionen, wieviel GEMA die denn zahlen sollten

    @DjBlume Ich glaub mich tritt n Pferd... mir erzählen Closed Source und so, und den Tag danach hierein stellen :cursing: Das gibt noch Konsequenzen mein Freund :P


  • Nein, ist es nicht, denn dafür zahlen YouTube/MyVideo ja GEMA (da gab es auch schon heftige Diskussionen, wieviel GEMA die denn zahlen sollten

    Da bist du leider im Irrtum. Die GEMA Gebühren zahlt Youtube lediglich um das Material im Sinne des Dienstes zu verwenden. Nicht aber dafür, jedem Nutzer eine Kopie eines Musikvideos zur Verfügung zu stellen. Der Download wird in den Nutzungsbedingungen klar untersagt.

    Auszug aus den Nutzungsbestimmungen:

    Zitat


    Sie erklären sich damit einverstanden, auf Nutzerübermittlungen (wie unten definiert) oder andere auf der Webseite verfügbar gemachte Inhalte (einschließlich YouTube-Inhalte wie unten definiert) nicht über irgendwelche andere Technologien oder Mittel als die Video-Wiedergabeseiten der Webseite selbst, den YouTube-Player oder solche anderen Mittel zuzugreifen, die YouTube ausdrücklich für diesen Zweck bestimmt;
    [...]
    Sie erklären sich damit einverstanden, Zugriff auf Nutzervideos nur in der Form des Streamings und zu keinen anderen Zwecken als der rein persönlichen, nicht-kommerziellen Nutzung, und nur in dem Rahmen zu nehmen, der durch die normale Funktionalität der Dienste vorgegeben und erlaubt ist. „Streaming“ bezeichnet eine gleichzeitige digitale Übertragung des Materials über das Internet durch YouTube auf ein nutzerbetriebenes internetfähiges Endgerät in einer Weise, bei der die Daten für eine Echtzeitansicht bestimmt sind, nicht aber für einen (permanenten oder vorübergehenden) Download, ein Kopieren, ein Speichern oder einen Weitervertrieb durch den Nutzer.

    Quelle: http://www.youtube.com/t/terms

  • Da bist du leider im Irrtum. Die GEMA Gebühren zahlt Youtube lediglich um das Material im Sinne des Dienstes zu verwenden. Nicht aber dafür, jedem Nutzer eine Kopie eines Musikvideos zur Verfügung zu stellen. Der Download wird in den Nutzungsbedingungen klar untersagt.

    naja okay, aber wer hält sich drann? :D und wenn mna es ja genau nimmt, muss man das video ja in irgendeiner art und weise downloaden um es sich anzusehen^^

  • Wer sich dran hält - niemand :D.
    Das streamen gilt rein rechtlich nicht als download da es sich um temporäre Daten handelt. Im weitesten Sinne hast du recht, es ist auch eine Art des Downloads und es ist ganz sicher auch kein Problem diese temporären Daten dauerhaft weiter zu verwenden. Allerdings nur mit Hilfe eines technischen Eingriffs. Und da geht's dann wieder ins ilegale.


    Aber .... as I said ....

    [...] Allerdings wird das Programm dadurch nicht ilegal.

    Man darf ja auch Kopierschutz-Knacker besitzen, sie aber nicht verwenden.

    Und für den Fall das ich es noch nicht erwähnt habe ... schönes Skript.

  • Ein Seitenbetreiber ist nicht dazu verpflichtet seinen Benutzern die allgemeinen Bedingungen zur Nutzung seines öffentlich zugänglichen Dienstes explizit vorzulegen. Die Nutzungsbedingungen müssen lediglich klar erkennbar auf der Hauptseite verlinkt sein und in ihnen müssen die nötigen Aktionen die zum Akzeptieren der AGBs führen eindeutig beschrieben sein. Diese Bestimmungen zu öffnen und zu lesen ist allein die Aufgabe des Benutzers.
    Auszug:

    Zitat

    2.2 Sie können die Bestimmungen einfach durch die Nutzung der Dienste annehmen. Sie nehmen zur Kenntnis und erklären sich damit einverstanden, dass YouTube Ihre Nutzung der Dienste von diesem Zeitpunkt an als Annahme der Bestimmungen behandeln wird.

    Bei Youtube findet man diese Bestimmungen recht übersichtlich im Footer angeordnet.

  • Wie gesagt, nimmst du einen Dienst im Internet war bist du als Nutzer in der Pflicht, dich über die Nutzungsbedingungen zu informieren. Der Seitenbetreiber muss sie lediglich sichtbar zur Verfügung stellen. Das du die AGBs nicht liest schützt dich nicht vor einer Verfolgung bei Fehlverhalten.

    "Unwissenheit schützt vor Strafe nicht." - klingt komisch, ist aber so

  • [autoit]

    $sURL = StringRegExpReplace ($sURL, "&feature=popular", "")
    $sURL = StringRegExpReplace ($sURL, "&feature=fvhl", "")
    $sURL = StringRegExpReplace ($sURL, "&feature=topvideos", "")

    [/autoit]


    wäre noch zu ergänzen, sonst funktioniert es net wenn man direkt auf der startseite auf videos klickt.