Video IDW poprzedniej pracy kiedyś dawno temu dostałem takie zadanie. Polegało ono na stworzeniu kodu, który by wyciągał “id-ki” z filmików z Youtube.

Sprawa nie jest prosta ,a czas jaki dostałem na to zadanie był zdecydowanie za krótki.

Trochę napięcia było Uśmiech

Ten kod ,a raczej “wyrażenie regularne” zachowałem sobie na przyszłość ponieważ nie mogłem znieść myśli ,że ktoś inny może mieć ten sam problem w przyszłości.

Szczerze mówiąc gdyby nie pomoc “stackoverflow” to bym wtedy nie rozwiązał tego problemu.

Co jest w tym takiego trudnego. Gdyby Youtube generowały tylko takie adresy do swoich filmików być może nie byłoby w tym problemu.

http://www.youtube.com/watch?v=bWTyFIYPtYU&feature=populards

Kombinacji jest jednak dużo więcej:

youtube.com/v/{vidid}
youtube.com/vi/{vidid}
youtube.com/?v={vidid}
youtube.com/?vi={vidid}
youtube.com/watch?v={vidid}
youtube.com/watch?vi={vidid}
youtu.be/{vidid}

Dużo więcej…

Poniższy kod wyciągnie ze wszystkich adresów url “id” pliku wideo. Esencją kodu jest wyrażenie regularne. 

List<string> url = new List<string>
{  
    "http://www.youtube.com/sandalsResorts#p/c/54B8C800269D7C1B/0/FJUvudQsKCM",
    "http://www.youtube.com/user/Scobleizer#p/u/1/1p3vcRhsYGo",
    "http://youtu.be/NLqAF9hrVbY",
    "http://www.youtube.com/embed/NLqAF9hrVbY",
    "https://www.youtube.com/embed/NLqAF9hrVbY",
    "http://www.youtube.com/v/NLqAF9hrVbY?fs=1&hl=en_US",
    "http://www.youtube.com/watch?v=NLqAF9hrVbY",
    "http://www.youtube.com/user/Scobleizer#p/u/1/1p3vcRhsYGo",
    "http://www.youtube.com/ytscreeningroom?v=NRHVzbJVx8I",
    "http://www.youtube.com/user/Scobleizer#p/u/1/1p3vcRhsYGo",
    "http://www.youtube.com/watch?v=JYArUl0TzhA&feature=featured",
    "http://www.google.pl",
    "http://www.youtube.pl/zzz"
};

foreach (var s in url)
{
    string value = Regex.Match(s,
         @"(?:youtube\.com\/(?:[^\/]+\/.+\/|(?:v|e(?:mbed)?)\/|.*[?&]v=)|youtu\.be\/)([^""&?\/ ]{11})")
        .Groups[1].Value;

    if (value != string.Empty)
        Console.WriteLine(value);
    else
        Console.WriteLine("Nie można znaleźć ID dla : {0}", s);
}

Wynik przykładowego kodu.

Youtoube Video ID C# Result