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.
- Bu web hizmetlerini kullanmak için geliştirdiğim AS3 Kitaplığı
- Resmi YouTube Veri API'si Dokümanları
- AS3 için FlashGeliştirme IDE
- YouTubeClient'ta istek isteğinin tetiklendiği etkinliklerin listesi
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 edinnext()-- Uygun olan bir sonraki kaydı allast()-- Son kaydı alın ve işaretleyinprevious()-- feed'deki önceki kaydı alıngetAt()-- Belirli bir konumda sonuç elde etmecount()-- Bu feed için kullanılabilir sonuç sayısı,totalResultsile 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
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.
Bu çalışma, Creative Commons Attribution 3.0 ABD Lisansı kapsamındadır.