Youtube’daki videolarınızı windows tabanlı C# uygulamanıza entegre etmek istiyorsanız, Google API bilmek yada ilgili youtube SDK’yı kodumuza dahil etmek zorunda değiliz. Google API çok zor gelince kendime kolay yollar aramaya başladım.

Anahtar Linkimiz: http://gdata.youtube.com/feeds/api/users/username/favorites

Username kısmına youtube kullanıcı adınızı yazıyorsunuz ve bu link sizi kod tabanlı olarak favori videolarınıza ulaştırıyor. Kodu incelerseniz youtube video linklerini, ve listede bulunacak videoların thumbnail imaj linklerini görebilirsiniz.

İşin güzel tarafı youtube’a login olma gibi bir gerekliliğinizin olmaması.

Projeye dahil edilecek referanslar;

using System.IO;
using System.Net;

Yukarıdaki linki internetten çekip C#’ta işlememiz için, veriyi web’ten request edip, bir veri akışıyla alıp, daha sonrada bir reader nesnesine yerleştireceğiz. En sonunda da bu veriyi string’e atıp üstünde çalışacağız. Bunu her seferinde adım adım yapmaktansa bir fonksiyona yerleştiriyorum.

public string DownloadWebPage(string Url)
    {
    // Bağlantıyı Aç
    HttpWebRequest WebRequestObject = (HttpWebRequest)HttpWebRequest.Create(Url);

    // Sunucudan cevap iste
    WebResponse Response = WebRequestObject.GetResponse();

    // Veri akışı yarat
    Stream WebStream = Response.GetResponseStream();
    StreamReader Reader = new StreamReader(WebStream);
    string PageContent = Reader.ReadToEnd();

    // Tuvaletin ışığını kapat
    Reader.Close();
    WebStream.Close();
    Response.Close();

    return PageContent;
    }

Diğer ayrıntılara dalmadan önce pencere tasarımını anlamak lazım.Sol tarafta geri butonu projenin diğer özellikleriyle ilgili onu geçiyoruz. Amaç pencere açıldığında youtube arkaplanlı butonların arkaplan resimlerinin benim favori videolarımın thumbnail’leriyle görünmesi. Bu butonlara tıklandığında da sağ taraftaki webbrowser kontrolde ilgili video linkinin açılıp izlenebilmesi. ortadaki listbox sadece benim amalecoding’imle ilgili birşey. o listbox’a favori videolarımın video id’lerini sırayla koyuyorum ordan da butonlara taşıyorum. Amelecoding yapmayıp listbox yerine array’de kullanabilirdim. Ama alışkanlık işte. Neyse kısacası o listbox visible özelliği false durumda webbrowser’ın arkaplanlarında bir yerlerde gizli.

Bütün olay sayfa’nın load olayında oluyor bitiyor. Direk kodu yapıştırıyorum;

 private void youtube_Load(object sender, EventArgs e)
        {

            int index = 0;
            string id = "";
            string icerik = DownloadWebPage("http://gdata.youtube.com/feeds/api/users/KULLANICIADI/favorites");

            for (int k = 0; k < 7; k++)
            {
                try
                {
                    int baslangic = icerik.IndexOf(@"<media:player url='http://www.youtube.com/watch?v=", index);
                    index = baslangic;
                    int bitis = icerik.IndexOf(@"&amp;feature=youtube_gdata", index);
                    index = bitis;

                    id = icerik.Substring(baslangic + 50, bitis - baslangic - 50);

                    listBox1.Items.Add(id);
                }
                catch
                { }
            }

            WebClient indir = new WebClient();

            for (int k = 0; k < listBox1.Items.Count; k++)
            {
                indir.DownloadFile("http://i.ytimg.com/vi/" + listBox1.Items[k] + "/0.jpg", k+".jpg");

                if (k == 0 && k < listBox1.Items.Count)
                {
                    button1.BackgroundImage = Image.FromFile(k + ".jpg");
                    button1.Enabled = true;
                }

                if (k == 1 && k < listBox1.Items.Count)
                {
                    button2.BackgroundImage = Image.FromFile(k + ".jpg");
                    button2.Enabled = true;
                }

                if (k == 2 && k < listBox1.Items.Count)
                {
                    button3.BackgroundImage = Image.FromFile(k + ".jpg");
                    button3.Enabled = true;
                }

                if (k == 3 && k < listBox1.Items.Count)
                {
                    button4.BackgroundImage = Image.FromFile(k + ".jpg");
                    button4.Enabled = true;
                }

                if (k == 4 && k < listBox1.Items.Count)
                {
                    button5.BackgroundImage = Image.FromFile(k + ".jpg");
                    button5.Enabled = true;
                }

            }

        }

Üst kısımda downloadwebpage fonksiyonuyla favori video sayfasının içeriğini olduğu gibi stream’e alıyoruz. Ardından da biraz deneme yanılmayla link id’lerini alıyorum. video id’sini alırsam gerisi kolay. O yüzden tek amacım video id’sini almak. Yukarıda da tek yaptığım video id’sini almak, aldığım video id’ye göre listbox’ı bu id’lerle doldurmak, ve butonların arkaplanınıda bu video id’lerinin thumbnail’leriyle doldurmak.

Bir videonun id’sini biliyorsak, ki diyelim ki bu videonun id’si 1234567 olsun. O videonun 90×45 mi ne thumbnail resmini almak istiyorsanız linki şudur; http://i.ytimg.com/vi/1234567/0.jpg

Eğer büyük boy resmini istiyorsanız o da; http://i.ytimg.com/vi/1234567/1.jpg

 private void listBox1_Click(object sender, EventArgs e)
        {
            webBrowser1.Navigate("http://www.youtube.com/embed/" + listBox1.SelectedItem.ToString());
        }

Butonun arkaplanını thumbnail resmiyle doldurduk. Şimdi de sıra ona tıklayınca webbrowser kontrolden ilgili linke yönlendirip video oynatabilmemizi sağlayacak senaryoya geldi. İşte o da yukarıda yazdığım kodla oluyor. Video id’sini bildiğiniz videoyu sağda solda reklamlarından oyundan şuyudun buyundan arınmış bir şekilde oynatmanın en güzel yolu embed özelliğini kullanmak. Her videonun embed linki şudur ki ;

https://youtube.com/watch?v=video_id

Bu arada yukarıda anlatmadığım bir ayrıntı var, basitçe söyleyeyim, web’ten linkini bildiğiniz resmi takatanak buton komponentinin arkaplanı olarak ayarlayamıyoruz. O yüzden önce imajı internetten indiriyorum sonra local’de bir klasöre koyuyorum sonra da isimlendirdikten sonra direk local ismiyle kullanıyorum. Kodu incelerseniz durum kolaylıkla farkedilir.

Youtube API falan kullanmadan, kullanıcı authentication’ı webpostu mostu kullanmadan basit ama etkili bir favori video izleyicisi.