프로그래밍 연습하기

Youtube 재생목록(Playlist)안의 동영상 ID 얻기 본문

Python

Youtube 재생목록(Playlist)안의 동영상 ID 얻기

john.k 2023. 9. 12. 19:50
반응형

Youtube 재생목록에 어떤 동영상들이 있는지 가져오려고 합니다.

처음에는 파이썬의 패키지인 Youtube-dl을 사용해야하나 싶었는데

방법을 알아보니 구글에서 제공하는 API가 있었습니다.

 

그런데 먼저 준비해야될 것은

Google Cloud Console(https://console.cloud.google.com/) 에서 프로젝트를 생성 후

API 및 서비스 -> 라이브러리에서

YouTube Data API v3 을 사용 설정하고

API Key를 만들어서 그 키로 API를 사용해야 됩니다.

 

def get_playlist_items(playlist_id = None):
    playlist_id = "유튜브 재생목록 ID"
    api_key = os.getenv("YOUTUBE_API_KEY") # 발급받은 API KEY 입력
    next_page_token = True
    result = []
    while next_page_token:
        request_url = "https://youtube.googleapis.com/youtube/v3/playlistItems?"\
                      f"part=snippet&playlistId={playlist_id}&key={api_key}&maxResults=50"
        if next_page_token is not True:
            request_url += f"&pageToken={next_page_token}"
        res = requests.get(request_url)
        res_json = res.json()
        res_items = res_json.get("items")
        if res_items:
            for _item in res_items:
                snippet = _item["snippet"]
                resource_id = snippet["resourceId"]["videoId"]
                title = snippet["title"]
                item_dict = dict(title=title, resource_id=resource_id)
                result.append(item_dict)
        next_page_token = res_json.get("nextPageToken")
        # next_page_token = None # 한번만 하려면 위의 라인 대신 이 라인 사용

    pprint.pprint(result)

위와 같이 간단한 코드를 통해서 사용했는데요.

이 API는 한번에 불러올 수 있는 개수가 최대 50개까지라서

반복문을 통해 nextPageToken으로 계속 다음 목록을 요청해서

모든 동영상 정보를 가져올 수 있게 했습니다.

 

저는 일단 동영상의 id만 필요해서 title과 id정도만 얻어와보는 예제를 작성했는데,

아래의 링크를 참조하시면 썸네일 등 다양한 정보를 얻어올 수 있는 걸 확인하실 수 있습니다. 

 

API의 자세한 정보는 다음 링크를 참고하세요.

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

 

PlaylistItems: list  |  YouTube Data API  |  Google for Developers

이 페이지는 Cloud Translation API를 통해 번역되었습니다. Switch to English PlaylistItems: list 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. API 요청 매개변수와 일치

developers.google.com

 

반응형
Comments