YouTube-Videos Herunterladen

  • VB.NET

Es gibt 75 Antworten in diesem Thema. Der letzte Beitrag () ist von FreakJNS.

    YouTube-Videos Herunterladen

    Hallo Forum,

    es gibt zwar schon einen Thread in diesem Forum, die Funktionen in diesem sind aber schon "abgeschaltet". Und noch einen, der lädt aber nur 200 kb große dateien herunter.
    Meine Frage:
    Kennt jemand einen guten Ansätz, wie man solch einen YouTube-Downloader programmieren kann?
    Bin allen Antworten dankbar!!!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ChipPRO Österreich“ ()

    Irgendwo in diesem Forum, such in...

    OK:

    VB.NET-Quellcode

    1. Dim Pfad As String
    2. Dim Url As String
    3. Dim webb As New WebBrowser
    4. Dim modurl As String
    5. Dim webclient As New Net.WebClient
    6. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    7. SaveFileDialog1.ShowDialog()
    8. If Not SaveFileDialog1.FileName = "video.flv" Then Pfad = SaveFileDialog1.FileName.ToString
    9. Button1.Text = Pfad.ToString
    10. End Sub
    11. Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    12. Url = TextBox1.Text
    13. modurl = Url.Replace("watch?v=", "v/")
    14. webb.Navigate(modurl)
    15. Dim x As Date = Date.Now.AddSeconds(5)
    16. While Not Date.Now = x
    17. End While
    18. modurl = webb.Url.AbsoluteUri.Replace("swf/l.swf", "get_video")
    19. webclient.DownloadFile(modurl, Pfad + ".flv"
    20. End Sub

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „ChipPRO Österreich“ ()

    Ich schaus mir gerade mal an.
    wenn ich was herausfinde, poste ich es.

    Bin mir nicht sicher, aber zwei Codeschnippsel sind besser als einer:
    Der von mir vorher gepostete Code und einer von Vb@rchiv(Google-Suche:vb.net http dateidownload).
    Näheres, wenn alles funzt.

    ChipPRO Österreich

    Status:
    Zugriffsrecht-Fehler


    Edit by Manschula: Das Forum besitzt eine "Bearbeiten-Funktion". Diese bitte auch verwenden! --> Doppelposts zusammengefügt

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

    Dies hier funktionierte vor einiger Zeit bei mir noch :)
    Es ist ganz einfach, wenn man weiß, wie sich der Downloadlink zusammensetzt :)

    VB.NET-Quellcode

    1. Sub download()
    2. downloadlink = list(ComboBox1.SelectedIndex)
    3. Dim text As String = CStr(ComboBox1.SelectedItem)
    4. Dim inhalt As String
    5. inhalt = WebClient1.DownloadString(New Uri(downloadlink))
    6. Dim pos As Integer = inhalt.IndexOf("url_encoded_fmt_stream_map=")
    7. 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)
    8. Dim Part2 As String = Part1.Substring(0, Part1.IndexOf("&fallback_host"))
    9. Dim end_DL_url As String
    10. end_DL_url = Part2.Replace("%3F", "?").Replace("%3D", "=").Replace("%26", "&").Replace("%25", "%").Replace("%2C", ",").Replace("%25", "%").Replace("%3A", ":").Replace("%2F", "/")
    11. WebClient1.DownloadFileAsync(New Uri(end_DL_url), "C:\" & text & ".flv")
    12. End Sub
    Wann war
    Vor einiger Zeit
    ?
    YouTube hat seit einem halben Jahr ein neues Konzept.

    Aber:
    Ich habe mit meinem Code (HttpWebResponse, HttpWebRequest, FileStream, MemoryStream, StreamReader, StreamWriter.) Schon was geschafft. Den Code habe übrigends ich selbst entwickelt. Der Code von Vb@rchiv (Google-Suche: site:vbarchiv.net http dateidownload) bringt nichts.
    Ich habe den Code total überarbeitet.
    Ich erstelle keine Datei mit dem FileStream, sondern gebe ihn mit dem MemoryStream in den RAM, lese den MemoryStream mit StreamReader aus und zum Schluss schreibe ich die Dateien in den Pfad.
    Deshalb so lange, weil sonst steht das Programm.

    So vielleicht???

    VB.NET-Quellcode

    1. Public Sub DownloadVideos(ByVal URL As Uri, ByVal File As String)
    2. Dim WebReq As HttpWebRequest
    3. Dim WebResp As HttpWebResponse
    4. Dim fStream As FileStream
    5. Dim sWriter As StreamWriter
    6. Dim VideoID As String
    7. Dim ModifidedURL As String
    8. VideoID = YoutubeURL.ToString
    9. If VideoID.Contains("http://www.youtube.com/watch?v=") Then
    10. VideoID.Replace("http://www.youtube.com/watch?v=", " ")
    11. End If
    12. ModifidedURL = String.Format("http://www.youtube.com/get_video_info?video_id={0}&asv=3&el=detailpage&hl=en_US", VideoID)
    13. Try
    14. WebReq = WebRequest.Create(URL)
    15. WebResp = WebReq.GetResponse
    16. fStream = New FileStream(File, FileMode.CreateNew)
    17. sWriter = New StreamWriter(File)
    18. sWriter.WriteLine(fStream)
    19. sWriter.Close()
    20. fStream.Close()
    21. MsgBox("Download erfolgreich")
    22. Catch ex As Exception
    23. MessageBox.Show("Fehler:" & vbCrLf & ex.Message, "Fehler in " & ex.Source)
    24. End Try
    25. End Sub

    So, den hab ich gemacht.
    Aber:
    > Er erzeugt eine Datei
    > "Fehler in mscorlib" wird beim Catch(ex.source) angezeigt
    > Datei natürlich leer

    Könnte mir jemand helfen?
    Try Catch weg.
    Fehler:
    Bei:

    VB.NET-Quellcode

    1. sWriter = new StreamWriter(File)

    Exception:

    Visual Studio Ultimate 2010 schrieb:

    IOException (Hätt ich mir gedacht)
    Der Prozess kann auf die Datei D:\TestVideo.mp4 zugreifen, ...

    Bei Catch:

    VB.NET-Quellcode

    1. ex.source = "!mscorlib!"


    Edit//:
    Könnte mir jemand beim "Replacen" helfen.
    Möchte aus der kompletten URL alles vor der ID entfernen.

    VB.NET-Quellcode

    1. If VideoID.Contains("http://www.youtube.com/watch?v=") Then
    2. VideoID.Replace("http://www.youtube.com/watch?v=", " ")
    3. End If

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ChipPRO Österreich“ ()

    So nebenbei...

    So nebenbei:
    Bei YouTube kann man mehrere Video-Qualitäten auswählen.
    Kennt jemand irgend eine Möglichkeit, alle vorhandenen Qualitäten auflisten und eine Bestimmte Qualität auswählen und diese herunterladen?

    Muss nicht sein, wäre aber nett.

    ChipPRO Österreich
    Nach "&fmt_list=" suchen, der Parameter enthält alle Videoformate als ID. Damit findet man raus welche Formate es gibt.

    Ein paar IDs(finde grad die Seite mit allen IDs nicht):
    Spoiler anzeigen

    Quellcode

    1. MP4_1080P = 37,
    2. MP4_720P = 22,
    3. FLV_480P = 35,
    4. MP4_360P = 18,
    5. FLV_360P = 24,
    6. FLV_240P = 5,


    Oder du holst dir alle Downloaad URLs(Kann man mit ",url=" finden) und prüfst die &itag Parameter in der URL, diese enthalten die Format ID.

    Hab grad nur ein C# Beispiel, um an die &fmt_list Formate zu kommen, zur Hand(Kann man aber leicht mit einem C# to VB.NET Konverter konvertieren): pastebin.com/rdAcctwe Ziemlich unsauber, war nur schnell geschrieben für paar Tests, RegEx wäre da schneller und vor allem weniger Code

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

    man benötigt keinen WebRequest. Ein WebClient reicht vollkommen.

    1.) PageSource As String <- .DownloadString( *Videolink* )
    2.) DLLink as String oder Uri <- PageSource *regexxen* Schlüsselwort:"fmt_streammap" (danach folgen die Downloadlinks der versch. Qualitäten)
    3.) .DownloadFile( *DLLink* )
    Nö, ich komme nicht weiter...

    //EDIT:\\
    Verwende bisher den da

    Code

    VB.NET-Quellcode

    1. Dim WebReq As HttpWebRequest
    2. Dim WebResp As HttpWebResponse
    3. Dim fStream As FileStream
    4. Dim sWriter As StreamWriter
    5. Dim VideoID As String
    6. Dim ModifidedURL As String
    7. Try
    8. VideoID = YoutubeURL.ToString
    9. If VideoID.Contains("http://www.youtube.com/watch?v=") Then
    10. VideoID.Replace("http://www.youtube.com/watch?v=", " ")
    11. End If
    12. ModifidedURL = String.Format("http://www.youtube.com/get_video_info?video_id={0}&asv=3&el=detailpage&hl=en_US&fmt_list=22", VideoID)
    13. WebReq = WebRequest.Create(URL)
    14. WebResp = WebReq.GetResponse
    15. fStream = New FileStream(File, FileMode.Append, FileAccess.Write)
    16. fStream.Close()
    17. sWriter = New StreamWriter(File)
    18. sWriter.WriteLine(fStream)
    19. sWriter.Close()
    20. MsgBox("Download erfolgreich")
    21. Catch ex As Exception
    22. MessageBox.Show("Exception-Name:" & vbCrLf & ex.InnerException.ToString & vbCrLf & _
    23. "Exception:" & vbCrLf & ex.Message, _
    24. "Fehler bei " & ex.Source.ToString)
    25. End Try
    26. End Sub

    Er wirft keine Fehler, aber:
    Er erzeugt eine Datei die 1k groß ist.
    Könnte den jemand ändern??? :huh: :huh: :huh: :huh:
    du hast einen String in den lädst du die seitenquelltext einer youtubevideoseite

    diesen string drchsuchst du mit regex nach dem schlüsselwort "fmt_streammap"

    dahinter befindn sich im text die downloadlinks

    den gewünschten DL-Link lässt du dann mit der downloadfile-methode herunterladen


    easy und sauber. C&P sollte nicht von nöten sein.
    @ Picoflop
    hab ich mir auch gedacht xD
    Aber die Zeile ist noch mehr Käse als ich mir bisher dachte. Habe es für einen OptionStrictOff-Witz gehalten aber es gibt tatsächlich eine überladung von Writeline die ein Object aktzeptiert.. Was auch immer da geschrieben wird ist humbuk.