Artikel ini ditulis dan dikirim oleh developer eksternal. Tim Alat dan API YouTube mengucapkan terima kasih kepada Martin Legris atas waktu dan keahliannya.
Martin Legris
Maret 2008
Pengantar
Dalam tutorial ini, saya akan menunjukkan caranya, dengan kurang dari 10 baris kode AS3 aktual, Anda dapat mengambil video terpopuler di YouTube selama day, week, month, atau all_time terakhir. Anda bisa mendapatkan 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 ditulis dengan keras secara keseluruhan, artinya setelah menerima data, Anda dapat menggunakan fitur penyelesaian otomatis di IDE seperti FlashDevelop, Flex IDE, Eclipse w/FDT, IntelliJ Idea, dan banyak lagi.
Referensi Penting
Sebelum memulai, berikut adalah daftar referensi yang tersedia untuk Anda - developer AS3 yang tertarik untuk menggunakan data dari YouTube API.
- Library AS3 yang saya kembangkan untuk menggunakan layanan web ini
- Dokumentasi Resmi YouTube Data API
- FlashDevelop IDE untuk AS3
- Daftar peristiwa yang diaktifkan oleh panggilan permintaan yang dilakukan di YouTubeClient
Menggali Lebih Dalam
Membuat permintaan pertama Anda
Kode yang mengikutinya cukup baik diberi komentar. Namun, saya akan menjelaskan fungsinya sedikit sebelum membahasnya lebih lanjut. Titik awal untuk semua permintaan adalah class yang disebut YouTubeClient. Class ini adalah singleton yang aksesnya Anda dapatkan 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 bulan lalu, hasil 1 hingga 10 (perhatikan bahwa ada maksimum 50 hasil per panggilan). Mudah!
Menangani hasil
Sekarang, bagaimana cara mengakses hasil ini? Karena paradigma webservice jenis REST bersifat asinkron, akan lebih mudah untuk menggunakan peristiwa guna menangani hasilnya, bukan 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. Tindakan ini akan mengambil satu parameter, variabel jenis StandardVideoFeedEvent. Hal ini mengikuti standar di AS3. Mari kita deklarasikan, dan buat kode tersebut melacak beberapa hal terkait video yang kita terima. Kita akan melacak output standar:
- judul video,
- URL SWF untuk menyematkan video,
- jumlah penayangan,
- jumlah komentar,
- durasi video,
- dan nama penulisnya.
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 & feed
Hampir semua acara memiliki properti .feed. ProfileEvent adalah satu-satunya pengecualian. Kode ini memiliki properti .profile, karena hanya ada satu data yang ditampilkan oleh panggilan ini.
Ada banyak jenis feed, semuanya menerapkan metode berikut:
first()-- mengambil data pertama dan mengarahkannya ke data tersebutnext()-- mengambil data yang tersedia berikutnyalast()-- mengambil data terakhir dan mengarah 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 sampai ke akhir hasil, next() menampilkan null. Hal yang sama berlaku untuk sebelumnya, setelah Anda mencapai hasil pertama, panggilan berikutnya ke previous() akan menampilkan null.
Perhatikan bahwa data di dalam feed (mis. kategori) digabungkan di dalam Iterators, sehingga Anda dapat menggunakan fungsi yang sama untuk menelusuri berbagai kategori yang tersedia.
Kode Sumber Lengkap
Berikut adalah kode sumber lengkap untuk contoh ini. Anda dapat mendownload zip yang berisi semua yang Anda perlukan untuk menjalankan contoh di dalam Flash CS3. Namun, sebaiknya perbarui library jika kami memperbaiki bug atau memperbarui fitur. Anda dapat mendownload library 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 hanya membahas sebagian kecil, artikel ini akan memberi Anda gambaran yang baik tentang betapa mudahnya membuat kueri YouTube Data API menggunakan library ini. Karena saya telah meluangkan waktu untuk mengetik semua data dengan mudah, mudah untuk mempelajari data yang tersedia di setiap respons feed. Library ini belum mendukung fungsi tulis dan upload baru, tetapi jika Anda ingin berkontribusi ke library tersebut, kunjungi halaman project.
Biodata Penulis
Martin Legris memiliki pengalaman pengembangan software aktif selama 12 tahun. Saat ini, ia terutama berkonsentrasi pada riset antarmuka pengguna dan alat favoritnya adalah Flash dengan ActionScript. Lihat blognya di blog.martinlegris.com dan situsnya (mungkin sudah tidak berlaku) di www.newcommerce.ca.
Karya ini dilisensikan berdasarkan
Creative Commons Attribution 3.0 United States License.