ActionScript 3.0 için YouTube Data API : İlk Adımlar

Bu makale harici bir geliştirici tarafından yazılmış ve gönderilmiştir. YouTube API'ları ve Araçları ekibi, zamanı ve uzmanlığı için Martin Legris'e teşekkür ediyor.


Martin Legris
Mart 2008

Giriş

Bu eğiticide, gerçek AS3 kodundan oluşan 10 satırın altındaki son day, week, month veya all_time için YouTube'daki en popüler videoları nasıl alabileceğinizi göstereceğiz. Standart feed'lerden herhangi birini alabilirsiniz:

  • En Çok İzlenenler
  • En Yeni
  • En Çok Tartışılan
  • En Çok Bağlantı Verilenler
  • En Çok Yanıtlananlar
  • En Son Gösterilen
  • En Yüksek Oyu Alanlar
  • En Çok Favorilere Eklenenler
  • Cep telefonları için videolar

Bu örnekte kullanılan kitaplık tamamen yazılmıştır. Yani verileri aldıktan sonra Flash Geliştirme, Flex IDE, Eclipse w/FDT, IntelliJ Idea ve benzeri IDE'lerde otomatik tamamlama özelliğini kullanabilirsiniz.

Önemli Kaynaklar

Başlamadan önce, kullanabileceğiniz kaynakların listesini burada bulabilirsiniz: YouTube API'den alınan verileri kullanmak isteyen AS3 geliştiricisi.

Ayrıntılı bilgi

İlk isteğinizi gönderme

Aşağıdaki kod oldukça iyi yorumlanmıştır. Ancak ayrıntılara girmeden önce işlevleri biraz açıklayacağım. Tüm isteklerin başlangıç noktası YouTubeClient adlı bir sınıftır. Bu ders, aşağıdaki işlemleri gerçekleştirerek erişebileceğiniz bir tektondur:

// first you import it
import ca.newcommerce.youtube.webservice.YouTubeClient;

// then you get a reference to it
var client:YouTubeClient = YouTubeClient.getInstance();

Artık istekte bulunmaya hazırız:

client.getStandardFeed(YouTubeClient.STD_TOP_RATED, 
                                 YouTubeClient.TIME_MONTH,
                                 1, 
                                 10);

Geçen ay en çok oy alan videoları, 1-10 arası sonuçları istedim (Arama başına maksimum 50 sonuç olduğunu unutmayın). Kolay!

Sonuçları kullanma

Peki, bu sonuçlara nasıl erişebilirim? REST türü web hizmeti paradigması eşzamansız olduğundan sonuçlar getirilirken sonuçları durdurmak yerine kodu durdurmak yerine etkinlikleri kullanmak daha kolaydır. Bu durumda, StandardVideoFeedEvent.STANDARD_VIDEO_DATA_RECEIVED etkinliği için bir etkinlik işleyici tanımlamamız gerekir. İşlevimiz, Standart Feed için her yanıt alındığında YouTubeClient işlevimiz aranır.

client.addEventListener(StandardVideoFeedEvent.STANDARD_VIDEO_DATA_RECEIVED, 
                        doVideosReceived);

Aranacak işlev doVideosReceived olacak. Bir parametre (StandardVideoFeedEvent türünde bir değişken) alır. AS3'te bu standart geçerlidir. Bu durumu bildirelim ve aldığımız videolarla ilgili birkaç noktayı izleyelim. Standart çıktıyı izleyeceğiz:

  • videonun başlığı,
  • URL'sini eklemeniz yeterlidir.
  • görüntüleme sayısı,
  • yorum sayısı,
  • video süresini
  • ve yazarın adı.
function doVideosReceived(evt:StandardVideoFeedEvent):void
{
	// get a reference to the feed containing the videos
	var feed:VideoFeed = evt.feed;
	
	// variable to hold each video retreived on the feed
	var video:VideoData;
	
	// iterate through the availabe results
	while(video = feed.next())
	{
		  // trace a newline followed by the video title
		  trace("\nvideo title:"+video.title);
		  
		  // trace the url to use to embed the flash player with this video playing in it..
		  trace("player url:"+video.swfUrl);
		  
		  // the view count
		  trace("viewCount:"+video.viewCount);
		  
		  // the comment count
		  trace("commentCount:"+video.commentCount);
		  
		  // the duration
		  trace("duration:"+video.duration);
		  
		  // the author
		  trace("author:"+video.authors.first().name);
	}
}

Kitaplık ve feed'ler hakkında birkaç not

Neredeyse tüm etkinliklerin .feed mülkü var. Bu kuralın tek istisnası ProfileEvent'dir. Bunun yerine, bu çağrı tarafından döndürülen yalnızca bir kayıt olduğundan .profile özelliği bulunur.

Birçok feed türü vardır. Bunların hepsi aşağıdaki yöntemleri uygular:

  • first() -- İlk kaydı alın ve işaret edin
  • next() -- Uygun olan bir sonraki kaydı al
  • last() -- Son kaydı alın ve işaretleyin
  • previous() -- feed'deki önceki kaydı alın
  • getAt() -- Belirli bir konumda sonuç elde etme
  • count() -- Bu feed için kullanılabilir sonuç sayısı, totalResults ile aynı değil

Sonuçların sonuna geldiğinizde next() boş değer döndürür. Aynı şey, önceki sonuca dönerken ilk sonuca ulaştığınızda previous() ile yapılacak bir sonraki çağrı null içinde dönecek.

Feed'lerin içindeki verilerin (ör.kategoriler) Iterators içine sarmalandığını unutmayın. Bu nedenle, aynı işlevleri mevcut kategoriler arasında gezinmek için kullanabilirsiniz.

Kaynak Kodun Tamamı

Aşağıda bu örneğin tam kaynak kodu bulunmaktadır. Flash CS3 içinde örneği çalıştırmak için ihtiyacınız olan her şeyi içeren bir zip dosyasını indirebilirsiniz, ancak hataları düzeltebilmemiz veya özellikleri güncelleyebilmemiz için en iyisi kitaplığı güncellemektir. Burayı tıklayarak kitaplığı indirebilirsiniz.

package
{
    // first import dependencies (You can be more specific than this if you want)
    import ca.newcommerce.youtube.data.*;
    import ca.newcommerce.youtube.events.*;
    import ca.newcommerce.youtube.feeds.*;
    import ca.newcommerce.youtube.iterators.*;
    import ca.newcommerce.youtube.webservice.YouTubeClient;

    public class ytTest()
    {
        // some class variables
        protected var _ws:YouTubeClient;
        protected var _requestId:Number;

        public function ytTest()
        {
            // now inside of an init function
            _ws = YouTubeClient.getInstance();

            // register to list to the events you are interested in
            _ws.addEventListener(StandardVideoFeedEvent.STANDARD_VIDEO_DATA_RECEIVED, doVideosReceived);

            // do your call.. get the Top Rated videos for the last month
            // results 1 to 10; it returns a requestId
            _requestId = _ws.getStandardFeed(YouTubeClient.STD_TOP_RATED,
                                                YouTubeClient.TIME_MONTH, 
                                                1,
                                                10);
        }

        protected function doVideosReceived(evt:StandardVideoFeedEvent):void
        {

            // get a reference to the feed containing the videos
            var feed:VideoFeed = evt.feed;

            // variable to hold each video retrieved on the feed
            var video:VideoData;

            while(video = feed.next())
            {
                // trace a newline followed by the video title
                trace("\nvideo title:"+video.title);

                // trace the swf URL (used for embedding)
                trace("player url:"+video.swfUrl);

                // the view count
                trace("viewCount:"+video.viewCount);

                // the comment count
                trace("commentCount:"+video.commentCount);

                // the duration
                trace("duration:"+video.duration);

                // the author
                trace("author:"+video.authors.first().name);
             }

        }

    }

}

Sonuç

Bu makalede, buz dağının ucuna neredeyse hiç dokunulmasa da, YouTube Kitaplığı API'yi kullanarak bu kitaplığı kullanmanın ne kadar basit olduğu hakkında iyi bir fikir edinebilirsiniz. Her şeyi tek tek yazmak için zaman harcadım. Bu nedenle, her feed yanıtında hangi verilerin mevcut olduğunu keşfetmek çok kolaydır. Yeni yazma ve yükleme işlevini henüz desteklemiyor ancak kitaplığa katkıda bulunmak istiyorsanız proje sayfasını ziyaret edin.

Yazarın Biyografisi


AUTHORNAME

Martin Legris aktif yazılım geliştirme alanında 12 yıllık bir ödüle sahip. Bugün çoğunlukla kullanıcı arayüzü araştırmalarına odaklanıyor ve en sevdiği araç ActionScript ile Flash'ı oluşturuyor. blog.martinlegris.com adresinden bloguna ve www.newcommerce.ca adresindeki web sitesine (eski olabilir) göz atın.

Creative Commons Lisansı
Bu çalışma, Creative Commons Attribution 3.0 ABD Lisansı kapsamındadır.