इस लेख को किसी बाहरी डेवलपर ने लिखा और सबमिट किया है. YouTube के एपीआई और टूल की टीम, मार्टिन लेग्रिस को उनके समय और विशेषज्ञता के लिए धन्यवाद देती है.
मार्टिन लेग्रीस
मार्च 2008
परिचय
इस ट्यूटोरियल में, मैं आपको बताऊंगा कि कैसे, असल AS3 कोड की 10 से कम लाइनों की मदद से, YouTube पर पिछले day
, week
, month
या all_time
में सबसे लोकप्रिय वीडियो वापस पाए जा सकते हैं. आपको कोई भी स्टैंडर्ड फ़ीड मिल सकता है:
- सबसे ज़्यादा देखी गईं
- सबसे नई
- सर्वाधिक चर्चित
- सर्वाधिक लिंक किए गए
- सर्वाधिक प्रतिक्रिया प्राप्त
- हाल के चुनिंदा
- शीर्ष मूल्यांकित
- प्रमुख पसंदीदा
- मोबाइल फ़ोन के लिए वीडियो
इस उदाहरण में इस्तेमाल की गई लाइब्रेरी को पूरे समय हार्ड-टाइप किया गया है. इसका मतलब है कि डेटा मिलने के बाद, FlashDevelop, Flex IDE, Eclipse w/FDT, IntelliJ Idea वगैरह जैसे आईडीई में, अपने-आप पूरा होने की सुविधा का इस्तेमाल किया जा सकता है.
अहम संसाधन
शुरू करने से पहले, यहां उन संसाधनों की सूची दी गई है जो YouTube API के डेटा का इस्तेमाल करने में दिलचस्पी रखने वाले AS3 डेवलपर के लिए उपलब्ध हैं.
- इन वेब सेवाओं का इस्तेमाल करने के लिए, मैंने जो AS3 लाइब्रेरी बनाई है
- YouTube Data API का आधिकारिक दस्तावेज़
- AS3 के लिए FlashDevelop IDE
- YouTubeClient पर किए गए किस अनुरोध कॉल से कौनसे इवेंट ट्रिगर होते हैं, इसकी सूची
प्रॉडक्ट का पता लगाना
पहला अनुरोध करना
यहां दिया गया कोड, टिप्पणियों के साथ है. हालांकि, इस सुविधा के बारे में ज़्यादा जानकारी देने से पहले, मैं इसके काम करने के तरीके के बारे में थोड़ा बताऊंगा. सभी अनुरोधों का शुरुआती पॉइंट, YouTubeClient
नाम की क्लास है. यह क्लास एक सिंगलटन है, जिसका ऐक्सेस आपको इन तरीकों से मिलता है:
// 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);
मैंने अभी-अभी पिछले महीने के सबसे ज़्यादा रेटिंग वाले वीडियो के लिए अनुरोध किया है. मुझे पहले से 10 तक के नतीजे चाहिए. ध्यान दें कि हर अनुरोध के लिए ज़्यादा से ज़्यादा 50 नतीजे मिल सकते हैं. आसान!
नतीजों को मैनेज करना
अब, मैं इन नतीजों को कैसे ऐक्सेस करूं? REST टाइप का webservice पैराडाइम एसिंक्रोनस होता है. इसलिए, नतीजे फ़ेच करते समय कोड को रोकने के बजाय इवेंट का इस्तेमाल करना ज़्यादा आसान होता है. इससे, नतीजों को मैनेज करने में आसानी होती है. इस मामले में, हमें StandardVideoFeedEvent.STANDARD_VIDEO_DATA_RECEIVED
इवेंट के लिए, इवेंट लिसनर का एलान करना होगा. जब भी YouTubeClient
को स्टैंडर्ड फ़ीड के लिए कोई जवाब मिलेगा, तब हमारे फ़ंक्शन को कॉल किया जाएगा.
client.addEventListener(StandardVideoFeedEvent.STANDARD_VIDEO_DATA_RECEIVED, doVideosReceived);
कॉल किया जाने वाला फ़ंक्शन doVideosReceived
होगा. इसमें एक पैरामीटर की ज़रूरत होगी. यह वैरिएबल StandardVideoFeedEvent
टाइप का होगा. यह AS3 के स्टैंडर्ड के मुताबिक है. हम इसे एलान कर दें और हमें मिले वीडियो से जुड़ी कुछ चीज़ों को ट्रैक करने दें. हम स्टैंडर्ड आउटपुट को ट्रैक करेंगे:
- वीडियो का टाइटल,
- उस वीडियो को एम्बेड करने के लिए SWF का URL,
- व्यू की संख्या,
- टिप्पणियों की संख्या,
- वीडियो की अवधि,
- और लेखक का नाम.
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()
शून्य दिखाता है. पिछले नतीजे की तरह ही, पहला नतीजा मिलने पर, 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 से क्वेरी करना कितना आसान है. मैंने हर चीज़ को टाइप करने में समय लिया है. इसलिए, यह देखना आसान है कि हर फ़ीड रिस्पॉन्स में कौनसा डेटा उपलब्ध है. फ़िलहाल, इसमें लिखने और अपलोड करने की नई सुविधा काम नहीं करती. हालांकि, अगर आपको लाइब्रेरी में योगदान देना है, तो प्रोजेक्ट पेज पर जाएं.
लेखक के बारे में जानकारी

मार्टिन लेग्रिस ने 12 साल तक सक्रिय रूप से सॉफ़्टवेयर डेवलपमेंट किया है. फ़िलहाल, वे मुख्य रूप से यूज़र इंटरफ़ेस (यूआई) की रिसर्च पर ध्यान दे रहे हैं. उनका पसंदीदा टूल, ActionScript वाला Flash है. blog.martinlegris.com पर उनका ब्लॉग और www.newcommerce.ca पर उनकी वेबसाइट (हो सकता है कि यह पुरानी हो) देखें.
इस काम के लिए,
Creative Commons Attribution 3.0 United States License के तहत लाइसेंस मिला है.