유튜브 API 삽질 경험담
유튜브 데이터를 분석하는 프로젝트를 하다 보니, 관련 글이 꽤나 많아진다. 이미 브런치북으로 한 권을 발행했는데 서비스를 운영하다 보니 새로운 글들이 또 추가된다.
기존 코드에 대한 개선, 유튜브 API의 변경, 유튜브 데이터 변경 등 요인이 다양하다. (그중에서도 가장 끔찍한 건 유튜브 정책의 변화다. 파급이 꽤나 크다;;)
본 글에서는 위에서 언급한 이유 때문에 알게 된 내용들을 지속적으로 업데이트한다. 누군가에게는 꽤나 소중한 자료가 되기를 바라며.
Analytics API의 gender
유튜브 분석 API는 Reporting API와 Analytics API로 구분된다. 그중 Analytics API는 분석 데이터의 필요한 부분만 찾아서 조회하고 싶을 때 필요하다.
콘텐츠 소유자의 모든 채널 성별/연령별 데이터를 분석하는 모듈은 Analytics API를 사용해서 개발했다.
const res = await youtubeAnalyticsService.reports.query({
ids: `contentOwner==${ownerId}`,
dimensions: 'channel,ageGroup,gender',
metrics: 'viewerPercentage',
startDate: this.startDay,
endDate: this.today,
filters: `channel==${channelIds}`
});
2년 넘게 아무런 문제 없이 잘 돌아가던 녀석이, 어느 날 갑자기 에러를 뱉었다.
ER_DATA_TOO_LONG: Data too long for column 'gender' at row 11
DB의 gender 필드는 10자리. 지구에 새로운 성별이라도 나타난 건가?! 데이터를 확인해 보니...
genderUserSpecified
요즘 구글을 비롯해 다양한 온라인 서비스에 가입할 때 성별 입력을 하다 보면 예전처럼 "남", "여"만 존재하는 게 아니라 다양한 조건이 추가됐다.
비단, 유튜브 API를 떠나서 성별 값을 활용하는 서비스를 개발할 때는 주의하도록 하자. 예전처럼 1 Byte로 처리하던 시대가 아니다.
Video topic categories
유튜브 동영상 정보 중, topic_categories라는 필드가 있다.
* 참고로, 해당 정보는 한국어 버전에서는 안보인다. 유튜브 개발 가이드는 반드시 영어로 보자. 한국어 버전에는 최신 정보가 동기화 되어있지 않은 경우가 많다.
해당 영상과 가장 관련 깊은 위키피디아의 링크 정보를 반환하는데, 이값이 고정이 아니다. 호출마다 다른 값으로 반환된다. 사용자가 영상 정보를 수정하지 않아도 아래처럼 유튜브의 알고리즘에 의해 정보가 변경된다. 해당 필드를 활용할 경우 유의하자.
Search forContentOwner, forMine 그리고 publishedAfter
Data API 중 개발자들에게 양날의 검인 Search(). 활용가치가 높은 녀석이지만 Quota 100을 자랑하는 괴랄한 녀석이다.
소규모 채널 조회에는 활용하지 않지만, 대규모의 브랜드 채널 데이터를 검색하고 싶을때 이 함수의 forContentOwner, forMine 속성을 사용하는데 이녀석이 문제다.
forContentOwner, forMine 속성을 publishedAfter, publishedBefore 속성과 함께 사용하면 에러가 발생한다.
유튜브 공식 가이드 문서에도 나와있지 않은 이 뭣같은 녀석.... -_ -+
한글어 버전에는 아예 언급이 없고, 영어 버전에는 아래 속성과 함께 사용할 수 없다고 나와있다.
videoDefinition, videoDimension, videoDuration, videoLicense, videoEmbeddable, videoSyndicated, videoType
제발 한글 가이드 업데이트 좀 해주라. 구글아...