Categories: Yazılım

YouTube’daki Favori Videolarınıza C#.NET ile Ulaşıp Görüntüleme

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 ;

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.

burakalakus

View Comments

Recent Posts

Geeklink Homekit Entegrasyonu

Geeklink Homekit Entegrasyonu Read More

5 sene ago

Linux Timezone Değiştirme (RHEL / CentOS)

Linux Timezone değiştirme işlemini komut satırından kolaylıkla yapabilirsiniz. Tüm bölgeler için timezone bilgileri /usr/share/zoneinfo/ altında saklanır. /etc/localtime ise zoneinfo altındaki… Read More

5 sene ago

Avaya SAL Gateway

Avaya SAL Gateway (Secure Access Link), Avaya tarafından ürünlerine uzaktan destek vermek için kullanılan bir uzak bağlantı çözümü. Read More

5 sene ago

Fping Komutu ve Kullanımı

Ping, işletim sisteminden bağımsız en çok kullandığımız komutlardan biri. Ağ erişim problemlerinde sorunu izole etmeden tutun da bir cihazın çalışıp… Read More

5 sene ago

Manchester Kodlaması Nedir?

Haberleşme birden fazla paydaş gerektirir ve tıpkı bir orkestra gibi uyumlu olması şarttır. Nasıl müzikte bas gitar davul "kick"iyle uyumlu… Read More

5 sene ago

SSH Key ile Şifresiz ve Güvenli Sunucu Erişimi

Bilgi işlem sektöründeyseniz özellikle gün içinde bir çok farklı Linux/Unix sunucuya erişiminiz varsa şifre hatırlamak, bunları saklamak, hem zulüm hem… Read More

7 sene ago