Youtube Downloadlink encodieren. UPDATE EINBETTEN DEAKTIVIERT DOWNLOAD

    • VB.NET

    Es gibt 53 Antworten in diesem Thema. Der letzte Beitrag () ist von Higlav.

      Youtube Downloadlink encodieren. UPDATE EINBETTEN DEAKTIVIERT DOWNLOAD

      So da es hier in diesem Forum anscheinend momentan noch keine Methode existiert um den Downloadlink aus dem neuen System von Youtube zu Encodieren.
      Ich habe nun dank Tsuyo, und ein bisschen Gehirn ein Tutorial gemacht.
      In dem Beispiel benutze ich nun also:
      Einen Button
      Eine Textbox
      Einen Webclient
      UPDATE:
      Habe nun auch möglichkeit wo Einbetten deaktiviert ist fertig gemacht. Eigentlich total einfach (einfacher als der alte code)...
      Kein C&P, wer es doch macht, wird VB nie lernen sondern einfach nur so tun.

      VB.NET-Quellcode

      1. Dim inhalt As String
      2. inhalt = WebClient1.DownloadString(New Uri("http://www.youtube.com/watch?v=Lisa9XTRLb4")) 'Ein Beispiel Video wo Einbetten deaktiviert ist
      3. Dim pos As Integer = inhalt.IndexOf("url_encoded_fmt_stream_map=")
      4. Dim Part1 As String = inhalt.Substring(pos).Replace("%3F", "?").Replace("%3D", "=").Replace("%26", "&").Replace("%25", "%").Replace("%2C", ",").Replace("%25", "%").Replace("%3A", ":").Replace("%2F", "/").Substring(31)
      5. Dim Part2 As String = Part1.Substring(0, Part1.IndexOf("&fallback_host"))
      6. Dim end_DL_url As String
      7. end_DL_url = Part2.Replace("%3F", "?").Replace("%3D", "=").Replace("%26", "&").Replace("%25", "%").Replace("%2C", ",").Replace("%25", "%").Replace("%3A", ":").Replace("%2F", "/")
      8. WebClient1.DownloadFileAsync(New Uri(end_DL_url), "C:\Video.flv")

      Wer die Erläuterung will sieht sich den alten Code an, wenig veränderung... !
      Viel Spass damit :)


      Alter Code:
      Spoiler anzeigen

      Los gehts, also ich will vorerst noch sagen, bitte kein C&P. Dieser Code ist extrem einfach gehalten und auch für alle verständnisvoll.
      Fangen wir an. In der Textbox den Youtube Link, klickt man auf den Button, kriegt man den Downloadlink.
      Zuerst suchen wir die ID raus. Ganz einfach:

      VB.NET-Quellcode

      1. Dim ID As String
      2. ID = TextBox1.Text.Replace("http://www.youtube.com/watch?v=", "")

      Nun haben wir schonmal die ID des Videos.
      Als nächstes fischen wir uns den Link aus dem Video raus, dazu hat Youtube für jedes Video eine generierte Datei. Die fischen wir so raus:

      VB.NET-Quellcode

      1. Dim link1 As String
      2. link1 = "http://www.youtube.com/get_video_info?video_id=" & ID & "&fmt=37"

      Hier zu beachten das fmt, dort kann man die Qualität einstellen. Hier sieht man die Qualitäten. Ich benutze HD, beziehungsweise das 'Höchste'.
      Dann laden wir uns den Text erstmal als String

      VB.NET-Quellcode

      1. Dim inhalt As String
      2. inhalt = WebClient1.DownloadString(link1)

      So nun suchen wir uns den URL, der ist versteckt und codiert, suchen wir ihn erstmal.
      Er steht nach dem "url_encoded_fmt_stream_map=" Suchen wir die Stelle als Integer per:

      VB.NET-Quellcode

      1. Dim pos As Integer = inhalt.IndexOf("url_encoded_fmt_stream_map=")

      Nun müssen wir bevor wir das Ende suchen alles codieren, Youtube hat eine Art A = B Konzept...

      VB.NET-Quellcode

      1. Dim Part1 As String = inhalt.Substring(pos).Replace("%3F", "?").Replace("%3D", "=").Replace("%26", "&").Replace("%25", "%").Replace("%2C", ",").Replace("%25", "%").Replace("%3A", ":").Replace("%2F", "/").Substring(31)

      Sieht Kompliziert aus, guckt man aber mal genau drüber erkennt man das Youtube einfach nur versucht deren Download zu schützen.
      Nun haben wir den codierten Text, jetzt fischen wir den URL raus der bei dem "&fallback_host" aufhört ebenfalls als Integer

      VB.NET-Quellcode

      1. Dim Part2 As String = Part1.Substring(0, Part1.IndexOf("&fallback_host"))

      Ok. Das wars jetzt auch schon. Der Komplizierte Teil.
      Part2 ist nun träger des fast fertigen Codes.
      Nun den Downloadlink als String und letzmals encodieren

      VB.NET-Quellcode

      1. Dim Downloadlink As String
      2. Downloadlink = Part2.Replace("%3F", "?").Replace("%3D", "=").Replace("%26", "&").Replace("%25", "%").Replace("%2C", ",").Replace("%25", "%").Replace("%3A", ":").Replace("%2F", "/")

      Und downloaden mit dem schon vorher benutzen Webclient:

      VB.NET-Quellcode

      1. WebClient1.DownloadFileAsync(New Uri(Downloadlink), "C:\Video.flv")

      Das wars schon.
      Ich hoffe ich habe es gut erklährt.
      Seid nich streng, dass ist mein erstes "Tutorial".
      Ich hoffe ihr könnt nun wieder Libs und YT Downloader schreiben was das Zeug hält.



      Rechtschreibfehler darf man behalten ;).
      Bedanken nicht vergessen !

      MfG Validation

      P.s. Es könnte sein das dieser Source Code durch die vielen Strings groß wird, natürlich kann man das ganze noch verkleinern, nur so kann man nach Fehlern suchen ^^.

      Edit: Beispiel Projekt im Anhang.
      Warnung: Beispielprojekt benutzt noch den alten Code...
      Dateien

      Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „Validation“ ()

      Erstmal Top Tutorial danke das du dir soviel Mühe gegeben hast :)
      Ich bin noch ein Anfänger und bekomm ein Error nimms mir bitte nicht übel das ich den nicht selbst gefixxt bekomme und für Hilfe wäre ich sehr dankbar :)

      Error : ,,Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.'' bei der Zeile : inhalt = WebClient1.DownloadString(link1)

      Mein VB Code :

      VB.NET-Quellcode

      1. Imports System.NetPublic Class frmYoutubeDownload Dim WebClient1 As WebClient Dim ID As String Dim link1 As String Dim inhalt As String Dim Downloadlink As String Private Sub frmYoutubeDownload_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
      2. End Sub
      3. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
      4. ID = TextBox1.Text.Replace("http://www.youtube.com/watch?v=", "")
      5. link1 = "http://www.youtube.com/get_video_info?video_id=" & ID & "&fmt=37"
      6. inhalt = WebClient1.DownloadString(link1)
      7. Dim pos As Integer = inhalt.IndexOf("url_encoded_fmt_stream_map=") Dim Part1 As String = inhalt.Substring(pos).Replace("%3F", "?").Replace("%3D", "=").Replace("%26", "&").Replace("%25", "%").Replace("%2C", ",").Replace("%25", "%").Replace("%3A", ":").Replace("%2F", "/").Substring(31) Dim Part2 As String = Part1.Substring(0, Part1.IndexOf("&fallback_host"))
      8. Downloadlink = Part2.Replace("%3F", "?").Replace("%3D", "=").Replace("%26", "&").Replace("%25", "%").Replace("%2C", ",").Replace("%25", "%").Replace("%3A", ":").Replace("%2F", "/") WebClient1.DownloadFileAsync(New Uri(Downloadlink), "C:\Video.flv") End SubEnd Class


      Vielleicht ein Beispielprojekt wäre nicht schlecht hoffe mir wird geholfen und danke für die Antwort achja echt sry das ich das ganze nicht selbst auf die reihe bekomme :(
      Vollzitat des direkten Vorposts an dieser Stelle entfernt ~VaporiZed

      Hi Pixel,

      du hast "inhalt" nicht deklariert. So sollte dein Code funktionieren:

      VB.NET-Quellcode

      1. ID = TextBox1.Text.Replace("http://www.youtube.com/watch?v=", "")
      2. link1 = "http://www.youtube.com/get_video_info?video_id=" & ID & "&fmt=37"
      3. Dim inhalt as String
      4. inhalt = WebClient1.DownloadString(link1)
      5. Dim pos As Integer = inhalt.IndexOf("url_encoded_fmt_stream_map=")
      6. Dim Part1 As String = inhalt.Substring(pos).Replace("%3F", "?").Replace("%3D", "=").Replace("%26", "&").Replace("%25", "%").Replace("%2C", ",").Replace("%25", "%").Replace("%3A", ":").Replace("%2F", "/").Substring(31)
      7. Dim Part2 As String = Part1.Substring(0, Part1.IndexOf("&fallback_host"))
      8. Downloadlink = Part2.Replace("%3F", "?").Replace("%3D", "=").Replace("%26", "&").Replace("%25", "%").Replace("%2C", ",").Replace("%25", "%").Replace("%3A", ":").Replace("%2F", "/")
      9. WebClient1.DownloadFileAsync(New Uri(Downloadlink), "C:\Video.flv")

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

      Danke für die schnelle Antwort viperkill :) Und wollte dir nochmal sagen dein YT Downloader ist echt nett :) :thumbsup:

      Das ganze hat leider nichts gebracht da ich inhalt vorher schon deklariert :whistling: hatte *siehe 1 Zeile*

      habs mal mit .ToString() probiert hat jedoch auch nichts gebracht ;( weißt echt nicht woran es liegt ?( ... ein Beispielprojekt würde meine Probleme lösen :D

      Danke im Vorraus für die Hilfe :thumbup:

      Die meisten denken sich bestimmt : Wenn man nicht coden kann sollte man es lassen ^^

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „P!xel“ ()

      Vollzitat eines Vorposts an dieser Stelle entfernt ~VaporiZed

      Also so simple wie der Code gehalten ist denke ich nicht, dass man daraus kein Patent/Copyright setzten kann.
      Es tut mir leid, falls ich dir 'etwas' 'geklaut habe' (ein VB-Code, schrecklich). Auch wenn es ein hilfreich erklährter Code ist, den viele suchen, und hier gut finden. Nebenbei habe ich dich auch erwähnt. In dem Thread findet das niemand.
      Ich wusste nicht das es dreisst ist wenn man anderen einen großen Gefallen tut, finde ich.
      Viele (wie Ich) suchten den Code...

      Vollzitat des direkten Vorposts an dieser Stelle entfernt ~VaporiZed
      Habe ein Beispielprojekt im 1. Post hochgeladen ;)

      Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „VaporiZed“ ()

      Erstmal großes Lob, funktioniert gut. Allerdings laufen Links mit Contents nicht.
      z.B :

      Quellcode

      1. http://www.youtube.com/watch?v=OehxXNCYvTM

      Hat jemand eine Idee?
      Grüße L88

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

      Als nächstes fischen wir uns den Link aus dem Video raus, dazu hat Youtube für jedes Video eine generierte Datei. Die fischen wir so raus:

      Das glaube ich kaum, ich denke eher, dass da eine Serverseitige Sprache die Infos aus einer Datenbank hohlt und dann an den Client sendet...Eben halt nicht als text/plain, sondern als application/x-www-form-urlencoded, also dem was sonst am Server ankommt bei POST, einen parser dafür gibt es halt noch nicht direkt, deshalb machst du das hier mit den Stringoperationen...
      Ich wollte auch mal ne total überflüssige Signatur:
      ---Leer---
      "StartIndex darf nicht kleiner als Null sein.
      Parametername: startIndex"

      Bin ich jetzt blöd? Er zeigt mir das hier als falsch an:

      VB.NET-Quellcode

      1. Dim Part1 As String = inhalt.Substring(pos).Replace("%3F", "?").Replace("%3D", "=").Replace("%26", "&").Replace("%25", "%").Replace("%2C", ",").Replace("%25", "%").Replace("%3A", ":").Replace("%2F", "/").Substring(31)


      Hmm...

      Grüße

      EDIT: Sorry, Fehler gefunden. Ich habe anstatt "37" (Qualität) "35" geschrieben... rofl
      -> Aber irgendwie funktioniert nichts... Es erscheint keine Datei unter "C:\", auch nicht wenn ich "Environment.SpecialFolder.Desktop" & "Video.flv" auswähle... Was mache ich falsch? o_O

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

      Zitat:
      Youtube hat eine art A = B konzept

      *lach*, das ist nicht wirklich ein konzept.
      In der url sind erstens: bestimmte zeichen nicht erlaubt, da gibts irgendwo bestimmt ne liste.
      Zweitens: Stell dir vor du sucht ein video in der url: Name "pix & fax"
      Da ist = und ?.
      Das Problem ist:

      Die URL sieht dann so aus:

      youtube.com/results?search_query=pix&fax

      Das gäbe Fehler im php skript bzw. es wäre nur pix zu suchen geben, da & automatisch eine art variablenname bis zum nächstem = deklariert und in $_GET speichert.
      Der wert der Variable ist dann automatisch alles bis zum ende oder bis zum nächstem &.

      Und außerdem werden ganze Texte über URL übermittelt und von daher braucht man das eben.
      Wie heißt der Fachbegriff nochmal?
      Url encoding oder sowas in der art...

      Tsuyo schrieb:

      [Release] YouTubeLibrary 2011 [v. 1.1]

      Du 'erklärst' meinen Code? Mit ein bisschen Gehirn?

      Schreib gefälligst deinen eigenen Code. Wie dreißt man nur sein kann ..
      Oder wie kleinkariert.
      Statt dich zu freuen, dass jmd. "deinen" Code richtig verstanden hat, machsteda'n Larry, als hätteman dir was weggenommen.
      Wennde nicht möchtest, dass jmd. aus deiner Weisheit Nutzen zieht, dann darfstese halt nicht veröffentlichen - schon garnet im Internet.
      Und der TE bereichert sich ja nicht dran, und erwirbt auch keinen Doktor Guttenberg, sondern er verschenkt sie nur weiter. Also Wissen at its best.

      Der Begriff "geistiges Eigentum" ist eiglich ziemlich paradox: Eigentum hat mit Geist dochma garnix zu tun.

      ("Geistiges Eigentum" erinnert mich bisserl an den Mythos von Häuptling Seattle - seine Verblüffung, als der weiße Mann Land von ihm kaufen wollte: Den Fußboden verkaufen war ihm mehr noch als gotteslästerlich ("Mutter Erde"): Es war ihm semantischer Unfug.)

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „ErfinderDesRades“ ()