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.