2012-03-28 4 views
1

Я пытаюсь разрешить пользователям размещать видео на моем сайте, предоставляя только URL-адрес. Прямо сейчас я могу разрешить видео на YouTube, просто разобрав URL-адрес и получив идентификатор, а затем вставив этот идентификатор в свой «встроенный» код и разместив его на странице.C# Как вставить видео по URL-адресу (например, Facebook)?

Это ограничивает меня только видео на YouTube, однако то, что я хочу сделать, это нечто похожее на facebook, где вы можете разместить URL-адрес YouTube «Поделиться» или URL-адрес страницы или любой другой URL-адрес видео, и он загружает видео в плеер.

Любая идея, как они это делают? или любой другой сопоставимый способ просто показать видео, основанное только на URL-адресе? Имейте в виду, что видеоролики youtube (которые, вероятно, были бы самыми популярными в любом случае) не дают URL-адрес видео, но URL-адрес видео на странице YouTube (вот почему их код для встраивания необходим только с идентификатором).

Надеюсь, это имело смысл, и я надеюсь, что кто-то может предложить мне несколько советов о том, где искать!

Спасибо, ребята.

ответ

3

Я бы предложил добавить поддержку для OpenGraph attributes, которые являются общими для служб контента, которые работают, чтобы другие сайты могли внедрять их контент. Информация на страницах будет содержаться в их <meta> теги, а это значит, вы должны загрузить URL через что-то вроде HtmlAgilityPack:

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

это огромная помощь, спасибо вам большое! – Goose

+0

Просто пересматривая этот вопрос, если он полезен для всех, кому я закончил писать сообщение в блоге вскоре после реализации такого решения. Я добавил несколько частей для сайтов, которые вели себя иначе, чем YouTube, Vimeo и т. Д. Http://goosedotnet.wordpress.com/2012/06/27/embed-video-by-url-web-scraping-c/ – Goose

Смежные вопросы