이 도움말은 외부 개발자가 작성하고 제출했습니다. YouTube API 및 도구팀은 마틴 레그리스의 시간과 전문 분야에 감사드립니다.
Martin Legris
2008년 3월
소개
이 튜토리얼에서는 실제 AS3 코드 10줄 미만으로 지난 day
, week
, month
또는 all_time
동안 YouTube에서 가장 인기 있는 동영상을 가져오는 방법을 보여줍니다. 다음 표준 피드 중 하나를 가져올 수 있습니다.
- 조회순
- 최근 날짜순
- 최다 댓글 동영상
- 최다 링크
- 최다 동영상 응답
- 최신 추천 동영상
- 최고 평점 동영상
- 즐겨찾기 동영상
- 휴대전화용 동영상
이 예에서 사용된 라이브러리는 전체적으로 하드 유형이 지정됩니다. 즉, 데이터를 수신한 후 FlashDevelop, Flex IDE, Eclipse w/FDT, IntelliJ Idea 등의 IDE에서 자동 완성 기능을 사용할 수 있습니다.
중요한 리소스
시작하기 전에 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);
방금 지난 한 달 동안 평점이 가장 높은 동영상 1~10개를 요청했습니다 (호출당 최대 50개 결과가 반환됨). 참 쉽죠?
결과 처리
이제 이러한 결과에 액세스하려면 어떻게 해야 하나요? REST 유형 웹서비스 패러다임은 비동기식이므로 결과를 가져오는 동안 코드를 중지하는 대신 이벤트를 사용하여 결과를 처리하는 것이 더 쉽습니다. 이 경우 StandardVideoFeedEvent.STANDARD_VIDEO_DATA_RECEIVED
이벤트의 이벤트 리스너를 선언해야 합니다. 이 함수는 YouTubeClient
가 표준 피드에 대한 응답을 받을 때마다 호출됩니다.
client.addEventListener(StandardVideoFeedEvent.STANDARD_VIDEO_DATA_RECEIVED, doVideosReceived);
호출할 함수는 doVideosReceived
입니다. StandardVideoFeedEvent
유형의 변수인 매개변수 1개를 사용합니다. 이는 AS3의 표준을 따릅니다. 선언하고 YouTube에서 접수한 동영상과 관련된 몇 가지 사항을 추적해 보겠습니다. 표준 출력으로 추적합니다.
- 동영상 제목
- 동영상을 삽입할 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()
는 null을 반환합니다. 이전과 동일합니다. 첫 번째 결과에 도달하면 다음번 previous()
호출에서 null
이 반환됩니다.
피드 내의 데이터(예: 카테고리)는 Iterators
내에서 래핑되므로 동일한 함수를 사용하여 사용 가능한 카테고리를 살펴볼 수 있습니다.
전체 소스 코드
다음은 이 예의 전체 소스 코드입니다. Flash CS3 내에서 예제를 실행하는 데 필요한 모든 항목이 포함된 zip 파일을 다운로드할 수 있지만 버그가 수정되거나 기능을 업데이트할 경우에 대비하여 라이브러리를 업데이트하는 것이 가장 좋습니다. 여기를 클릭하여 라이브러리를 다운로드할 수 있습니다.
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의 웹사이트 (오래된 정보일 수 있음)를 확인하세요.
이 작업물은
크리에이티브 커먼즈 저작자 표시 3.0 미국 라이선스에 따라 라이선스가 부여됩니다.