API dữ liệu YouTube cho MRSS 3.0 : Các bước đầu tiên

Đây là bài viết của một nhà phát triển bên ngoài. Nhóm Công cụ và API YouTube cảm ơn Martin Legris về thời gian và chuyên môn của ông.


Martin Legris
Tháng 3 năm 2008

Giới thiệu

Trong hướng dẫn này, tôi sẽ hướng dẫn bạn cách thực hiện với dưới 10 dòng mã AS3 thực tế, bạn có thể truy xuất các video phổ biến nhất trên YouTube cho day, week, month hoặc all_time cuối cùng. Bạn có thể lấy bất kỳ nguồn cấp dữ liệu chuẩn nào:

  • Nhiều người xem nhất
  • Gần đây Nhất
  • Được thảo luận nhiều nhất
  • Được liên kết Nhiều nhất
  • Được phản hồi Nhiều nhất
  • Nổi bật Gần đây
  • Có điểm xếp hạng cao nhất
  • Được yêu thích nhất
  • Video cho điện thoại di động

Thư viện sử dụng trong ví dụ này được nhập cứng trong suốt, nghĩa là sau khi nhận được dữ liệu, bạn có thể sử dụng tính năng tự động hoàn tất trong các IDE như FlashDevelop, IDE Flex, Eclipse w/FDT, IntelliJ Idea và các nền tảng khác.

Tài nguyên quan trọng

Trước khi chúng ta bắt đầu, đây là danh sách tài nguyên dành cho bạn, tức là nhà phát triển AS3, quan tâm đến việc sử dụng dữ liệu từ API YouTube.

Đào sâu

Đưa ra yêu cầu đầu tiên

Mã bạn theo dõi khá bình luận. Tuy nhiên, tôi sẽ mô tả chức năng này một chút trước khi tìm hiểu sâu hơn. Điểm bắt đầu cho tất cả các yêu cầu là một lớp có tên là YouTubeClient. Lớp này là một singleton mà bạn có quyền truy cập để thực hiện những thao tác sau:

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

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

Bây giờ, chúng tôi đã sẵn sàng đưa ra yêu cầu:

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

Tôi vừa yêu cầu những video được xếp hạng cao nhất trong tháng trước, kết quả là 1 đến 10 (lưu ý rằng có tối đa 50 kết quả cho mỗi cuộc gọi). Thật dễ dàng!

Xử lý kết quả

Bây giờ, làm cách nào để tôi truy cập vào các kết quả này? Vì mô hình dịch vụ web loại REST không đồng bộ, nên sẽ dễ dàng hơn khi sử dụng các sự kiện để xử lý kết quả thay vì tạm dừng mã trong khi tìm nạp kết quả. Trong trường hợp này, chúng ta cần khai báo trình nghe sự kiện cho sự kiện StandardVideoFeedEvent.STANDARD_VIDEO_DATA_RECEIVED. Hàm của chúng ta sẽ được gọi mỗi khi YouTubeClient nhận được phản hồi cho một Nguồn cấp dữ liệu tiêu chuẩn.

client.addEventListener(StandardVideoFeedEvent.STANDARD_VIDEO_DATA_RECEIVED, 
                        doVideosReceived);

Hàm cần gọi sẽ là doVideosReceived. Phương thức này sẽ nhận được một tham số, một biến thuộc loại StandardVideoFeedEvent. Điều này tuân theo tiêu chuẩn trong AS3. Chúng ta hãy khai báo và làm cho nó theo dõi một vài điều liên quan đến video chúng ta đã nhận được. Chúng tôi sẽ theo dõi đầu ra tiêu chuẩn:

  • tiêu đề của video,
  • URL của SWF để nhúng video,
  • số lượt xem,
  • số lượng nhận xét,
  • thời lượng video,
  • và tên tác giả.
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);
	}
}

Một số lưu ý về thư viện và nguồn cấp dữ liệu

Hầu hết sự kiện đều có một tài sản .feed. ProfileEvent là một ngoại lệ. Thuộc tính này có một thuộc tính .profile vì chỉ có một bản ghi được lệnh gọi lại trả về.

Có nhiều loại nguồn cấp dữ liệu – tất cả đều triển khai các phương thức sau:

  • first() -- truy xuất bản ghi đầu tiên và trỏ vào bản ghi đó
  • next() -- truy xuất bản ghi sẵn có tiếp theo
  • last() -- truy xuất bản ghi cuối cùng và trỏ vào bản ghi đó
  • previous() -- truy xuất bản ghi trước trên nguồn cấp dữ liệu
  • getAt() -- nhận kết quả tại một vị trí cụ thể
  • count() -- số lượng kết quả có sẵn cho nguồn cấp dữ liệu này, không giống với totalResults

Khi bạn xem đến cuối kết quả, next() sẽ trả về giá trị null. Tương tự như trước, khi bạn nhận được kết quả đầu tiên, lệnh gọi tiếp theo tới previous() sẽ trả về null.

Lưu ý rằng dữ liệu bên trong nguồn cấp dữ liệu (ví dụ: các danh mục) được gói bên trong Iterators, vì vậy bạn có thể sử dụng cùng các chức năng để xem qua các danh mục có sẵn.

Hoàn tất mã nguồn

Sau đây là mã nguồn đầy đủ của ví dụ này. Bạn có thể tải tệp zip chứa mọi thứ bạn cần để chạy ví dụ bên trong Flash CS3. Tuy nhiên, tốt nhất là bạn nên cập nhật thư viện trong trường hợp chúng tôi đã sửa lỗi hoặc cập nhật tính năng. Bạn có thể tải thư viện xuống bằng cách nhấp vào đây.

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);
             }

        }

    }

}

Kết luận

Mặc dù bài viết này hầu như không đề cập đến mẹo về cột băng trôi, nhưng sẽ giúp bạn hiểu đơn giản về việc truy vấn API dữ liệu của YouTube bằng thư viện này. Vì tôi đã dành thời gian để nhập dữ liệu mọi thứ, nên tôi rất dễ dàng khám phá những dữ liệu có sẵn trong mỗi ý kiến phản hồi về nguồn cấp dữ liệu. Tính năng này chưa hỗ trợ chức năng ghi và tải lên mới, nhưng nếu bạn muốn đóng góp cho thư viện, hãy truy cập vào trang dự án.

Tiểu sử tác giả


AUTHORNAME

Martin Legris tự hào có 12 năm phát triển phần mềm tích cực. Hiện tại, ông tập trung chủ yếu vào nghiên cứu giao diện người dùng và công cụ yêu thích của ông là Flash với Flash. Hãy xem blog của anh ấy tại blog.martinlegris.com và trang web (có thể đã lỗi thời) tại www.newcommerce.ca.

Giấy phép Creative Commons
Công việc này được cấp phép theo Giấy phép ghi công theo Creative Commons 3.0 tại Hoa Kỳ.