YouTube-Videos Herunterladen

  • VB.NET

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

    Der wirft mir bei Windows 8 immer nur diesen Fehler, bis zum Downloaden komm ich sowieso nicht mehr:

    VB.NET-Quellcode

    1. Public Sub DownloadVideos(ByVal URL As Uri, ByVal File As String)
    2. Dim WebCl As New WebClient
    3. DecodeYoutubeVideoURL(VideoID)
    4. If File.EndsWith("\") = False Then
    5. File.Insert(File.Length, "\")
    6. End If
    7. 'Hier ist der Fehler(ArugumentException, Illegales Zeichen im Pfad)
    8. WebCl.DownloadFile(DecodedYT_URL, File)
    9. End Sub

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

    (Mein Post oben war übrigens hochgradig ironisch)
    Wie wäre es, wenn du mal versuchst nachzuvollziehen wie er funktioniert. FuFu (glaube ich) hat in diesem Thread ja schon sehr viel hilfreiches gesagt - du ignorierst es einfach und willst fertigen C&P Code. Für sowas gibt es keinen fertigen "Befehle" - du kannst die Werkzeuge die das Framework bietet nutzen um ein Problem zu lösen. Eigeninitative ist hier das wichtige Wort - schon doppeltwichtig wenn du für eine "Firma" programmieren willst.

    In Zeile 7 steht btw dein Fehler - wo ist das Problem? schau dir mittels Debugger (ja, das ding darf benutzt werde - ist immernohc keine straftat) an wie der Pfad lautet, u.U. kannst du den Fehler schon dort beheben. Ansonsten musst du dich mit der DecodeYoutubeVideoURL-Methode auseinandersetzten. Stell gezielte Fragen oder wende dich an den Marketplace. Niemand wird hier dein Programm coden.

    Btw: Stell einfach ein, dass der Freemake Video loader automatisch mit admin-rechten gestartet wird (REchte Maustaste => Eigenschaften).
    Bilder
    • unloesbar.JPG

      242,53 kB, 1.247×524, 173 mal angesehen

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

    Hab das jetzt mal so gemacht:

    VB.NET-Quellcode

    1. Public Sub DownloadVideos(ByVal URL As Uri, ByVal File As String)
    2. Dim ID As String = ""
    3. Dim ModifidedID As String = ""
    4. Dim Index1 As Integer = 0
    5. Dim Index2 As Integer = 0
    6. Index1 = ID.IndexOf("url_encoded_fmt_stream_map=itag%3D45%26url%3D")
    7. Index2 = ID.IndexOf("%26quality%")
    8. With ID
    9. ModifidedID = .Substring(Index1, Index2 - Index1)
    10. End With
    11. DownloadYouTubeVideo(ID, File, New WebClient)
    12. End Sub

    Aber bei ModifidedID = .Substring(Index1, Index2 - Index1) gibt's den Fehler

    Index1 und Index2 sind -1

    Ich hab die zwei Eingekreisten als Anfang(Rot) und Ende(Grün) verwendet:
    Bilder
    • unloesbar.JPG

      242,53 kB, 1.247×524, 151 mal angesehen

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

    Das ist der Aktuelle Code:

    VB.NET-Quellcode

    1. Public Sub DownloadVideos(ByVal URL As String, ByVal File As String)
    2. Dim Source As String = ""
    3. Dim ModifidedID As String = ""
    4. Dim wc As New WebClient
    5. Source = wc.DownloadString(URL)
    6. Dim Index1 As Integer = 0
    7. Dim Index2 As Integer = 0
    8. Index1 = Source.IndexOf("url_encoded_fmt_stream_map=itag%3D45%26url%3D")
    9. Index2 = Source.IndexOf("%26quality%")
    10. With Source
    11. Try
    12. ModifidedID = .Substring(Index1, Index2 - Index1)
    13. Catch ex As ArgumentOutOfRangeException
    14. MsgBox("Keine URL")
    15. End Try
    16. End With
    17. DownloadYouTubeVideo(ModifidedID, File, New WebClient) End Sub


    Das ist der Download:

    VB.NET-Quellcode

    1. Private Sub DownloadYouTubeVideo(ByVal VideoID As String, ByVal FileName As String, ByVal wc As WebClient)
    2. wc.DownloadFile(VideoID, FileName)
    3. End Sub

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

    Also steht in deiner Variable "ID" der Quellcode drin zum Zeitpunkt an dem du die IndexOf-Methode aufrufst?

    Hier nochmal ein Beispiel, dass aus einem Tutorial hier im Forum abgeleitet wurde:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. QuellCode = Await myClient.GetStringAsync("http://www.youtube.com/get_video_info?video_id=" & YoutubeLink.Replace("http://www.youtube.com/watch?v=", "") & "&fmt=37")
    2. 'Link:
    3. Dim pos As Integer = QuellCode.IndexOf("url_encoded_fmt_stream_map=", 0)
    4. pos = QuellCode.IndexOf("http", pos + 100)
    5. Dim Part1 As String = QuellCode.Substring(pos).Replace("%3F", "?").Replace("%3D", "=").Replace("%26", "&").Replace("%25", "%").Replace("%2C", ",").Replace("%25", "%").Replace("%3A", ":").Replace("%2F", "/").Substring(31)
    6. Dim Part2 As String = Part1.Substring(0, Part1.IndexOf("&fallback_host"))
    7. Link = "http://o-o---preferred---" & Part2.Replace("%3F", "?").Replace("%3D", "=").Replace("%26", "&").Replace("%25", "%").Replace("%2C", ",").Replace("%25", "%").Replace("%3A", ":").Replace("%2F", "/")
    8. Ausgeben("Link fertiggestellt")
    9. 'PfadRausfinden:
    10. Dim Speicherpfad As String = KnownFolders.DocumentsLibrary.Path
    11. Dim TitelClient As New HttpClient
    12. Dim SeitenText As String = Await TitelClient.GetStringAsync(YoutubeLink)
    13. Dim DateiName As String = TagAuslesen(SeitenText, "title")
    14. VollstaendigerSpeicherPfad = Speicherpfad & "\" & DateiName
    15. Ausgeben("Pfad fertig")
    16. Dim myByteArray() As Byte = Await myClient.GetByteArrayAsync(Link)
    17. Ausgeben("Download abgeschlossen")
    18. DownloadVid = Await KnownFolders.DocumentsLibrary.CreateFileAsync(TagAuslesen(SeitenText, "title").Replace("- YouTube", "").Replace(":", ".") & ".mp4", CreationCollisionOption.OpenIfExists)
    19. Await FileIO.WriteBytesAsync(DownloadVid, myByteArray)


    Das ist aber für Windows 8 Apps, aber das mit dem Link rausfinden sollte mit geringen Anpassungen an den neuen Downloadlink von Youtube möglich sein.

    Musste gerade leider feststellen, dass Youtube das Downloaden von Videos auf diese Art nur noch für Programme mit Berechtigung erlaubt...

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

    Aber ich möchte wissen, wieso er nichts damit(Meinem Code) ermittelt????
    @Telcrome
    Await??? Was ist dass den Bitte???
    Edit:
    Hab meinen Code geupdated(Funtzt noch immer nicht...):

    VB.NET-Quellcode

    1. ublic Sub DownloadVideos(ByVal URL As String, ByVal File As String)
    2. Dim Source As String = ""
    3. Dim ModifidedID As String = ""
    4. Dim wc As New WebClient
    5. Source = wc.DownloadString(URL)
    6. Dim Index1 As Integer = 0
    7. Dim Index2 As Integer = 0
    8. Source = Source.Replace("http:\/\/o-o---preferred---sn-uigxx50n-8pxl---v14---", "http//:")
    9. Index1 = Source.IndexOf("url_encoded_fmt_stream_map=itag%3D45%26url%3D")
    10. Index2 = Source.IndexOf("%26quality%")
    11. With Source
    12. Try
    13. ModifidedID = .Substring(Index1, Index2 - Index1)
    14. Catch ex As ArgumentOutOfRangeException
    15. MsgBox("Keine URL")
    16. bwDownloadYTV.WorkerSupportsCancellation = True
    17. bwDownloadYTV.CancelAsync()
    18. End Try
    19. End With
    20. DownloadYouTubeVideo(ModifidedID, File, New WebClient)
    21. End Sub

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

    Await ist was für Windows 8 Apps. Brauchst bei Windows Forms nicht beachten.
    Ist aber für das rausfinden des Links nicht wichtig.

    Mach mal bitte MsgBox(Source), direkt nach source = wc.downloadstring(...). Wenn da der Quellcode der Seite dann drinsteht, dann weiß ich auch nicht wieso er bei dir nichts findet...
    Frag mal Frau Google nach Youtube Downloader
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    omg. mehr kann ich dazu nicht sagen.
    Ich sage sowas nicht oft aber: Lass es sein. Fang ganz neu an - mit allem, was mit VB.NET zutun hat.

    Das hier geht btw nur an Post#64. "Ich hab das mal so gemacht" bedeutet auf deutsch: ich habe keine ahnung, darum habe ich alles mögliche zusammenkopiert und zwei von dir genannte strings mit reingeschrieben. Ehrlich, du hast doch eine Routine (die vermutlich mist ist) gehabt. Warum passt du die beiden Index-Begrenzungs-Strings nicht einfach an??

    Lese mal den Post vom ErfinderDesRades über TryCatch. Bei deinem Code kannst du dir auch gleich n hammer auf den fuß fallen lassen, in der hoffnung, dass ein schließen der augen den nervigen schmerz fern hält...