Du bist nicht angemeldet.
Seiten: 1
Dankeschön
Diese Stelle mit dem "url_encoded_fmt_stream_map" hätte ich wohl nie gerafft.
Gruß
Cookie
Hi roadman17,
vielen Dank, dass du das YouTube-Plugin gefixt hast!
Ich habe mir jetzt vorgenommen, die Grundkentnisse etwas zu üben.
Mittlerweile fällt es mir auch schon leichter den Source zu lesen... vielleicht kann ich in Zukunft dann auch etwas mithelfen.
Gruß
Cookie
Edit:
Bei einigen Videos schlägt der Download noch fehl.
z.B. bei diesem: http://www.youtube.com/watch?v=Sp9-MAX9lIc&feature=plcp
Fehlermeldung:
Quality 37 not found.
Quality 22 not found.
Quality 18 not found.
01:30:09 Der Download-Link konnte nicht ermittelt werden!
01:30:09 Der Download ist fehlgeschlagen!
Ursache ist wohl diese Case-Abfrage:
case $yt_resolution_config_page in
1080)
fmtrank="37 22 18"
Wenn die Variable "fmtrank" fest auf "37" (also: fmtrank="37") gesetzt wird, startet der Download seltsamerweise.
Auf die niedrigeren Auflösungen 22 und 18 wird dann aber folglich nicht mehr geprüft...
Eventuell könnte ich das mit einer unschönen else/fi Abfrage lösen, in der dann jede Auflösung einzeln geprüft wird.
Aber ich warte damit noch ein wenig, vielleicht lässt sich das Problemchen auch mit nur einer kleinen Änderung bei fmtrank oder der for-Schleife lösen?
Gruß
Cookie
Ich habe die nötigen Zeilen mal in AutoIt-Code geschrieben.
Vielleicht findet sich ja jemand, der die paar Zeilen übersetzen könnte:
;~ # Für dieses Beispiel verwende ich die 1080p Full-HD Auflösung:
$s_SelectedQuality = "itag=37"
;~ # In den F!L Optionen kann die Auflösung gewählt werden. z.B.: itag=37: 1080p, itag=22: 720p, itag=18: Medium.
$s_YouTubeSource = ClipGet() ;~ # Für das Beispiel hole ich mir den YouTube-Quelltext aus meinem Clipboard.
While 1 ;~ # Diese Schleife wiederholt sich, bis eine verfügbare Auflösung gefunden wurde.
$a_YouTube_DDL_Data = StringRegExp($s_YouTubeSource, $s_SelectedQuality & '\\u0026url=(.*?)\\u0026type=.*?\\u0026sig=(.*?)\\u0026quality=', 1)
;~ # Im Klartext würde der Text so aussehen: 'itag=37\u0026url=(.*?)\u0026type=.*?\u0026sig=(.*?)\u0026quality='
;~ # Bei AutoIt müssen immer zwei Backslashs gesetzt werden, um im RegExp z.B. einen Backslash darzustellen: "\\" = "\"
;~ # Mit meinem verwendeten RegExp-Pattern werden zwei Strings gefunden und in das Array "$a_YouTube_DDL_Data" geschrieben:
;~ # Inhalt vom Array-0 "$a_YouTube_DDL_Data[0]": "http%3A%2F%2Fo-o---preferred---sn-4g57kn7s---v2---lscache5.c.youtube.com%2Fvideoplayback%3Fupn%3DItxreUnGryM%26sparams%3Dcp%252Cgcr%252Cid%252Cip%252Cipbits%252Citag%252Cratebypass%252Csource%252Cupn%252Cexpire%26fexp%3D922401%252C920704%252C912806%252C927201%252C925003%252C913546%252C913556%252C916805%252C920201%252C900816%252C911112%252C901451%26ms%3Dau%26expire%3D1351552543%26itag%3D37%26ipbits%3D8%26gcr%3Dde%26sver%3D3%26ratebypass%3Dyes%26mt%3D1351529176%26ip%3D99.99.99.99%26mv%3Dm%26source%3Dyoutube%26key%3Dyt1%26cp%3DU0hURlVQUF9JTUNONF9NSlRGOm5SM0dPZUdYYm9a%26id%3D96f2557cec2c5321%26newshard%3Dyes"
;~ # Inhalt vom Array-1 "$a_YouTube_DDL_Data[1]": "5EEBDDAE6AB6287FDE24140315E88ECA0A7C8C0E.6245B6784CFCAFD1FC1055CAC426C48D1BA7BD4D"
If @error Then ;~ # Falls die Auflösung nicht verfügbar ist, wird die nächst kleinere Auflösung gewählt.
If $s_SelectedQuality = "itag=37" Then
$s_SelectedQuality = "itag=22"
ContinueLoop ;~ # Kehrt zum Anfang der Schleife zurück.
ElseIf $s_SelectedQuality = "itag=22" Then
$s_SelectedQuality = "itag=18"
ContinueLoop
Else
SetError(1)
MsgBox(0, "Fehler - Download-Daten", "Download-Daten konnten nicht gefunden werden.")
Exit ;~ # Falls keine verfügbare Auflösung gefunden wird, beendet sich das Script mit einem Error.
EndIf
Else
ExitLoop ;~ # Verlässt die Schleife, wenn es keinen Fehler gibt.
EndIf
WEnd
;~ # Jetzt kann der Download-Link einfach zusammengesetzt werden:
$s_YouTube_DDL_URL = $a_YouTube_DDL_Data[0] & '&signature=' & $a_YouTube_DDL_Data[1]
;~ # Wichtig ist noch, dass zwischen Array-0 und Array-1 der Tag "&signature=" eingefügt wird.
;~ # Optional: Die URL-Decode Funktion ist nur für AutoIt wichtig, um z.B.: "%3A" in ":" oder "%2F" in "/" zu dekodieren
$s_YouTube_DDL_URL_Decoded = _URIDecode($s_YouTube_DDL_URL)
;~ # Der fertige Download-Link zu meinem Beispiel würde nun so aussehen:
;~ # "http://o-o---preferred---sn-4g57kn7s---v2---lscache5.c.youtube.com/videoplayback?upn=ItxreUnGryM&sparams=cp%2Cgcr%2Cid%2Cip%2Cipbits%2Citag%2Cratebypass%2Csource%2Cupn%2Cexpire&fexp=922401%2C920704%2C912806%2C927201%2C925003%2C913546%2C913556%2C916805%2C920201%2C900816%2C911112%2C901451&ms=au&expire=1351552543&itag=37&ipbits=8&gcr=de&sver=3&ratebypass=yes&mt=1351529176&ip=99.99.99.99&mv=m&source=youtube&key=yt1&cp=U0hURlVQUF9JTUNONF9NSlRGOm5SM0dPZUdYYm9a&id=96f2557cec2c5321&newshard=yes&signature=5EEBDDAE6AB6287FDE24140315E88ECA0A7C8C0E.6245B6784CFCAFD1FC1055CAC426C48D1BA7BD4D"
;~ # --- Optional: Die URL-Decode Funktion ist nur für AutoIt wichtig, um z.B.: "%3A" in ":" oder "%2F" in "/" zu dekodieren ---
Func _URIDecode($sData)
; Funktion von Prog@ndy
Local $aData = StringSplit(StringReplace($sData,"+"," ",0,1),"%")
$sData = ""
For $i = 2 To $aData[0]
$aData[1] &= Chr(Dec(StringLeft($aData[$i],2))) & StringTrimLeft($aData[$i],2)
Next
Return BinaryToString(StringToBinary($aData[1],1),4)
EndFunc
@roadman17 / euri
Ein riesen Dankeschön für das Plugin-Update!
@darki2012
Fritz!Load ist der perfekte Download-Manager für Free-User.
Wen stört es schon mit ~20kB/s zu nuckeln, wenn man es nicht eilig hat? Der Router läuft doch bei den meisten Leute eh durchgehend.
Also, hör doch bitte mal mit diesem Spam auf...
Das ist auch bestimmt nicht im Sinn der Erfinder und Entwickler.
Hallo,
gestern hat YouTube ein paar Änderungen vorgenommen.
Deshalb funktioniert der YT-Download mit Fritz!Load leider nicht mehr.
Könntet Ihr das Plugin vielleicht wieder auf den neusten Stand brigen?
Vom Video DownloadHelper gibt es z.B. schon eine Beta, mit der YouTube-Downloads wieder möglich sind: http://www.downloadhelper.net/install-b … n=4.9.10b2
Vielleicht kann man die Methode davon übernehmen?
Gruß
Cookie
Edit: Titel angepasst
Seiten: 1