Video sitelerinden video bilgilerini çekme

Video sitelerindeki videoları kendi videonuz gibi sitenizde yayınlayabilirsiniz..:)

Öncelikle belirtmek isterim ki, kodlar tamamen bana aittir. Bu kodları kullanmak isterseniz dilediğiniz gibi kullanmak ve değiştirmek hakkına sahipsiniz ancak daltinkurt@hotmail.com adresine bu kodları kullandığınıza dair bir bilgilendirici eposta atmak vicdani yükümlülüğünüz bulunmaktadır.

Hazırladığım örnek projeyi web üzerinden direkt çalıştırmak için buraya tıklayabilirsiniz.

Video sitelerinin uyması gereken bazı kriterler vardır. Bunlardan birisi de video hakkındaki bilgileri bir şekilde sunmaktır. Bir şekilde diyorum çünkü birden fazla yolu vardır. Ben de yazdığım bir class aracılığyla sitenin hangi yolla bilgiyi sunduğunu tespit ediyorum ve sunduğu bilgileri bir info classına aktarıp dilediğim gibi ana kodlarımda kullanıyorum.

Böylece çok rahat bir şekilde video galerisi hazırlayabiliyorum. Tek yaptığım, veritabanımda video ile ilgil bilgileri tutmak. Video hostingten ve inanılmaz boyutlara ulaşabilecek trafikten kurtuluyorum. 

Ne dersiniz, iyi fikir değil mi?

Kodları Youtube, Zapkolik, Siz.net, Vidivodo, Mynet, Zapkolik, Dailymotion, İzlesene.com, vd. tüm popüler video sitelerinde denedim, sorunsuz çalışıyor. Zaten örnek uygulamada da tüm sitelerden birer örnek görebilirsiniz.

Şimdi gelelim video bilgisine nasıl erişebileceğimize.

Örnek olara http://www.youtube.com/watch?v=_hcTUuzHlvM sayfasının kodlarını inceleyelim.

Eğer meta taglar arasında şuna benzer kodlar görürseniz işimiz kolay:

<link rel="alternate" type="application/json+oembed" href="http://www.youtube.com/oembed?url=http%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3D_hcTUuzHlvM&amp;format=json" title="Ugly Kid Joe - Cats In The Cradle">
  <link rel="alternate" type="text/xml+oembed" href="http://www.youtube.com/oembed?url=http%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3D_hcTUuzHlvM&amp;format=xml" title="Ugly Kid Joe - Cats In The Cradle">

json ve xml formatında direkt olarak video ile ilgili bilgilere erişebiliriz. 

http://www.youtube.com/oembed?url=http%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3D_hcTUuzHlvM&amp;format=xml

veya

http://www.youtube.com/oembed?url=http%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3D_hcTUuzHlvM&amp;format=json

linkini açtığımızda bilgilerin karşımızda olduğunu göreceksiniz.

<?xml version="1.0" encoding="utf-8"?>
<oembed>
  <provider_url>http://www.youtube.com/</provider_url>
  <thumbnail_url>http://i4.ytimg.com/vi/_hcTUuzHlvM/hqdefault.jpg</thumbnail_url>
  <title>Ugly Kid Joe - Cats In The Cradle</title>
  <html>&lt;iframe width="459" height="344" src="http://www.youtube.com/embed/_hcTUuzHlvM?fs=1&amp;feature=oembed" frameborder="0" allowfullscreen&gt;&lt;/iframe&gt;</html>
  <author_name>Darwin Adler</author_name>
  <height>344</height>
  <thumbnail_width>480</thumbnail_width>
  <width>459</width>
  <version>1.0</version>
  <author_url>http://www.youtube.com/user/DarknessAdler</author_url>
  <provider_name>YouTube</provider_name>
  <type>video</type>
  <thumbnail_height>360</thumbnail_height>
</oembed>

XML'den okumak kolay, json formatındaki bilgileri okumak için de JSON parser kullanabiliriz. (Ben Newtonsoft.Json.dll'yi kullandım)

Eğer bilgiler bu şekilde sunulmuyorsa o zaman og: ile başlayan meta taglar var mı diye bakıyoruz.

Yine yukarıda verdiğim linkteki sayfa kaynağına tekrar göz atacak olursak aşağıdaki tanımlamaların olduğunu göreceğiz

<meta property="og:url" content="http://www.youtube.com/watch?v=_hcTUuzHlvM">
<meta property="og:title" content="Ugly Kid Joe - Cats In The Cradle">
<meta property="og:description" content=" ">
<meta property="og:type" content="video">
<meta property="og:image" content="http://i4.ytimg.com/vi/_hcTUuzHlvM/mqdefault.jpg">
<meta property="og:video" content="http://www.youtube.com/v/_hcTUuzHlvM?version=3&amp;autohide=1">
<meta property="og:video:type" content="application/x-shockwave-flash">
<meta property="og:video:width" content="480">
<meta property="og:video:height" content="360">
<meta property="og:site_name" content="YouTube">

Regular Expression ile bu bilgileri rahatlıkla parse edebiliriz.

Eğer og: ile başlayan meta tag da yoksa o zaman o siteden video çekmeyiz olur biter. :)

Örnek çıktı:

Video Çek

Yazdığım sınıfı aşağıdaki linkten indirip inceleyebilirsiniz.

Ben kullanımına örnek vermek istiyorum:

try
{
    string url = "http://www.youtube.com/watch?v=_hcTUuzHlvM";

    VideoDB vDB = new VideoDB();

    vDB.VideoGetir(url);

    if (vDB.Video == null)
        throw new Exception("Video bulunamadı");

    if (string.IsNullOrEmpty(vDB.Video.Html))
        throw new Exception("Video bulunamadı");

    imgVideoOnizleme.ImageUrl = vDB.Video.Thumbnail;
    lblVideoTitle.Text = vDB.Video.Title;
    lblVideoDescription.Text = vDB.Video.Description;
    lblHtml.Text = vDB.Video.Html;
    lblProvider.Text = vDB.Video.Provider;
    lblProviderUrl.Text = vDB.Video.ProviderUrl;
    lblType.Text = vDB.Video.Type;
}
catch (Exception)
{
// bilgilere erişelemedi
}

Gördüğünüz üzere video bilgilerine başarıyla erişildiyse VideoInfo class ı üzerinden bu bilgilere erişebiliyoruz.

Sınıfı da göstereyim:

public class VideoInfo
{
    public string Thumbnail { get; set; }
    public string Title { get; set; }
    public string Html { get; set; }
    public string Video { get; set; }
    public string Provider { get; set; }
    public int Height { get; set; }
    public int Width { get; set; }
    public string Description { get; set; }
    public string ProviderUrl { get; set; }
    public string Type { get; set; }
    public string Url { get; set; }
}

Örnek projeyi indirmek için buraya tıklayınız.

Web üzerinden direkt çalıştırmak için buraya tıklayabilirsiniz.

İlgili linkler: