Artikel ini ditulis dan dikirimkan oleh developer eksternal. Tim Alat dan API YouTube berterima kasih kepada Martin Legris atas waktu dan keahliannya.
Martin Legris
Maret 2008
Pengantar
Dalam tutorial ini, kami akan menunjukkan kepada Anda cara, dengan kurang dari 10 baris kode AS3 yang sebenarnya, Anda dapat mengambil video paling populer di YouTube untuk day
, week
, month
, atau all_time
terakhir. Anda dapat memperoleh salah satu feed standar:
- Paling Banyak Ditonton
- Terbaru
- Paling Banyak Dibahas
- Paling Sering Ditautkan
- Paling Banyak Ditanggapi
- Yang Baru Diunggulkan
- Peringkat Teratas
- Difavoritkan Paling Atas
- Video untuk ponsel
Library yang digunakan dalam contoh ini diketik lama, artinya setelah menerima data, Anda dapat menggunakan fitur pelengkapan otomatis di IDE seperti FlashDevelop, Flex IDE, Eclipse w/FDT, IntelliJ Idea, dan banyak lagi.
Referensi Penting
Sebelum kita mulai, berikut adalah daftar resource yang tersedia untuk Anda - developer AS3 yang tertarik menggunakan data dari YouTube API.
- Library AS3 yang saya kembangkan untuk menggunakan layanan web ini
- Dokumentasi YouTube Data API Resmi
- FlashDevelop IDE untuk AS3
- Daftar peristiwa yang diaktifkan oleh panggilan permintaan yang dilakukan di YouTubeClient
Menggali Lebih Dalam
Membuat permintaan pertama
Kode berikut mengikuti komentar dengan cukup baik. Namun, saya akan menjelaskan fungsinya sebelum mempelajarinya lebih lanjut. Titik awal untuk semua permintaan adalah class yang disebut YouTubeClient
. Class ini merupakan singleton yang dapat Anda akses dengan melakukan hal berikut:
// first you import it import ca.newcommerce.youtube.webservice.YouTubeClient; // then you get a reference to it var client:YouTubeClient = YouTubeClient.getInstance();
Sekarang kita siap untuk membuat permintaan:
client.getStandardFeed(YouTubeClient.STD_TOP_RATED, YouTubeClient.TIME_MONTH, 1, 10);
Saya baru saja meminta video dengan rating tertinggi selama sebulan terakhir, dengan hasil 1 hingga 10 (perhatikan bahwa ada maksimum 50 hasil per panggilan). Mudah!
Menangani hasil
Sekarang, bagaimana cara mengakses hasil ini? Karena paradigma jenis REST layanan bersifat asinkron, sehingga peristiwa lebih mudah digunakan untuk menangani hasilnya daripada menghentikan kode saat hasilnya diambil. Dalam hal ini, kita perlu mendeklarasikan pemroses peristiwa untuk peristiwa StandardVideoFeedEvent.STANDARD_VIDEO_DATA_RECEIVED
. Fungsi kita akan dipanggil setiap kali YouTubeClient
menerima respons untuk Feed Standar.
client.addEventListener(StandardVideoFeedEvent.STANDARD_VIDEO_DATA_RECEIVED, doVideosReceived);
Fungsi yang akan dipanggil adalah doVideosReceived
. Ini akan membutuhkan satu parameter, yaitu variabel jenis StandardVideoFeedEvent
. Hal ini mengikuti standar di AS3. Kami akan mendeklarasikannya, dan membuatnya melacak beberapa hal terkait video yang kami terima. Kita akan melacak ke output standar:
- judul video,
- URL SWF untuk menyematkan video,
- jumlah penayangan,
- jumlah komentar,
- durasi video,
- dan nama penulis.
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); } }
Beberapa catatan tentang library & amp; feed
Hampir semua peristiwa memiliki properti .feed
. ProfileEvent
adalah satu-satunya pengecualian, tetapi memiliki properti .profile
, karena hanya ada satu data yang ditampilkan oleh panggilan ini.
Ada banyak jenis feed - semuanya mengimplementasikan metode berikut:
first()
-- mengambil data pertama dan mengarahkannyanext()
-- mengambil data berikutnya yang tersedialast()
-- mengambil data terakhir dan mengarahkannya ke data tersebutprevious()
-- mengambil data sebelumnya di feedgetAt()
-- mendapatkan hasil di posisi tertentucount()
-- jumlah hasil yang tersedia untuk feed ini, tidak sama dengantotalResults
Saat Anda mencapai akhir hasil, next()
akan menampilkan null. Hal yang sama untuk sebelumnya, setelah Anda mencapai hasil pertama, panggilan berikutnya ke previous()
akan menampilkan null
.
Perlu diketahui bahwa data di dalam feed (misalnya, kategori) digabungkan di dalam Iterators
, sehingga Anda dapat menggunakan fungsi yang sama untuk memandu melalui kategori yang tersedia.
Kode Sumber Lengkap
Berikut adalah kode sumber lengkap untuk contoh ini. Anda dapat mendownload zip yang berisi semua hal yang Anda perlukan untuk menjalankan contoh di dalam Flash CS3, tetapi sebaiknya perbarui library jika kami telah memperbaiki bug atau mengupdate fitur. Anda dapat mendownload koleksi tersebut dengan mengklik di sini.
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); } } } }
Kesimpulan
Meskipun artikel ini hampir tidak menyentuh ujung gunung es, artikel ini akan memberi Anda gambaran tentang seberapa mudah melakukan kueri YouTube Data API menggunakan library ini. Karena saya telah meluangkan waktu untuk mengetikkan semuanya, begitulah mudah untuk menjelajahi data apa yang tersedia di setiap respons feed. Fitur ini belum mendukung fungsi penulisan dan upload yang baru, tetapi jika Anda ingin berkontribusi ke library, buka halaman project.
Biografi Penulis
Martin Legris memiliki 12 tahun pengembangan software aktif. Sekarang, ia berfokus pada penelitian antarmuka pengguna dan alat favoritnya adalah Flash dengan WebGL. Lihat blog miliknya di blog.martinlegris.com dan situsnya (bisa usang) di www.newcommerce.ca.
Karya ini dilisensikan berdasarkan Lisensi Creative Commons Attribution 3.0 Amerika Serikat.