채널 안에 있는 모든 동영상 조회하기 Ver2
일전에, 유튜브 API를 사용하여 채널 안에 존재하는 모든 동영상을 조회하는 방법에 대해서 글을 작성했다.
엄청 간단한 문제 같지만, 채널이 많고 동영상이 많은 콘텐츠 소유자의 경우 이 문제가 꽤나 복잡해진다. 최근 유튜브에서 원하는 조건의 영상만 모아서 앱을 만들어주는 빌더 프로젝트를 진행 중이다. 그중 백엔드(API, CMS)를 맡고 있는데, 위 글에서 소개한 방법을 개선할 수 있는 방법을 찾아서 버전 2로 글을 정리하게 됐다.
그럼 해당 내용을 자세히 살펴보자.
위에서 소개한 글에서 전체 동영상 정보를 수집하는 프로세스를 아래와 같이 정리했다.
1. 특정 시점에 전체 동영상 정보를 Reporting API를 이용해서 보고서를 다운로드한다.
2. 이 보고서에서 동영상 정보(동영상 아이디, 채널 아이디 등)를 마스터 데이터로 DB 또는 FILE에 저장한다.
3. 일별 데이터를 추가로 저장한다.
3-1. 일별 영상 정보 조회 시 할당량에 무리가 가지 않는 상황이면 Search API를 통해서 하루에 한 번 조회한다.
3-2. 일별 영상 정보 조회 시 할당량을 초과하는 상황이면 업로드 재생목록의 동영상 목록을 조회하여 해당 날짜에 배포된 영상 정보만 저장한다.
3번에서 일별 데이터 추가를 위해 할당량 별로 두 가지 방안을 언급했다. 이 두 가지 방법 대신, Activities API를 사용하는 것을 권장한다.
Activities
특정 채널에 대한 활동 이벤트 목록 조회(동영상 업로드, 구독 등)
Activities API는 Search API와 동일하게 "publishedAfter" 매개변수를 지원한다. 무엇보다 Search API 대비 할당량이 1/100로 줄어들기 때문에 매우 유용하다.
가령, 100개의 채널 데이터(각 채널당 1개의 영상만 존재한다고 가정)를 조회한다고 가정해보자. Search API를 사용할 경우 10,000 할당량이 사용되는 반면, Activities API의 경우 100 할당량만 필요하다. 이는 유튜브에서 기본으로 제공하는 일 할당량이 20,000 정도임을 고려하면 꽤나 의미 있는 수치다.
할당량 외에 Activities API와 Search API의 차이점은 무엇일까?
list 함수를 통해 동영상 아이디를 조회한다고 가정했을 때 아래와 같은 차이점이 있다.
Activities API의 경우 라이브 영상, Premieres 상태(대기 상태)의 영상 정보는 반환하지 않는다.
Search API의 경우 라이브, Premierers 상태의 영상을 모두 반환한다.
Premieres 영상의 경우 대기 상태에서 재생 상태로 변경되면 Activities API에서도 조회가 된다.
Premieres 영상의 경우 대기 상태에서 재생 상태로 변경되면 publishedAt 필드 값이 재생 시각으로 변경된다.
이는, 예약 배포가 아닌 공개 배포에서도 동일하다.(Premieres 배포는 2분 프리뷰 모드가 기본으로 생김)
Activities API의 경우 제한지역(regionRestriction)과 상관없이 모든 결과를 반환한다.
Search API의 경우 API를 실행하는 지역의 코드값이 동영상 제한지역(regionRestriction)에 포함된 경우 반환하지 않는다.(regionCode 매개변수에 강제로 설정해도 반환하지 않음)
Activities API는 Search API에 존재하는 다양한 파라미터가 없다(ex, order)
Search API가 최대 500 ~ 600개의 데이터만 반환 했듯, Activities API는 현재(2022년 8월) 최대 110개의 데이터만 반환한다.
페이징 토큰 사용해도 최대 50개씩 3번 호출이 일어난다.
Stackoverflow에는 2020년 3월 기준, 256개까지 반환한다는 글이 있으나 현재는 110개다.
그밖에 이번 테스트를 통해 알게 된 내용을 추가로 정리한다.
간혹 과거 동영상 자료 중에 Activities API와 Search API의 publishedAt 필드 값이 다른 경우가 존재한다. Search API에서는 publisedAt 필드의 값이 초기 배포 시각, Activities API에서는 수정 시각으로 사용된 것으로 보이며, 과거에는 영상 정보를 수정하면 이 필드 값을 변경한 것으로 보인다. 최근에는 동영상 정보를 변경해도 publishedAt 필드의 값은 초기 배포 시각으로 동일하다. (유튜브 정책 및 시스템이 지속적으로 변경되고 있기 때문에 10년이 넘은 과거 데이터중에는 현재 규칙에 맞지 않는 데이터가 튀어나와 당황스러운 경우가 있다 -_ -;)
예약 배포의 경우 예약 시간 되기 전까지 Search, Activities API에서 조회가 되지 않는다.(예약 배포를 하면 예약 시간 되기 전까지 동영상의 배포 상태가 "비공개"로 되어 있음)
Search API의 경우 동영상 데이터를 CMS에서 변경한 뒤 1~2분 정도 늦게 반영된다.
publishedAfter 파라미터를 사용할 경우, 데이터는 publishedAt의 역순(최근 날짜가 먼저)으로 정렬되어 반환한다.