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
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.