Hi,
ich habe vor kurzem einen YouTube Download programmiert aber habe keine Lust den zu Releasen oder ihn weiter zu entwickeln. Damit die ganze "Arbeit" nicht umsonst war, habe ich mich entschieden den Sourececode mit ein paar beschreibungen hier zu veröffentlichen.
Dan wollen wir mal anfangen:
Da wir wahrscheinlich nicht einfach nur das Video downloaden möchten, sondern auch ein paar Infos zu den Videos haben möchten (Autor,Titel), fangen wir auch erstmal damit an. Alle Funktionen(Außer die zum Download vom Quelltext) basieren auf RegEx.
Als erstes brauchen wir den Quelltext von dem YouTube Video:
|
Visual Basic Quellcode
|
1
2
3
4
5
|
Dim Request As HttpWebRequest = HttpWebRequest.Create("URL")
Dim Response As HttpWebResponse = Request.GetResponse()
Dim reader As StreamReader = New StreamReader(Response.GetResponseStream)
Dim httpContent As String
httpContent = reader.ReadToEnd
|
Jetzt haben wir schonmal die vorraussetzung für alle folgenden Schritte.
Titel auslesen:
|
Visual Basic Quellcode
|
1
2
3
|
Dim TitleRegEx As New Regex("title=""(?<Title>(.*))"" />")
Dim title as String
title = TitleRegEx.Match(httpContent).Groups("Title").ToString
|
Diese Funktion liefert uns schonmal den Titel des Videos. Hier mal eine kleine Erläuterung:
Der Titel eines Videos, liegt in diesem Vormat in dem Quelltext der Seite vor:
|
Quellcode
|
1
|
title="Titel des Videos" />
|
Da wir den Titel ja nicht wissen, und ihn auslesen wollen, können wir ja nicht im RegEx den Titel schon angeben(wäre auch ohne sinn).
Deswegen schreibt man "(?<Title>(.*))" wobei man "Title" in jedes x-beliebige Wort ändern kann.
Das "(.*)" sagt dem Programm, dass der Text der da stehen sollte (Also der Titel des Videos) x-beliebige zeichen bzw. Zahlen hat. Das brauchen wir,
da wir auch hier nicht wissen wie Lang der Titel ist oder ob er aus Buchstaben und Zahlen besteht.
Zum schluss haben wir noch das "?" am Anfang der Klammer. Das Fragezeichen sagt dem Programm, dass es den Text der da steht in die Speichern soll und zwar
in der Variable, die wir zwischen den "<>" stehen haben(in diesem Fall "Title")
In der Letzteb Zeile des Codes("title = TitleRegEx.Match(httpContent).Groups("Title").ToString") wird eigentlich erst der/das RegEx gestartet.
"httpContent" steht für den Text der nach den oben angegebenen Zeichen durchsucht werden soll. "Title" steht für die Variable in der der Text gespeichert wurde(wie oben genannt). Wenn wir beim RegEx deklarieren anstatt "Title", "test" geschreiben hätten, müssten wir also auch hier "Title" in "test" ändern.
Autor auslesen:
|
Visual Basic Quellcode
|
1
2
3
|
Dim AutorRegEx As New Regex("'VIDEO_USERNAME': '(?<Autor>(.*))',")
Dim Autor As String
Autor = AutorRegEx.Match(httpContent).Groups("Autor").ToString
|
Die gleiche Erläuterung wie beim Titel. In diesem Fall liegt aber der Autor des Videos in diesem Format vor:
|
Quellcode
|
1
|
'VIDEO_USERNAME': '*Autor des Videos*',")
|
Dementsprechend muss man natürlich auch im RegEx den String ändern nachdem gesucht werden soll.
Aufrufe auslesen:
|
Visual Basic Quellcode
|
1
2
3
|
Dim ViewRegEx As New Regex("<strong class=""watch-view-count"">(?<Views>(.*))</strong><br>Aufrufe")
Dim Views As String
Views = ViewRegEx.Match(httpContent).Groups("Views").ToString
|
Hier liegt die Anzahl der Aufrufe in diesem Format vor:
|
Quellcode
|
1
|
<strong class=""watch-view-count"">*Anzahl aufrufe*</strong><br>Aufrufe
|
Anzahl Bewertungen auslesen:
|
Visual Basic Quellcode
|
1
2
3
|
Dim RateNum As New Regex("<div class=""action-bar-ratings-stats yt-uix-tooltip"" title=""(?<Like>(.*))"">")
Dim RateNums As String
RateNums = RateNum.Match(httpContent).Groups("Like").ToString
|
Hier liegt die Anzahl der Bewertungen so vor:
|
Quellcode
|
1
|
<div class=""action-bar-ratings-stats yt-uix-tooltip"" title=""*Anzahl der Leute die es mögen oder nicht*"">
|
Video Download:
Alles bis hier hin war ja eigentlich noch ganz einfach wenn man weiß wonach man suchen muss

Der Download des Videos ist eigentlich auch ganz simpel wenn man weiß wie sich der Downloadlink zusammen setzt.
In diesem Beispiel wird das Videos als .mp4 gedownloadet.
Der Downloadlink zu einem Video setzt sich aus 3 verschiedenen Teilen zusammen:
Eine bestimmte URL von YouTube, die ID des Videos und die Variable "t".
Diese bestimmte URL von YouTube ist diese :
|
Quellcode
|
1
|
http://www.youtube.com/get_video?fmt=18&video_id=
|
An diese URL muss man die ID des Video ran hängen und die Variable "t". An die ID kommt man ziemlich schnell:
Sie steht in jeder URL zu einem Video hinter "v=". Also ist es sehr einfach diese gerauszubekommen:
|
Visual Basic Quellcode
|
1
2
|
Dim URL as String = "Link zum Video"
URL = Url.Replace ("http://www.youtube.com/watch?v=","")
|
Schon hat man die ID des Videos. Man kann diese natürlich auch wie die anderen Informationen über RegEx auslesen aber mit Replace geht es einfacher und schneller.
Jetzt müssen wir noch die Variable "t" auslesen:
|
Visual Basic Quellcode
|
1
2
3
|
Dim tRegEx As New Regex("""t"": ""(?<t>(.*)) """)
Dim t as String
t = (Mid$(tRegEx.Match(httpContent).Groups("t").ToString,1,46))
|
Ihr seht, dass fasst alles gleich ist wie bei den anderen. Nur jetzt kommt beim speichern des Textes noch ein "Mid$" dazu.
Das "Mid$" steht dort, damit man nur die Variable "t" angezeigt bekommt. Ohne das "Mid$" bekommt man nen haufen Quelltext zurückgeliefert,
den man eigentlich nicht braucht. Das "Mid$" schneidet auch einfach nur alle Buchstaben bzw. Zeichen ab, die nicht in dem Bereich von zeichen 1 bis 46
sind.
Jetzt haben wir alle sachen die wir brauchen um das Video zu downloaden. Also nur noch zusammen setzen:
|
Visual Basic Quellcode
|
1
|
Dim DownloadURL as String = "http://www.youtube.com/get_video?fmt=18&video_id=" & ID & "&t=" & t
|
Jetzt einfach nur noch nen Webclient machen und download ;-)
Bei diesem Link wird das Video als .mp4 gedownloadet. Allerdings kann man ganz einfach den Dateitypen ändern.
Der erste Teil des Links sieht wie folgt aus:
http://www.youtube.com/get_video?
fmt=18&video_id="
Ihr seht, dass am in der mitte/ am ende ein "fmt=18" steht. Wenn man diese zahl ändern (also in diesem Fall "18"), bekommt man das Video in einem anderem Format. Folgende Formate gibt es bei YouTube(Danke technobase

):
"fmt=5" = .flv Format
"fmt=22" = .mp4 in HD (setzt vorraus, dass das Video auch in HD vorhanden ist)
"fmt=17" = .3gp
So, das wars jetzt
ich hoffe es hat euch ein bischen geholfen. Wenn ihr Fragen oder Anregungen habt dann könnt ihr sie hier posten!
Grüsse,
viperkill
ACHTUNG! Durch die Umstellung des Youtube Layouts, funktionieren manche abfragen nicht mehr. Ich werde mich so bald wie möglich hinsetzten und den Sourcecode updaten.
EDIT: Alle Abfragen gehen wieder! Nur die zusammen setzung des YouTube Downloadlinks will noch nich
P.S.: Wer Rechtschreibfehler findet, darf sie behalten
EDIT: Habe jetzt im Anhang ein Beispiel Projekt "rangehängt"