[C#] Youtube Video İd‘Sini Regex İle Alma?
-
Youtube json apisini kullanarak bir kullanıcının videoları çekiyorum fakat bana videoların sadece id'si lazım. Malesef api sadece id'leri vermiyor.
sanırım bunu regex ile halletmem gerekiyor ama regex bilgim sıfır. örneğin aşağıdaki url den sadece 9bZkp7q19f0 kısmını nasıl alabilirim?
http://gdata.youtube.com/feeds/api/videos/9bZkp7q19f0
edit: hallettim :D
merak eden olursa:
string input = "http://gdata.youtube.com/feeds/api/videos/9bZkp7q19f0"; Match match = Regex.Match(input, @"videos/([A-Za-z0-9\-]+)$"); // Here we check the Match instance. if (match.Success) { // Finally, we get the Group value and display it. string videoid = match.Groups[1].Value; }
-
video id sini linkten ayırmak için 2 tane metod yazdım. birisi string fonksiyonları birisi de regex ile ilgili (yeniharman yardımcı oldu) . belki ilerde işine yarar..
public string GetVideoIDFromVideoUrl(string p) { int tmp1 = 0, tmp2 = 0; if (p == null) return ""; else { if (p.Contains('&') && p != "") { tmp1 = p.IndexOf("v="); tmp2 = p.IndexOf('&', tmp1 + 2); if (tmp1 < 0 && tmp2 < 0) return ""; else return p.Substring(tmp1 + 2, tmp2 - tmp1 - 2); } else { tmp1 = p.IndexOf("v="); if (tmp1 < 0) return ""; else return p.Substring(tmp1 + 2, p.Length - tmp1 - 2); }}} public string GetVideoIDFromVideoUrl2(string p) { // Regexli ifade v?=id şeklinde dönüyor string vid = System.Text.RegularExpressions.Regex.Match(p, @"[\?&]([^=]*)=([^&]*)").Value;
return vid; }Aralarındaki tek var GetVideoIDFromVideoUrl2 metodu v?=.... şeklinde dönderiyor onu da substring fonksiyonlarıyla ilk 3 karakterini silerek halledebilirsin..
unbalanced tarafından 15/Kas/12 00:34 tarihinde düzenlenmiştir -
unbalanced bunu yazdı
Aralarındaki tek var GetVideoIDFromVideoUrl2 metodu v?=.... şeklinde dönderiyor onu da substring fonksiyonlarıyla ilk 3 karakterini silerek halledebilirsin..
video url sini apiden aldığım için v parametresi yok zaten ama sağol yinede zaman ayırdığın için. bu arada verdiğin ilk fonksiyonu uyarlasam benim ilk posta eklediğim regex li çözüme göre gözle görülür bi performans farkı olur mu sence?
-
hocam ağır bi iş yapmıyorsun ki? ama on binlerce linkden id yi ayırt edeceksen
test etmek için stopwatch sınıfını kullanabilirsin. mesela elinde 10 bin link olan bir liste ayarla. fark etmez tek link de olur 10 bin kere for döngüsüyle çağırabilirsin.. bunu iki şekilde de hatta benim yolladığım regex ile deneyerek de yap sürelerini karşılaştır. aşağıdaki linkte bi örnek var
http://www.dotnetperls.com/stopwatch
edit: eski projemden kopyaladım buraya yani daha önce yazılmıştı kod :)
unbalanced tarafından 15/Kas/12 00:45 tarihinde düzenlenmiştir -
150-200 tane url id si alıcak ve 0,1 saniye bile fark etse hızlısını kullanmaktan zarar gelmez :) en iyisi dediğin gibi stopwatch ile test etmek.
-
önemli olan hızlısı değil hocam, stabil çalışanı. şimdi sen gözden kaçırdığın bi hata yaparsan regex farklı değer dönderebilir ya da hiç döndermez.
ama kendi yazdığın kodlarda hatayı ona göre çıkarıp ona göre sonuç dönderebilirsin. 0.1 saniye çok da önemli değil :) mesela entity framework
yavaş çalışıyor ama bana göre diğer sistemlere göre daha stabil ve kolay. o yüzden ado.net kullanacağıma entity framework kullanırım.