액션스크립트 3.0용 YouTube Data API : 첫 번째 단계

이 도움말은 외부 개발자가 작성하고 제출했습니다. 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 개발자입니다.

채굴

첫 번째 요청 만들기

다음 코드는 상당히 주석 처리됩니다. 하지만 좀 더 자세히 살펴보기 전에 기능을 설명하겠습니다. 모든 요청의 시작점은 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 유형의 변수 하나를 사용합니다. 이는 AS3의 표준을 따릅니다. 이 동영상을 선언하고 YouTube에서 받은 동영상과 관련해 몇 가지 사항을 추적하도록 하겠습니다. 표준 출력으로 추적합니다.

  • 동영상 제목,
  • 동영상을 삽입할 동영상 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를 쿼리하는 것이 얼마나 간단한지 알 수 있게 해줍니다. 모든 것을 하드 입력하기 위해 노력했으므로 각 피드 응답에서 사용 가능한 데이터를 탐색하기가 훨씬 수월합니다. 아직 새로운 쓰기 및 업로드 기능은 지원되지 않지만 라이브러리에 참여하려면 프로젝트 페이지를 방문하세요.

작성자 약력


작성자

Martin Legris는 12년의 소프트웨어 개발 기간을 자랑합니다. 현재는 주로 사용자 인터페이스 조사에 집중하고 있으며 즐겨 사용하는 도구는 액션스크립트가 포함된 플래시입니다. blog.martinlegris.com에서 블로그 (www.newcommerce.ca)를 확인하세요.

크리에이티브 커먼즈 라이선스
이 작품은 크리에이티브 커먼즈 저작자 표시 3.0 미국 라이선스에 따라 라이선스가 부여됩니다.