Đâ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.
- Thư viện AS3 mà tôi phát triển để sử dụng những dịch vụ web này
- Tài liệu về API Dữ liệu chính thức của YouTube
- IDE Phát triển IDE cho AS3
- Danh sách các sự kiện được kích hoạt theo lệnh gọi thực hiện trên YouTubeClient
Đà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 theolast()
-- 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ệugetAt()
-- 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ớitotalResults
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ả
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.
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ỳ.