2012-03-28 7 views
1

Ich versuche Nutzern zu ermöglichen, Videos auf meiner Website zu posten, indem sie nur die URL angeben. Im Moment kann ich YouTube-Videos zulassen, indem ich einfach die URL analysiere und die ID erhalte, und dann diese ID in ihren gegebenen "Einbettungs" -Code einfüge und diesen auf die Seite setze.C# Wie kann man Videos per URL einbinden (wie Facebook)?

Dies beschränkt mich auf nur YouTube-Videos, aber was ich tun möchte, ist etwas Ähnliches wie Facebook, wo Sie die YouTube "Share" URL ODER die URL der Seite direkt oder eine andere Video-URL eingeben können, und es lädt das Video in seinen Player.

Irgendeine Idee, wie sie das tun? oder eine andere vergleichbare Methode, um ein Video nur anhand einer URL anzuzeigen? Denken Sie daran, dass Youtube-Videos (die wahrscheinlich sowieso am beliebtesten sind) nicht die Video-URL, sondern die URL des Videos auf der YouTube-Seite angeben (weshalb ihr Einbettungscode nur mit der ID benötigt wird).

Hoffentlich machte das Sinn, und ich hoffe, jemand könnte mir ein paar Tipps geben, wo ich suchen soll!

Danke Jungs.

Antwort

3

Ich würde vorschlagen, Unterstützung für OpenGraph attributes hinzuzufügen, die unter Inhaltsdiensten üblich sind, die funktionieren, um anderen Websites zu ermöglichen, ihren Inhalt einzubetten. Die Informationen auf den Seiten werden in ihren <meta>-Tags enthalten sein, was bedeutet, würden Sie die URL über so etwas wie die HtmlAgilityPack laden müssen:

var doc = new HtmlDocument(); 
doc.Load(webClient.OpenRead(url)); // not exactly production quality 

var openGraph = new Dictionary<string, string>(); 
foreach (var meta in doc.DocumentNode.SelectNodes("//meta")) 
{ 
    var property = meta["property"]; 
    var content = meta["content"]; 
    if (property != null && property.Value.StartsWith("og:")) 
    { 
     openGraph[property.Value] 
      = content != null ? content.Value : String.Empty; 
    } 
} 

// Supported by: YouTube, Vimeo, CollegeHumor, etc 
if (openGraph.ContainsKey("og:video")) 
{ 
    // 1. Get the MIME Type 
    string mime; 
    if (!openGraph.TryGetValue("og:video:type", out mime)) 
    { 
     mime = "application/x-shockwave-flash"; // should error 
    } 

    // 2. Get width/height 
    string _w, _h; 
    if (!openGraph.TryGetValue("og:video:width", out _w) 
    || !openGraph.TryGetValue("og:video:height", out _h)) 
    { 
     _w = _h = "300"; // probably an error :) 
    } 

    int w = Int32.Parse(_w), h = Int32.Parse(_h); 

    Console.WriteLine(
     "<embed src=\"{0}\" type=\"{1}\" width=\"{2}\" height=\"{3}\" />", 
     openGraph["og:video"], 
     mime, 
     w, 
     h); 
} 
+0

das ist genial Hilfe, vielen Dank! – Goose

+0

Wenn ich diese Frage noch einmal anschaue, habe ich, kurz nachdem ich eine Lösung wie diese implementiert habe, einen Blogpost geschrieben. Ich habe ein paar Stücke für Websites hinzugefügt, die sich anders verhalten als YouTube, Vimeo usw. http://gosedotnet.wordpress.com/2012/06/27/embed-video-by-url-web-scraping-c/ – Goose