HowTo: YouTube mit C# durchsuchen – Einstieg in die YouTube API / Google Data API

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

image
(Ergebnis im IE7)

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

Resultat für die Suchanfrage für “Die Ärzte”:

image

Der Sourcecode wurde nur wenig vom originalen abgeändert.

Was macht man nun damit?

Das ganze bringt momentan in der Konsolenanwendung relativ wenig – in einer Windows.Forms Anwendung und mit dem “WebBrowser” in dem das Flashfile abgespielt werden kann, ist das schon brauchbarer (oder in einer ASP.NET Anwendung)

Leider gibt es wohl keine Möglichkeit (jedenfalls nicht mit dieser API – weiß einer einen anderen Weg?) das Flash von außen zu steuern. Das heisst, das man das embedded HTML (wie es bei YouTube üblich ist) immer mit einbauen muss – dafür kann man z.B. gut das “WebBrowser” Control nehmen.

Das Demoprojekt runterlade

Runterladen könnt ihr das Demoprojekt natürlich auch – ich hab es diesmal mit dem Visual Studio 2008 (die Express Edition kann jeder sich kostenlos runterladen) erstellt – falls jemand nur Visual Studio 2005 zur Hand hat und den Code benutzen möchte, steht dem nichts im Wege – einfach die CS Datei öffnen. In dem Demoprojekt wird kein .NET 3.5 benötigt – ich wollte nur mal rumexperimentieren.

[Download Democode]

Links:

Wenn dir der Blogpost gefallen hat, dann hinterlasse doch einen Kommentar. Wenn du auf dem Laufenden bleiben willst, abonniere unseren RSS Feed oder folge uns auf Twitter.

About the author

Written by

Hi, ich bin Robert Mühsig und bin Webentwickler und beschäftige mich mit Web-Frameworks auf dem Microsoft Web Stack und scheue mich auch nicht vor Javascript. Der Blog begann als "Problemsammelstelle und Lösungshilfe" und seitdem schreibe ich hier alles auf. Seit 2008 bin ich Microsoft MVP für ASP.NET. Treffen kann man mich online via Twitter (@robert0muehsig) oder hier.

10 Responses

  1. Sehr interessanter Artikel!!
    Hey auch ein Ärzte Fan ;-)

    Grüße aus Augsburg
    Olli

    Reply
  2. Beste Band der Welt ;)

    Reply
  3. Hi Robert,

    Toller Artikel, versuche das mal mit Silverlight umzusetzten :)

    Gruss
    Severin

    Reply
  4. Hallo,

    ich habe anhand Deines Beispieles mir einen Feed-Reader gebaut, der Blogger durchsucht und mir allerhand Metadaten anzeigt.

    Ich möchte aber auch das Profil des Nutzers auslesen, für das ich aber keinen Ansatzpunkt finde. Weist Du wie man an diese kommt?

    Außerdem ist mir aufgefallen, das die uri eines Kommentators bei Blogs immer leer ist. Woran könnte das liegen?
    (AtomEntry entry.Authors[0].Uri.ToString(); ist gemeint)

    Reply
  5. Sehr schöner Blogartikel über die YouTube API. Ich habe mich mal mit der Google Search API beschäftigt und bisher leider kein gescheites Tutorial auf C#-Basis gefunden. Da man mit JSON-Objekten umgehen muss, ist das ganze auch etwas neu für mich gewesen.

    Einfaches Tutorial zur Google Search API:
    http://www.bitpage.de/2010/programmierung/c-die-google-search-api-benutzen

    Reply
  6. Hallo,

    danke für den Artikel hat mir viel weitergeholfen und komme nun meiner ersten Youtube Anwendung immer näher.

    lg

    Reply
  7. Hallo,

    guter Artikel. Ich bastele auch gerade ein wenig rum. Ich habe mal probiert Freunde von meinem Profil auszulesen, was ja recht leicht ist.

    http://code.google.com/intl/de/apis/youtube/2.0/developers_guide_protocol_contacts.html

    Allerdings sind maximal 100 results möglich (bei mir zeigt viel weniger an). Kann man das irgendwie umgehen?

    Reply
  8. Hallo,

    schön erklärt. Es gibt auch noch ne schöne Variante,
    den Link den man dort bekommt kann man im Video Lan Client
    super wiedergeben… hab ich versucht, klappt gut.

    Grüße

    Reply
  9. gibts bei dem beispiel oben auch eine möglichkeit ein timeout- und/oder eine orderby-funktion einzubauen? würde z.b. gerne nach rating sortieren.

    lg

    Reply

Comment on this post

Letzte Posts

  • image.png
    Azure AppInsights: Ein mini Google Analytics für Websites

    Seit der Build Konferenz ist das neue Azure Portal für alle freigeschaltet. Durch das neue Portal ist mir ein “Dienst” aufgefallen, den ich bisher nicht gesehen hatte: Azure Application Insights Viel weiss ich nicht über den Dienst, aber wer eine Azure Website hat der sollte mal die “Analytics” Box öffnen. Im Grunde handelt es sich […]

  • image.png
    Source Code veröffentlichen – aber bitte mit Lizenz

    Seit es den Blog gibt wird auch meist der gesamte Demo Source Code mit veröffentlicht. Das Ganze hatte ich am Anfang noch als .zip verteilt, später lag es mal auf Google Code und nun liegen alle Samples und sonstige Sachen auf GitHub. Beim letzten User Group Treffen in Zürich mit dem Titel “Open Source: Get […]

  • Fix: Cannot convert from ‘CConnectProxy::_ComMapClass *’ to ‘AddInDesignerObjects::IDTExtensibility2 *’

    Mal einen etwas esoterischer Blogpost, welcher auftaucht wenn man zu viel mit Office Addins rumspielt. Der Fehler passiert beim Bauen von C++ Projekten, welchen diesen Typ benötigen. Lösung (auf 64bit Systemen): C:\Program Files (x86)\Common Files\DESIGNER>regsvr32 MSADDNDR.DLL And Rebuild. Meine lieben Kollegen hatte mir dies schon mehrfach gesagt, allerdings hatte ich es immer wieder vergessen Das […]

  • Gegen das Gesetz verstoßen: X Jahre Haft. Gegen die Terms of Use verstoßen: Bann auf Lebenszeit. Danke Google & co.

    Bei fast allen Diensten die man im Internet nutzen kann muss man den “Terms of use” zustimmen. Völlig logisch dass da natürlich drin steht was erlaubt und was nicht. Wenn man gegen diese Regelungen verstößt hat das Unternehmen natürlich das Recht etwas dagegen zu unternehmen. In der heutigen Welt beherrschen einige wenige Unternehmen die digitale […]

  • image.png
    RSS Feed samt Kommentaranzahl und andere nicht Standard Elemente mit dem SyndicationFeed auslesen

    Jetzt mal ein Blogpost ohne ein fancy NuGet Package: Seit .NET 3.5 gibt es die SyndicationFeed Klasse. Eine schon etwas ältere API, reicht aber aus um Atom bzw. RSS Feeds zu lesen. In diversen RSS Feeds gibt es aber Erweiterungen, welche man natürlich auch auslesen möchte. So gibt WordPress z.B. auch die Anzahl der geposteten […]

Amazon Shop

Facebook