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'ler ve Araçlar ekibi, zamanı ve uzmanlığı için Martin Legris'e teşekkür ediyor.


Martin Legris
Mart 2008

Giriş

Bu eğiticide, 10 satırdan az gerçek AS3 koduyla son day, week, month veya all_time içinde YouTube'daki en popüler videoları nasıl alabileceğinizi göstereceğim. Standart feed'lerin herhangi birini alabilirsiniz:

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

Bu örnekte kullanılan kütüphane genele sabitlenmiştir. Yani, verileri aldıktan sonra FlashDevelop, Flex IDE, Eclipse w/FDT, IntelliJ Idea ve diğer IDE'lerde otomatik tamamlama özelliğini kullanabilirsiniz.

Önemli Kaynaklar

Başlamadan önce, YouTube API'deki verileri kullanmak isteyen AS3 geliştiricileri için kullanabileceğiniz kaynakların listesini burada bulabilirsiniz.

Derinlemesine İnceleme

İlk isteğinizi gönderme

Aşağıdaki kodda oldukça iyi yorumlar yapılmıştır. Ancak ayrıntılara girmeden önce işlevi biraz açıklayacağım. Tüm istekler için başlangıç noktası YouTubeClient adında bir sınıftır. Bu sınıf, aşağıdakileri yaparak erişebileceğiniz bir tekil sınıftır:

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

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

Artık istek göndermeye hazırız:

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

Son bir ayda en yüksek puan alan videoları 1 ile 10 arasındaki sonuçlar olarak istedim (çağrı başına en fazla 50 sonuç alınabileceğini unutmayın). Kolay!

Sonuçları işleme

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

client.addEventListener(StandardVideoFeedEvent.STANDARD_VIDEO_DATA_RECEIVED, 
                        doVideosReceived);

Çağrılacak fonksiyon doVideosReceived olacaktır. StandardVideoFeedEvent türündeki bir değişken olan tek bir parametre alır. Bu, AS3'teki standarda uygundur. Bunu beyan edelim ve aldığımız videolarla ilgili birkaç şeyi takip edelim. Standart çıkışa kadar izleyeceğiz:

  • başlığını veya
  • videoyu yerleştirecek SWF'nin URL'sini,
  • görüntüleme sayısını,
  • yorum sayısını,
  • video süresi,
  • ve yazarın adını girin.
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'lerle ilgili birkaç not

Neredeyse tüm etkinliklerin .feed mülkü vardır. ProfileEvent ise tek istisnadır. Bu çağrı tarafından döndürülen yalnızca bir kayıt olduğu için bunun yerine bir .profile özelliği vardır.

Birçok feed türü vardır ve bunların tümü aşağıdaki yöntemleri uygular:

  • first() -- ilk kaydı alır ve bunun üzerine gelin
  • next() -- Sonraki kullanılabilir kaydı al
  • last() -- son kaydı al ve işarete getir
  • previous(): Feed'deki önceki kaydı alır.
  • getAt() -- Belirli bir konumda sonuç al
  • count() -- Bu feed için mevcut sonuçların sayısı, totalResults ile aynı değildir

Sonuçların sonuna geldiğinizde next(), null değerini döndürür. Önceki için de aynı şey geçerlidir. İlk sonuca ulaştığınızda previous() için yapılan bir sonraki çağrı null sonucunu döndürür.

Feed'lerin (ör.kategoriler) içindeki verilerin Iterators içine sarıldığını unutmayın. Bu sayede, aynı işlevleri kullanarak mevcut kategorilerde gezinebilirsiniz.

Tam Kaynak Kodu

Aşağıda, bu örnek için tam kaynak kodu verilmiştir. Flash CS3 içindeki örneği çalıştırmak için ihtiyacınız olan her şeyi içeren bir ZIP indirebilirsiniz ancak hataları düzeltmemiz veya özellikleri güncellememiz ihtimaline karşı kitaplığı güncellemeniz en iyisidir. 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 makale, buz dağının ucuna çok az değinse de, bu kitaplığı kullanarak YouTube Data API'yi sorgulamanın ne kadar kolay olduğu konusunda size bir fikir verecektir. Her şeyi ayrıntılı bir şekilde yazmak için zaman harcadım. Bu nedenle, her feed yanıtında hangi verilerin sunulduğunu öğrenmek çok kolay. Henüz yeni yazma ve yükleme işlevini desteklemiyor ancak kitaplığa katkıda bulunmak istiyorsanız proje sayfasını ziyaret edin.

Yazar Biyografisi


AUTHORNAME

Martin Legris 12 yıllık aktif yazılım geliştirme becerisine sahip. Şu anda çoğunlukla kullanıcı arayüzü araştırmalarına odaklanan Tim'in en sevdiği araç ActionScript ile Flash'tır. blog.martinlegris.com adresindeki bloguna ve www.newcommerce.ca adresindeki web sitesine (güncel olmayabilir) göz atın.

Creative Commons Lisansı
Bu çalışma, Creative Commons Attribution 3.0 ABD Lisansı ile lisanslanmıştır.