Vor einige Zeit habe ich bereits in einem meiner Wöchentlichen Rundablagen diesen interessanten Blogeintrag gefunden: Querying Youtube API using C#
Aufbauend auf diesen, habe ich mich selber mit der YouTube API beschäftigt und schreib mal etwas darüber.
Was kann die YouTube API?
Die YouTube API wurde durch die Übernahme durch Google geändert (siehe YouTube Dev) und ist jetzt Teil der GData API. Die YouTube API basiert auf den ATOM XML Format und kann daher auch ohne Anmeldung oder sonstiges in einem normalen Browser betrachtet werden. Wir suchen einfach mal YouTube nach Videos von U2 über die API ab:
http://gdata.youtube.com/feeds/videos?q=u2
Bietet YouTube / Google sonst noch was?
Da ATOM auch nur XML ist, könnte man jetzt über XmlDocument die Ergebnisse auch selber parsen. Google stellt allerdings für .NET ein SDK bereit, womit man diesen ATOM Feed besser parsen kann: Googles GData .NET Library (einfach das aktuellste nehmen).
Entpackt oder Installiert man das SDK befindet sich in diesem Ordner alle nötigen DLLs: cs\lib\Release
Für die YouTube API gibt es keine gesonderte DLL, sondern wir benötigen diese zwei:
- Google.GData.Client.dll
- Google.GData.Extensions.dll
Das tolle Test-Such-Konsolen-Programm
Als Demonstration nehm ich einfach ein Konsolenprogramm - auch wenn dies natürlich bei einer Videosuche etwas “unsinnig” ist - es ist am einfachsten ;)
Folgende Namespaces müssen eingebunden werden (und die 2 DLLs von Google und die System.Web DLL müssen mit referenziert werden):
using System.Web; using Google.GData.Client; using Google.GData.Extensions;Wie bereits weiter oben gezeigt, benötigt man für das Suchen auf YouTube diese URL als Ausgangspunkt: http://gdata.youtube.com/feeds/videos?q=[SUCHWORT] Das entsprechende "[SUCHWORT]" muss natürlich entsprechend noch für den Einsatz in der URL maskiert werden. Hier hab ich eine schöne Übersicht über die URL-maskier Möglichkeiten im .NET Framework gefunden: URL-Maskierung Über die Klasse "HttpUtility.UrlEncode" bekommen wir den gewünschten maskierten Suchstring - dafür müssen wir auch "System.Web" mit referenzieren. Das Test Program bietet einfach eine Eingabemöglichkeit und gibt die 20 ersten Suchtreffer wieder, hier der komplette Quellcode:
static void Main(string[] args) { Console.WriteLine("Suchwort:"); string searchTerm = Console.ReadLine(); string uriSearchTerm = HttpUtility.UrlEncode(searchTerm); string url = "http://gdata.youtube.com/feeds/videos?q=" + uriSearchTerm; Console.WriteLine("Connection to YouTube - Searching: " + searchTerm); FeedQuery query = new FeedQuery(""); Service service = new Service("youtube", "sample"); query.Uri = new Uri(url); query.StartIndex = 0; query.NumberToRetrieve = 20; AtomFeed resultFeed = service.Query(query); foreach (AtomEntry entry in resultFeed.Entries) { Console.WriteLine("Title: " + entry.Title.Text); Console.WriteLine("Link: " + entry.AlternateUri.Content); Console.WriteLine("Tags:"); foreach (AtomCategory cat in entry.Categories) { Console.Write(cat.Term + ", "); } Console.WriteLine(); } Console.ReadLine(); }Kurz erklärt:
- Der Suchstring wird über UrlEncode maskiert.
- "FeedQuery" ist eine spezielle Google.GData Klasse, mit welchem man ATOM Feeds leichter abrufen kann.
- Bei "Service service = new Service("youtube", "sample")" muss der "Servicename" und der "Applicationname" übergeben werden, obwohl dies wohl keinerlei Bedeutung hat.
- Bei "service.Query(query)" wird die Suchanfrage abgeschickt (max. Suchergebnisse sind wohl 20 Einträge pro Request) und als Ergebnis kommt ein "AtomFeed".
- Dieser "AtomFeed" wird pro Entity entsprechend ausgegeben.
- Die für YouTube interessante "watch" Adresse, versteckt sich in entry.AlternAteUri.Content - z.B. http://www.youtube.com/watch?v=w-TssRlmmBE für einen U2 Song
- Blogeintrag: Wöchentliche Rundablage
- Blogeintrag: Querying Youtube API using C#
- YouTube nach U2 absuchen: http://gdata.youtube.com/feeds/videos?q=u2
- Google Code - YouTube API
- Googles GData .NET Library
- .NET URL Maskierungsübersicht
- MSDN HttpUtility.UrlEncode
- MSDN WebBrowser
- Microsoft VS 2008 Express Editions
- YouTube Dev Seite
- Wikipedia ATOM Format