บทความนี้เขียนและส่งโดยนักพัฒนาแอปภายนอก ทีม API และเครื่องมือของ YouTube ขอขอบคุณ Martin Legris ที่สละเวลาและความเชี่ยวชาญของตนเอง
Martin Legris
มีนาคม 2008
บทนำ
ในบทแนะนำนี้ เราจะแสดงวิธีที่คุณสามารถใช้โค้ด AS3 จริงที่ยาวไม่เกิน 10 บรรทัด คุณสามารถเรียกดูวิดีโอที่ได้รับความนิยมมากที่สุดบน YouTube สำหรับ day, week, month หรือ all_time ล่าสุด คุณจะได้รับฟีดมาตรฐานต่อไปนี้
- มียอดดูมากที่สุด
- ใหม่ล่าสุด
- มีคนกล่าวถึงมากที่สุด
- มีการเชื่อมโยงมากที่สุด
- มีการตอบกลับมากที่สุด
- วิดีโอเด่นล่าสุด
- มีคะแนนสูงสุด
- สุดโปรด
- วิดีโอสำหรับโทรศัพท์มือถือ
ไลบรารีที่ใช้ในตัวอย่างนี้เป็นแบบฮาร์ดไทป์ตลอด ซึ่งหมายความว่าเมื่อได้รับข้อมูลแล้ว คุณจะใช้ฟีเจอร์เติมข้อความอัตโนมัติใน IDE เช่น FlashDevelop, Flex IDE, Eclipse w/FDT, IntelliJ Idea และอื่นๆ ได้
แหล่งข้อมูลสำคัญ
ก่อนเริ่มต้น เราขอแนะนำแหล่งข้อมูลสำหรับคุณซึ่งเป็นนักพัฒนาแอป AS3 ที่ต้องการใช้ข้อมูลจาก YouTube API
- ไลบรารี AS3 ที่ฉันพัฒนาขึ้นเพื่อใช้บริการเว็บเหล่านี้
- เอกสาร YouTube Data API อย่างเป็นทางการ
- FlashDevelop IDE สำหรับ AS3
- รายการเหตุการณ์ที่เรียกใช้จากการเรียกใช้คำขอที่ดำเนินการบน YouTubeClient
เจาะลึก
การส่งคำขอครั้งแรก
โค้ดที่ตามมาเป็นโค้ดที่ค่อนข้างตรง อย่างไรก็ตาม ฉันจะอธิบายฟังก์ชันการทำงานดังกล่าวสักเล็กน้อยก่อนที่จะเจาะลึกรายละเอียด จุดเริ่มต้นของคำขอทั้งหมดคือคลาสชื่อ YouTubeClient คลาสนี้เป็น Singleton ที่คุณเข้าถึงได้โดยทำดังนี้
// first you import it import ca.newcommerce.youtube.webservice.YouTubeClient; // then you get a reference to it var client:YouTubeClient = YouTubeClient.getInstance();
ตอนนี้เราพร้อมที่จะส่งคําขอแล้ว โดยทำดังนี้
client.getStandardFeed(YouTubeClient.STD_TOP_RATED,
YouTubeClient.TIME_MONTH,
1,
10);ฉันเพิ่งขอวิดีโอที่ได้รับคะแนนสูงสุดในเดือนที่แล้ว ผลลัพธ์ที่ 1 ถึง 10 (โปรดทราบว่าผลการค้นหาสูงสุด 50 รายการต่อการเรียกใช้ 1 ครั้ง) ง่ายมาก
การจัดการผลลัพธ์
แล้วฉันจะเข้าถึงผลลัพธ์เหล่านี้ได้อย่างไร เนื่องจากรูปแบบบริการเว็บของประเภท REST เป็นแบบอะซิงโครนัส จึงใช้เหตุการณ์เพื่อจัดการผลลัพธ์ได้ง่ายขึ้น แทนที่จะต้องหยุดโค้ดขณะดึงผลลัพธ์ ในกรณีนี้ เราต้องประกาศ Listener เหตุการณ์สําหรับเหตุการณ์ StandardVideoFeedEvent.STANDARD_VIDEO_DATA_RECEIVED ระบบจะเรียกใช้ฟังก์ชันทุกครั้งที่ YouTubeClient ได้รับการตอบกลับสําหรับฟีดมาตรฐาน
client.addEventListener(StandardVideoFeedEvent.STANDARD_VIDEO_DATA_RECEIVED,
doVideosReceived);
ฟังก์ชันที่จะเรียกคือ doVideosReceived จะใช้พารามิเตอร์ 1 รายการ ซึ่งเป็นตัวแปรประเภท StandardVideoFeedEvent ซึ่งเป็นไปตามมาตรฐานใน AS3 ให้เราประกาศข่าวและให้พวกเขาติดตามบางสิ่งเกี่ยวกับวิดีโอที่เราได้รับ เราจะติดตามไปยังเอาต์พุตมาตรฐาน:
- ชื่อวิดีโอ
- URL ของ SWF สำหรับฝังวิดีโอ
- ยอดดู
- จำนวนความคิดเห็น
- ระยะเวลาของวิดีโอ
- และชื่อผู้เขียน
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);
}
}ข้อควรทราบบางประการเกี่ยวกับคลังและฟีด
เหตุการณ์เกือบทั้งหมดมีพร็อพเพอร์ตี้ .feed ข้อยกเว้นหนึ่งคือ ProfileEvent แต่มีพร็อพเพอร์ตี้ .profile แทน เนื่องจากมีเพียงระเบียนเดียวที่แสดงผลโดยการเรียกนี้
ฟีดมีหลายประเภท แต่ทั้งหมดใช้วิธีการต่อไปนี้
first()-- เรียกคืนระเบียนแรกและชี้ไปที่ระเบียนนั้นnext()-- ดึงข้อมูลระเบียนถัดไปที่พร้อมใช้งานlast()-- เรียกข้อมูลระเบียนล่าสุดแล้วชี้เมาส์ไปที่ระเบียนนั้นprevious()-- ดึงข้อมูลระเบียนก่อนหน้าในฟีดgetAt()-- รับผลลัพธ์ที่ตําแหน่งหนึ่งๆcount()-- จำนวนผลลัพธ์ที่มีสำหรับฟีดนี้ ไม่เท่ากับtotalResults
เมื่อถึงจุดสิ้นสุดของผลลัพธ์ next() จะแสดงผลค่า Null เช่นเดียวกับ "ก่อนหน้า" เมื่อคุณไปถึงผลลัพธ์แรก การเรียก previous() ครั้งถัดไปจะแสดงผลลัพธ์ null
โปรดทราบว่าข้อมูลภายในฟีด (เช่น หมวดหมู่) จะรวมอยู่ภายใน Iterators เพื่อให้คุณใช้ฟังก์ชันเดียวกันนี้เพื่อดูหมวดหมู่ที่มีให้ได้
ซอร์สโค้ดที่สมบูรณ์
ต่อไปนี้คือซอร์สโค้ดแบบเต็มสำหรับตัวอย่างนี้ คุณจะดาวน์โหลดไฟล์ ZIP ซึ่งมีข้อมูลทุกอย่างที่ต้องใช้ในการเรียกใช้ตัวอย่างใน Flash CS3 ได้ แต่คุณควรอัปเดตไลบรารีไว้เผื่อในกรณีที่เราแก้ไขข้อบกพร่องหรืออัปเดตฟีเจอร์ต่างๆ คุณสามารถดาวน์โหลดคลังได้โดยคลิกที่นี่
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);
}
}
}
}
บทสรุป
แม้ว่าบทความนี้จะเป็นเพียงข้อมูลคร่าวๆ แต่จะช่วยให้คุณทราบถึงความง่ายดายในการค้นหา YouTube Data API โดยใช้ไลบรารีนี้ เนื่องจากฉันได้ใช้เวลาเขียนทุกอย่างอย่างละเอียด จึงสามารถสำรวจข้อมูลที่มีอยู่ในการตอบกลับฟีดแต่ละรายการได้อย่างสบายๆ เครื่องมือนี้ยังไม่รองรับฟังก์ชันการเขียนและการอัปโหลดแบบใหม่ แต่หากต้องการมีส่วนร่วมในคลัง ให้ไปที่หน้าโปรเจ็กต์
ประวัติผู้แต่ง
Martin Legris มีการพัฒนาซอฟต์แวร์อย่างต่อเนื่องมากถึง 12 ปี ปัจจุบันเขามุ่งเน้นที่การวิจัยอินเทอร์เฟซผู้ใช้เป็นหลัก และเครื่องมือที่เขาชอบใช้คือ Flash พร้อม ActionScript โปรดไปที่บล็อกของเขาที่ blog.martinlegris.com และเว็บไซต์ (อาจล้าสมัย) ที่ www.newcommerce.ca
ผลงานนี้ได้รับอนุญาตภายใต้
ใบอนุญาตครีเอทีฟคอมมอนส์แบบระบุแหล่งที่มา 3.0 ของสหรัฐอเมริกา