Youtube Download Links rausfiltern (Alle Qualitäten !)

    • VB.NET

    Es gibt 17 Antworten in diesem Thema. Der letzte Beitrag () ist von Dancger.

      Youtube Download Links rausfiltern (Alle Qualitäten !)

      Hallo ,
      Als Ich gesehen habe, dass Youtube wieder was geändert hat ...
      dann dachte Ich mir Ich schreibe mal ein tutorial wie man alle verfügbaren Download Links aus einem
      Video rausfiltert . Im Tutorial wird es erstmal darum gehen wie der Link zusammengesetzt ist und dann
      Kommen wir zum Code :


      Also Früher war es so dass man die Videos mit diesen Link herunterladen konnte:

      VB.NET-Quellcode

      1. http://www.youtube.com/get_video?video_id={VideoID}&fmt={QualitätsStufe}


      Nun aber hat Youtube diesen Link entfernt sodass man den Download Link es aus dem Quelltext rausfiltern muss . Den Download Link den ihr dann rausfiltert könnt dann nur Ihr verwenden und kein Anderer !!!

      Der Download Link Jetzt besteht aus genau 3 Abschnitten .

      Undzwar :

      VB.NET-Quellcode

      1. Der URL + dem Hoster + die Signature des Videos


      Nun hat Youtube in Ihrem Quellcode nicht einfach so Den Download Link des Videos eingespeichert sondern nur Teile die man später zusammen setzen muss. Im Quellcode eines Videos gibt es nun ein Abschnitt
      der auf den ersten Blick verwirrend aussieht aber eigentlich ganz einfach zu verstehen ist , undzwar den Abschnitt Nach

      VB.NET-Quellcode

      1. url_encoded_fmt_stream_map

      in diesen Abschnitt befinden sich alle Download Links die wir suchen.

      Ich hoffe Ihr konntet nun verstehen wie der Download Link eines Videos von Youtube aufgebaut ist. Und nun kommen wir zum Code :

      Also in diesen Beispiel benötigen wir ein Button und eine Textbox.

      Fangen wir erstmal an die Funktion zu schreiben mit der wir die Download Links als eine Liste von Strings wiedergeben.

      VB.NET-Quellcode

      1. Public Function GetAvailableYoutubeDownloadLinks(ByVal _url As String) As List(Of String)

      Nun als aller erstes Deklarrieren wir :

      VB.NET-Quellcode

      1. Dim Downloader As New Net.WebClient
      2. Dim arrayURL As New List(Of String)

      Den Webclient benötigen wir für das herunterladen des Quelltextes und die Liste ist unsere return Variable.

      VB.NET-Quellcode

      1. Dim Stream As String = Downloader.DownloadString(_url)
      2. Stream = Stream.Substring(Stream.IndexOf("url_encoded_fmt_stream_map"))

      Nun deklarrieren wir eine neue Variable in der wir den Quelltext heruntergeladen und den Abschnitt nach "url_encoded_fmt_stream_map" rausfischen
      Als nächstes benötigen wir eine "While Schleife" um jeden Download Link rauszufischen

      VB.NET-Quellcode

      1. While Stream.Contains("fallback_host=")

      Nun kommen wir zu den 1. teil den wir rausfischen wollen. Undzwar der URL Wichtig im Code kommt 3 mal ein Wort namens Backslash hier im Forum wird dass Backlash als leerer String angezeigt, deshalb ersetzt das Wort durch ein echtes backlash:

      VB.NET-Quellcode

      1. Dim part1 As String = Stream.Substring(Stream.IndexOf("url=") + 4)
      2. part1 = part1.Remove(part1.IndexOf(BackSlash)) '<----- backslash ersetzten durch ein normales backslash
      3. If part1.Contains(",") Then
      4. part1 = part1.Remove(part1.IndexOf(","))
      5. End If

      Als nächstes brauchen wir den fallback_host :

      VB.NET-Quellcode

      1. Dim part2 As String = Stream.Substring(Stream.IndexOf("fallback_host=") + 14)
      2. part2 = part2.Remove(part2.IndexOf(Backslash)) '<----- backslash ersetzten durch ein normales backslash
      3. If part2.Contains(",") Then
      4. part2 = part2.Remove(part2.IndexOf(","))
      5. End If

      Und anschließen noch die Signature des Videos :

      VB.NET-Quellcode

      1. Dim part3 As String = Stream.Substring(Stream.IndexOf("sig=") + 4)
      2. part3 = part3.Remove(part3.IndexOf(Backslash)) '<----- backslash ersetzten durch ein normales backslash
      3. If part3.Contains(",") Then
      4. part3 = part3.Remove(part3.IndexOf(","))
      5. End If

      Nun müssen wir noch unsere Teile zusammensetzen :

      VB.NET-Quellcode

      1. Dim PatternURL As String = String.Format("{0}&fallback_host={1}&signature={2}", part1, part2, part3)

      Wichtig --> Jetzt müsst ihr noch einen Verweis auf die "System.Web.dll" hinzufügen und dann wird Die zusammengesetzte url noch Decodiert :

      VB.NET-Quellcode

      1. Dim FinalURL As String = Web.HttpUtility.UrlDecode(PatternURL)

      Jetzt wird dieser Link zur Return Variable noch hinzugefügt und löschen diesen Link aus der Variable Stream damit While Schleife auch mal Endet, sonst würde sie ewig lang weiter gehen :

      VB.NET-Quellcode

      1. If FinalURL.StartsWith("http://") Then
      2. arrayURL.Add(FinalURL)
      3. End If
      4. Stream = Stream.Replace("url=" & part1, "").Replace("fallback_host=" & part2, "").Replace("sig=" & part3, "")
      5. End While

      Anschließend noch die Return Anweisung und dass Wars mit der Funktion :

      VB.NET-Quellcode

      1. Return arrayURL
      2. End Function


      So nun Fügen wir im Click Event vom Button noch diesen Code hinzu :

      VB.NET-Quellcode

      1. Dim bs As New WebBrowser
      2. bs.Size = New Size(0, 0)
      3. Me.Controls.Add(bs)
      4. Dim t As List(Of String) = GetAvailableYoutubeDownloadLinks(TextBox1.Text)
      5. bs.Navigate(t.Item(0).ToString) '0 ist die beste Qualität


      In der Liste t sind nun alle verfügbaren DownloadLinks drin ^^


      Hier noch einmal die ganze Funktion :

      VB.NET-Quellcode

      1. Public Function GetAvailableYoutubeDownloadLinks(ByVal _url As String) As List(Of String)
      2. Dim Downloader As New Net.WebClient
      3. Dim arrayURL As New List(Of String)
      4. Dim Stream As String = Downloader.DownloadString(_url)
      5. Stream = Stream.Substring(Stream.IndexOf("url_encoded_fmt_stream_map"))
      6. While Stream.Contains("fallback_host=")
      7. Dim part1 As String = Stream.Substring(Stream.IndexOf("url=") + 4)
      8. part1 = part1.Remove(part1.IndexOf(Backslash)) '<----- backslash ersetzten durch ein normales backslash
      9. If part1.Contains(",") Then
      10. part1 = part1.Remove(part1.IndexOf(","))
      11. End If
      12. Dim part2 As String = Stream.Substring(Stream.IndexOf("fallback_host=") + 14)
      13. part2 = part2.Remove(part2.IndexOf(Backslash)) '<----- backslash ersetzten durch ein normales backslash
      14. If part2.Contains(",") Then
      15. part2 = part2.Remove(part2.IndexOf(","))
      16. End If
      17. Dim part3 As String = Stream.Substring(Stream.IndexOf("sig=") + 4)
      18. part3 = part3.Remove(part3.IndexOf(Backslash)) '<----- backslash ersetzten durch ein normales backslash
      19. If part3.Contains(",") Then
      20. part3 = part3.Remove(part3.IndexOf(","))
      21. End If
      22. Dim PatternURL As String = String.Format("{0}&fallback_host={1}&signature={2}", part1, part2, part3)
      23. Dim FinalURL As String = Web.HttpUtility.UrlDecode(PatternURL)
      24. If FinalURL.StartsWith("http://") Then
      25. arrayURL.Add(FinalURL)
      26. End If
      27. Stream = Stream.Replace("url=" & part1, "").Replace("fallback_host=" & part2, "").Replace("sig=" & part3, "")
      28. End While
      29. Return arrayURL
      30. End Function



      Ich Hoffe Ihr konntet alles verstehen und falls Es euch geholfen hatt ,
      auf den Hilfreich Button Drücken ^^

      M.F.G Tibiamicus
      Dateien

      Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von „Tibiamicus“ ()

      stürzt bei mir ab.
      Offensichtlich habe ich einen untauglichen Link in die Textbox geschrieben.
      Was müsste ich da reinschreiben, dasses funktioniert?

      Odr noch besser: Kannst du vlt. im SampleProjekt von vornherein schon eine funktionierende Url in der Textbox vor-einstellen?
      @ErfinderDesRades
      Du kannst die Datei nicht abspielen , weil es keine DateiEndung hat. im Tutorial geht es um den Download link selbst . und nicht um die Dateiendung heruauszufinden,aber
      Ich werde es updaten. Im Downloadlink steht immer eine "itag value" drin z.b "itag=44", dies wäre dann ein .webm Video. Hier stehen die Dateiendungen der einzelnen itag Values : en.wikipedia.org/wiki/YouTube

      Edit:// ich habe es nun geupdated :) versuch es jz. nocheinmal

      Mfg Tibiamicus

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Tibiamicus“ ()

      Das liegt daran, dass das ".NET 4 Framework Client Profile" nicht aussreicht. Hatte das Problem gerade auch.

      Lösung:
      Spoiler anzeigen
      - Projekt auf .NET 4 FW umstellen (Projektmappenexplorer > MyProject > Kompilieren > Erweiterte Kompilierungsoptionen > Zielframework auf ".NET Framework 4"
      - Danach ein Verweis auf die "System.Web" DLL setzen (Menü > Projekt > Verweis hinzufügen - Bei mir wars ("C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\Profile\Client\System.Net.dll"))
      - Tada, fertig :P

      Werde dein Prog/Source jetzt testen :)

      Edit 1:
      Monstercat Beispiel find ich gut :thumbup:

      Greez
      MESS WITH THE BEST, DIE LIKE THE REST! :evil:
      n'paar Links: DNS Tools, Steal WA DB, Droidsheep...