반응형

유튜브에서 채널에서 영상을 검색하면 최대 검색값이 50인데요.

이때 50개를 넘는 리스트를 추출하는 방법을 알아보겠습니다.

유튜브 API에 대해서는 저번에 채널 ID 추출에서 한번 다룬적이 잇는데요.

2022.01.26 - [Tip & Tech/Python] - 유튜브 채널 ID 추출하는 방법

 

유튜브 채널 ID 추출하는 방법

파이썬에서 youtube API를 통해서 정보를 추출하려면 채널 ID라는 항목이 나오는데요. 2021.12.30 - [Tip & Tech/Python] - 파이썬 유튜브 API 연동하기 파이썬 유튜브 API 연동하기 저번에는 크롤링으로 하는

dorudoru.tistory.com

기본적인 API 사용법은 해당 포스팅을 참고하시면 도움이 될 것 같습니다.

그리고 구글의 API 가이드에 실제 사용법에 대해서 워낙 자세하게 나와있어서,

해당 문서를 참고하시면 도움이 됩니다.

유튜브 Playlistitems API

이번에는 playlistitems라는 API를 사용할 것인데요.

구글의 공식 가이드는 아래와 같습니다.

https://developers.google.com/youtube/v3/docs/playlistItems?hl=ko 

 

PlaylistItems  |  YouTube Data API  |  Google Developers

PlaylistItems playlistItem 리소스는 재생목록에 포함된 동영상과 같은 다른 리소스를 식별합니다. 또한 playlistItem 리소스에는 재생목록에서 리소스가 사용되는 방식과 관련하여 포함된 리소스에 대한

developers.google.com

다만 50개 미만의 영상이라면 이 코드를 그대로 사용해도 문제가 없는데요.

채널별로 영상의 갯수가 많은 경우가 문제가 됩니다. maxresult값이 50이기 때문에, 

50개가 넘는 경우에는 자동으로 50개씩 페이징되서 결과를 리턴합니다.

이때 nextPageToken의 파라미터를 지니는데요. 이게 바로 다음 페이지의 정보입니다.

전체 파라미터의 설명은 구글 링크에서 확인하실 수 있는데요.

아래와 같습니다.

part string
part 매개변수는 API 응답이 포함하는 playlistItem 리소스 속성 하나 이상의 쉼표로 구분된 목록을 지정합니다. 매개변수 값에 포함할 수 있는 part 이름은 id, snippet, contentDetails, status입니다.

매개변수가 하위 속성을 포함하는 속성을 식별하는 경우 하위 속성이 응답에 포함됩니다. 예를 들어 playlistItem 리소스에서 snippet 속성은 title, description, position, resourceId 속성 등 여러 필드를 포함합니다. 따라서 part=snippet을 설정하는 경우 API 응답은 하위 속성도 모두 포함합니다.
필터(다음 매개변수 중 하나만 지정합니다.)
id string
id 매개변수는 쉼표로 구분된 하나 이상의 고유한 재생목록 항목 ID 목록을 지정합니다.
playlistId string
playlistId 매개변수는 재생목록 항목을 검색하려는 재생목록의 고유한 ID를 지정합니다. 이 매개변수는 선택적 매개변수이지만 재생목록 항목을 검색하는 모든 요청은 id 매개변수 또는 playlistId 매개변수에 값을 지정해야 합니다.
선택적 매개변수
maxResults unsigned integer
maxResults 매개변수는 결과 집합에 반환해야 하는 최대 항목 수를 지정합니다. 허용값은 0 이상 50 이하입니다. 기본값은 5입니다.
pageToken string
pageToken 매개변수는 반환해야 하는 결과 집합의 특정 페이지를 식별합니다. API 응답에서 nextPageToken  prevPageToken 속성은 검색할 기타 페이지를 식별합니다.
videoId string
videoId 매개변수는 요청이 지정된 동영상을 포함하는 재생목록만 반환해야 함을 지정합니다.

 

파이썬 코드 구현 예시

50개가 넘는 영상의 리스트를 추출하는 파이썬함수로 표현하면 아래와 같습니다.

playlists로 유튜브 함수를 호출하고, 이후 nextPageToken이 존재한다면,

해당 토큰을 넣어서 nextPage라고 호출을 합니다.

이 후 계속 다음 페이지가 있으면 두 결과를 합치고 다음페이지를 계속 탐색하고

아니면 지금까지 결과를 출력합니다.

    playlists =youtube.playlistItems().list(
        part = 'snippet',
        maxResults = 50,
        playlistId = playlist_id).execute()
    nextPageToken = playlists.get('nextPageToken')

    while ('nextPageToken' in playlists):
        nextPage = youtube.playlistItems().list(
        part="snippet",
        playlistId=playlist_id,
        maxResults="50",
        pageToken=nextPageToken
        ).execute()
        playlists['items'] = playlists['items'] + nextPage['items']

        if 'nextPageToken' not in nextPage:
            playlists.pop('nextPageToken', None)
        else:
            nextPageToken = nextPage['nextPageToken']

위 코드를 실행하면 전체 채널의 플레이리스트를 얻어올 수 있습니다.

유튜브 채널의 전체 영상이 필요하다면, 위 코드를 활용하여 사용하시기 바랍니다.

 

반응형

복사했습니다!