brunch

You can make anything
by writing

C.S.Lewis

by 핑크곰 Dec 12. 2019

유튜브 API - 7. Playlists/items

유튜브 데이터 API 뜯어보기 - Playlists, PlayItems

본글에서는 6.Data API(채널 편)에 이어서 유튜브 Data API의 재생목록(Playlist) 기능들을 시나리오 기반으로 사용해보고 결과를 확인해 보도록 하겠다.






재생목록과 관련된 리소스는 두 가지다. 재생목록 기본 정보를 다루는 Playlists와 재생목록에 포함되는 항목을 다루는 PlaylistItems. 자세한 기능은 다음과 같다.


Playlists

> 자신 또는 특정 사용자의 재생목록 조회

> 재생목록 생성

> 재생목록 수정(제목, 설명, 개인정보 보호 등)

> 재생목록 삭제


PlaylistItems

> 재생목록 항목 조회

> 재생목록 항목 추가

> 재생목록 항목 수정(항목 위치)

> 재생목록 항목 삭제






이전 글과 마찬가지로 본 글에서도 가상의 시나리오를 작성하고 API를 통해 이를 구현하는 방식으로 설명을 진행한다.



Playlists

Playlists:list

재생목록에 대한 정보 검색(내 재생목록 조회, 특정 사용자의 재생목록 조회)

시나리오. '놀면뭐하니?' 채널에 등록된 재생목록들의 제목과 설명 그리고 대표 이미지를 출력한다.


1. 유튜브 사이트에서 검색을 통해 '놀면뭐하니?' 채널 아이디를 얻어온다.

감사하게도, 지난 글에서 이미 얻어온 채널 아이디(UCx6jsZ02B4K3SECUrkgPyzg)가 있다.

놀면뭐하니 채널



2. 채널 아이디를 알았으니, 별거 없다. 지금까지 했던 대로, OAuth2 인증을 통해 권한을 얻어오고 친절한 유튜브 씨가 제공하는 라이브러리를 통해 playlist.list 메서드 호출하면 끝이다.

재생목록 정보를 출력하는 코드


5. 인증받고 사용하기 글에서 작성해놓은 OAuth2 클래스를 활용해서 권한 관련 코드가 깔끔하게 정리됐다. playlists 클래스의 list 메서드를 사용한다. 해당 메서드 인자의 id 속성에 '놀면뭐하니?' 채널 아이디를 설정하고 3.API 살펴보기 글에서 설명했던 part와 fields 속성을 통해 시나리오에서 원했던 값들만 얻어왔다. 


여기서 잠깐! 


그런데, 유튜브의 레퍼런스 문서에 있는 Playlists:list가 구글이 제공하는 라이브러리에서 playlists.list() 메서드인지 어떻게 알 수 있을까?! 같은 이름인데 이게 뭔 봉창 두드리는 소리냐고 하는 독자들도 있겠지만 이런 사소한 부분이 궁금한 독자들도 있다.(필자만 궁금했던 건 아니겠지 설마 -_-;;;)

4. 유튜브 API 사용하기 편에서 설명했던 대로, 언어별 라이브러리의 문서에서 동일한 이름의 클래스와 메서드를 찾아서 활용하면 된다. 라이브러리 언어별로 문서의 친절도(?)가 다르기 때문에 샘플 코드까지 제공하지 않는 언어들도 있다. (그래.. NodeJs 가 그래.... ㅠㅠ)

Youtube 라이브러리 문서 for NodeJs



3. 결괏값을 확인한다.

재생목록 조회 실행 결과



실제 유튭에서 보여주고 있는 화면과 비교해 보자. 잘 나오는 것 같다 유휴~ (~__)~

놀면뭐하니? 재생목록




Playlists:insert

재생목록 등록

시나리오. 내 채널에 새로운 재생목록("API로 만든 재생목록")을 추가한다.


1. 유튜브에서 내 채널 재생목록을 확인한다.(좋아요 표시한 동영상이 꼭 뽀로로여만 해앴~냐?! -,.-)


2. 새로운 재생목록을 추가해 보자. "API로 만든 재생목록"이라는 제목으로 비공개 재생목록을 만드는 코드를 아래와 같이 작성한다.


playlists.insert() 메서드의 인자로 requestBody를 설정할 수 있다. snippet의 하위 속성인 title과 description 속성 값을 설정하면 해당 내용으로 재생목록이 생성된다.

지원 가능한 requestBody 속성



3. 실행결과 아래와 같이 내 재생목록에 'API로 만든 재생목록'이 추가된 걸 확인할 수 있다.


여기서 잠깐! 주의할 점!

하나의 계정에 재생목록 생성 API 호출을 에 지속적으로 하면, 재생목록 너무 많이 만들었으니 잠시 후에 시도하라고 에러 메시지를 반환한다;;;; 정도껏 하자 -0-;


4. Playlists:updatePlaylists:delete

재생목록 등록과 비슷한 CUD 메서드이기 때문에 위 코드를 참고하면 크게 어려움 없이 응용이 가능하다.





PlaylistItems

PlaylistItems:list

재생목록에 들어있는 항목에 대한 정보 검색(내 재생목록 아이템 조회, 특정 사용자의 재생목록 아이템 조회)

시나리오. '놀면뭐하니?' 채널의 '뽕포유' 재생목록에 들어있는 영상들의 정보(아이디, 제목, 설명, 등록일시 그리고 대표 이미지)를 출력한다.


1. 유튜브 사이트에서 검색을 통해 '놀면뭐하니?' 채널의 '뽕포유' 재생목록 아이디를 얻어온다.

재생목록 메뉴에서 '유재석의 트로트 도전기[뽕포유]'를 클릭하면 주소창에서 재생목록 아이디(PLIHkbyUJLOS_7-BuJy_2Gwl6pxea3eWQh)를 확인할 수 있다.



2. PlaylistItems 클래스의 list 메서드를 사용해서 뽕포유 재생목록에 들어있는 아이템들을 조회하는 코드를 작성한다. 기존과 다르게 fields 속성에 nextPageToken과 pageInfo를 추가했다. 



3. 예상했던 대로 조회하고자 했던 영상의 아이디, 제목, 설명, 등록일시 그리고 대표 이미지를 출력하고 있다. 

한 가지 눈여겨볼 부분은 pageInfo 속성을 통해서 전체 동영상 건수를 확인할 수 있다는 점이다. 뽕포유 재생목록에 들어있는 영상의 수는 43건. 그런데 그 아래에 보면 페이지당 결과가 50건으로 되어있다. 소스 코드에서 maxResults를 50으로 설정했기 때문에 한 번에 불러올 수 있는 최대 영상정보는 50건이다.


그런데 만약 재생목록에 들어있는 영상의 수가 50건을 넘어가게 되면 어떻게 될까?! 이럴 때는 구글은 페이징 토큰 방식으로 이문제를 해결한다.

현재 조회해온 이후의 데이터를 조회할 때는 위에서 추가한 nextPageToken을 속성으로 추가하면 결과를 받아올 수 있다. 보다 자세한 내용은 페이징 처리 관련 별도의 글을 통해 정리하도록 하겠다.




PlaylistItems:insert

업로드된 영상을 재생목록 항목으로 등록

시나리오. 내 채널에 있는 재생목록("API로 만든 재생목록")에 업로드된 영상을 하나 추가한다.


1. 유튜브에서 내 채널의 "API로 만든 재생목록" 재생목록 아이디(PLEtkHvGoWaSXMPGrwd67SGwY5Co7IyqGV)를 확인한다.



2. 유튜브에서 재생목록에 추가할 영상의 아이디(bb6TKrtuLKE)를 확인한다. 


여기서 잠깐! 주의할 점!

저작권이 있는 영상을 본인 채널에 바로 올리면 유튭에서 바로 경고가 들어온다. 특히 라이브 송출 테스트 때문에 TV 방송 영상 바로 사용하는 경우를 종종 보게 되는데, 저작권 문제로 몇 달간 라이브 송출 못하는 불상사가 생길 수 있으니 절대 학습을 위해서라도 방송국 영상 쓰면 안 된다. (방송국에 다녀서 그런 거 절대 아니다..=0=;)



3. 재생목록에 새로운 영상을 추가해 보자. 재생목록 항목 추가 API는 새로운 영상을 직접 추가할 수 있는 방법은 존재하지 않으며, 기존에 업로드된 영상을 추가하는 방식만 제공한다.(영상 업로드하는 방법은 Video 편에서 다룰 예정) 위에서 알아본 재생목록에 영상을 추가하는 코드를 아래와 같이 작성한다.

playlistItems.insert() 메서드의 인자로 requestBody를 설정할 수 있다. snippet의 하위 속성인 playlistId와 resourceId 속성 값을 설정하면 해당 내용으로 재생목록에 영상이 추가된다. resourceId 속성은 하위 속성으로 kind와 videoId 값을 설정해야 한다.(kind 속성 빼먹지 말자! 필자는 고생했다 -_ -;;)


등록 가능한 속성은 아래와 같다. (가이드가 이모양이니 kind 속성 때문에 고생하지 -_ -)

지원 가능한 requestBody 속성



4. 실행결과 아래와 같이  'API로 만든 재생목록'에 영상이 1개 추가된 걸 확인할 수 있다.


insert 메서드는 추가가 성공이면 part 속성에서 설정한 정보(snippet, contentDetails, status)를 반환한다.


5. PlaylistItems:updatePlaylistItems:delete

재생목록 영상 등록과 비슷한 CUD 메서드이기 때문에 등록 코드를 참고하면 크게 어려움 없이 응용이 가능하다.

이전 06화 유튜브 API - 6. Channels
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari