어쩌다데싸

YouTube API 키 발급 및 Python을 이용한 API 요청 가이드 본문

ETC

YouTube API 키 발급 및 Python을 이용한 API 요청 가이드

엔팁 2025. 3. 7. 12:14

 

목차

     

    YouTube API를 활용하면 유튜브 데이터를 자동으로 가져오거나 특정 작업을 수행할 수 있습니다. 예를 들어, 특정 동영상의 조회수, 좋아요 수, 댓글 개수를 확인하거나, 채널의 구독자 증가 추세, 시청 시간 등의 통계를 분석할 수 있습니다.

    이 글에서는 초보자도 쉽게 따라 할 수 있도록 Google Cloud Console에서 API 키를 생성하는 과정부터, Python을 이용한 API 요청 코드 작성 및 실행 방법까지 다룰 예정입니다.

     

     

    YouTube API 종류

    API 역할 주요 기능 인증 방식
    YouTube
    Data API v3
    유튜브 동영상, 채널, 댓글,
    재생목록 등의 정보 조회 및 관리
    - 동영상 조회수, 좋아요, 댓글 가져오기
    - 채널 정보 조회 (구독자 수 등)
    - 동영상 업로드 및 삭제
    - 댓글 관리 및 재생목록 수정
    API 키 또는 OAuth 2.0
    YouTube
    Analytics API
    유튜브 채널 및 동영상의 통계
    데이터 제공
    - 채널 및 동영상 조회수, 시청 시간 분석
    - 구독자 증가 및 감소 추이 확인
    - 트래픽 소스 및 유입 경로 분석
    - 광고 수익 및 시청자 참여도 분석
    OAuth 2.0 필수
    YouTube
    Reporting API
    유튜브 채널의 상세 보고서
    다운로드
    - 광고 수익 보고서 생성 및 다운로드
    - 유튜브 채널 및 동영상의 심층 분석 리포트 제공
    OAuth 2.0 필수

     

    공개되어 있는 정보를 가져올 때는 OAuth 2.0가 필요 없지만 개인 채널 등 private한 정보를 가져올 때는 OAuth 2.0 인증이 필수입니다!

    즉, YouTube Data API v3는 내 소유 채널이 아니더라도 공개된 유튜브 동영상, 채널, 댓글 등의 데이터를 가져올 수 있고(모두가 볼 수 있는 정보), Analytics API와 Reporting API는 내 소유 채널에 대해 상세한 데이터가 필요할 때 사용합니다. 물론 YouTube Data API v3에서 가져올 수 있는 데이터 중에도 OAuth 2.0 인증이 필요한 데이터가 있습니다.

     

    YouTube API 키 발급

    📌 YouTube API 키가 필요한 이유

    YouTube API를 사용하려면 Google의 서버와 데이터를 주고받아야 합니다. 하지만 모든 사용자에게 무제한으로 API를 제공하면 서버에 부담이 크고, 악의적인 사용을 방지하기 어렵습니다. 이를 해결하기 위해 Google은 API를 사용하려는 개발자에게 "API 키"를 발급하여 인증된 요청만 허용합니다.

     

    API 키를 발급받으면, 이를 이용해 YouTube의 데이터를 요청하고 응답을 받을 수 있습니다. API 키는 특정 프로젝트에 연결되며, 발급받은 키를 요청과 함께 보내야 API를 정상적으로 사용할 수 있습니다.

     

    🔹 Google Cloud Console에서 YouTube API 활성화하기

    YouTube API 키를 발급받으려면 Google Cloud Console을 사용해야 합니다. 아래 단계를 통해 YouTube API를 활성화 해봅시다.

     

    1. Google Cloud Console 접속 및 로그인

    • Google Cloud Console 에 접속 - 오른쪽 상단의 '콘솔' 클릭
    • Google 계정으로 로그인

     

    2. 새로운 프로젝트 생성

    • 콘솔 메인 화면의 프로젝트 선택 버튼 클릭 - '새 프로젝트' 클릭
      • 작업 중인 프로젝트가 있을 시 해당 프로젝트를 사용하거나 다른 프로젝트로 변경해 사용 (API 키를 사용할 프로젝트 선택)
    • 프로젝트 이름을 입력하고 '생성' 버튼을 누름

     

    3. YouTube API 활성화하기

    • 좌측 상단 메뉴 (줄 세 개) - API 및 서비스 - 사용 설정된 API 및 서비스 클릭 후 +API 및 서비스 사용 설정 클릭
    • 검색창에 'youtube' 검색하면 나오는 3개의 API 중 원하는 것을 클릭 후 사용 버튼 클릭해 API 활성화
      • YouTube Data API v3
      • YouTube Analytics API
      • YouTube Reporting API
    • YouTube Analytics API를 사용하기 위해서는 YouTube Data API v3도 함께 사용해야 하는 경우가 있으므로 둘 다 활성화

     

    4. API 인증 설정

    활성화는 되었지만 이대로 사용하면 오류가 발생합니다. API를 본격적으로 사용하기 위해서는 키를 발급 받거나 인증을 받아야 하는데, API를 사용하기 위한 인증 방식에는 아래와 같이 3가지 방식이 있습니다.

    인증 방식 설명 사용 목적
    API 키 (API Key) 단순한 API 요청 인증을 위한 키 공공 데이터 조회(예: 동영상 조회수, 채널 정보)
    OAuth 2.0 (사용자 인증) 사용자의 YouTube 계정 정보를 활용하는 경우 필요 채널별 통계 조회, 동영상 업로드, 댓글 관리 등
    서비스 계정
    (Service Account)
    특정 Google Workspace 계정을 사용하여 API 요청 기업 내부 시스템에서 YouTube 데이터 활용

     

    YouTube API를 사용할 때, API 키 대신 OAuth 2.0 인증을 설정하는 것이 확장성이 더 높고 유용합니다. OAuth 2.0을 설정하면 YouTube Data API, YouTube Analytics API, YouTube Reporting API 등 모든 API를 활용할 수 있으며, 내 채널의 통계 데이터, 동영상 업로드, 댓글 관리 등의 기능도 수행할 수 있습니다.


    따라서 이 글에서는 OAuth 2.0 인증을 설정하는 방법을 중점적으로 설명하겠습니다.

     

    1) OAuth 동의 화면 설정

    • 메뉴 - API 및 서비스 - OAuth 동의 화면 설정 페이지 이동
    • 사용자 유형 선택
      • 외부 : 개인 프로젝트라면 이 옵션을 선택
      • 내부 : 조직(Google Workspace) 내에서만 사용할 경우
    • 앱 이름, 이메일, 권한 요청 범위를 입력 (개인 목적이면 앱 이름은 아무거나 적어도 괜찮습니다.)
    • 테스트 사용자 추가 (선택 사항)
    • 설정을 완료하고 저장

     

    2) OAuth 클라이언트 ID 생성

    • 메뉴 - API 및 서비스 - 사용자 인증 정보의 상단 중앙에 있는 +사용자 인증 정보 만들기의 'OAuth 클라이언트 ID' 클릭
    • 애플리케이션 유형 : '데스크톱 앱' 또는 '웹 애플리케이션' 선택
    • 클라이언트 이름 입력
    • 만들기 클릭하면 클라이언트 ID와 클라이언트 비밀 키가 생성됨
    • 생성된 클라이언트 ID와 비밀 키는 JSON 파일로 다운로드하여 안전하게 보관 (API 요청 시 사용) - client_secret.json 명으로 저장

     

    Python에서 OAuth 2.0 인증 및 API 요청하기

    3개의 API 중 Youtube Analytics API를 요청하는 과정을 정리해보겠습니다. 참고로 저는 Python 3.12.3 버전을 사용 중입니다.

     

    1. 필요한 라이브러리 설치

    먼저, Google API를 다루기 위한 라이브러리를 설치해야 합니다.

    pip3 install google-auth google-auth-oauthlib google-auth-httplib2 google-auth googleapiclient

     

    2. OAuth 인증 코드 실행

    앞서 클라이언트 ID 생성 과정에서 다운받은 json 파일을 python 코드를 실행시킬 디렉토리에 저장합니다.

    youtube_auth.py 파일을 만들어 우선 API가 인증이 되는 지 확인해봅시다.

    from google_auth_oauthlib.flow import InstalledAppFlow
    from googleapiclient.discovery import build
    
    # YouTube Data API & YouTube Analytics API 인증 범위
    SCOPES = [
        "https://www.googleapis.com/auth/youtube.readonly",
        "https://www.googleapis.com/auth/yt-analytics.readonly"
    ]
    
    def authenticate_youtube():
        """ OAuth 2.0을 사용하여 YouTube API 인증 """
        flow = InstalledAppFlow.from_client_secrets_file(
            "client_secret.json", SCOPES
        )
        creds = flow.run_local_server(port=8080)
    
        # API 클라이언트 생성
        youtube = build("youtube", "v3", credentials=creds)
        analytics = build("youtubeAnalytics", "v2", credentials=creds)
    
        return youtube, analytics
    
    if __name__ == "__main__":
        youtube, analytics = authenticate_youtube()
        print("YouTube API 및 YouTube Analytics API 인증 완료!")

     

    실행시켰을 때 아래처럼 동작하면 정상 실행이 된 것입니다.

    • 브라우저에서 Google 계정 로그인 페이지가 열립니다.
    • YouTube Analytics API를 사용하려는 계정을 선택하고 권한을 허용합니다.
    • 인증이 성공하면 터미널에 "YouTube API 및 YouTube Analytics API 인증 완료!" 메시지가 표시됩니다.

     

     

    혹시 위와 같은 오류가 뜬다면 Google Cloud Console에서 OAuth 동의 화면 설정 변경해줘야 합니다.

    • API 및 서비스 - OAuth 동의 화면 이동
    • 테스트 모드로 설정되어 있다면, '배포' 상태를 사용자 제한 없음으로 변경
    • 혹은 '앱 게시' 버튼을 클릭하고 안내에 따라 진행

    이후 다시 youtube_auth.py을 실행시켜 정상 작동되는 지 확인합니다.

     

    3. YouTube 채널 ID 가져오기

    위의 youtube_auth.py에 채널 아이디를 가져오는 함수를 추가해주고 아래 main 내용을 변경해줍니다. 

    def get_channel_id(youtube):
        """현재 로그인한 사용자의 채널 ID 가져오기"""
        request = youtube.channels().list(
            part="id",
            mine=True
        )
        response = request.execute()
    
        if response.get("items"):
            channel_id = response["items"][0]["id"]
            print(f"채널 ID: {channel_id}")
            return channel_id
        else:
            print("채널 ID를 찾을 수 없습니다.")
            return None
    
    if __name__ == "__main__":
        youtube, analytics = authenticate_youtube()
        get_channel_id(youtube)

     

    4. YouTube Analytics API 데이터 가져오기

    이제 채널 통계 데이터를 조회하기 위한 youtube_analytics.py을 생성하겠습니다.

    from youtube_auth import authenticate_youtube, get_channel_id
    
    def get_channel_analytics(analytics, channel_id):
        """YouTube Analytics에서 조회수, 구독자 증가, 시청 시간 데이터 가져오기"""
        request = analytics.reports().query(
            ids=f"channel=={channel_id}",
            startDate="2024-01-01",
            endDate="2024-02-29",
            metrics="views,subscribersGained,estimatedMinutesWatched",
            dimensions="day",
            sort="day"
        )
        response = request.execute()
    
        print("\n📊 날짜별 통계 데이터:")
        for row in response.get("rows", []):
            date, views, subscribers, watch_time = row
            print(f"{date} - 조회수: {views}, 구독자 증가: {subscribers}, 시청 시간(분): {watch_time}")
    
    if __name__ == "__main__":
        youtube, analytics = authenticate_youtube()
        channel_id = get_channel_id(youtube)
        if channel_id:
            get_channel_analytics(analytics, channel_id)

     

    특정 동영상의 조회수, 좋아요, 댓글 수 등을 가져오려면 다음 코드를 실행합니다.

    def get_video_stats(analytics, channel_id):
        """조회수가 높은 동영상 5개 가져오기"""
        request = analytics.reports().query(
            ids=f"channel=={channel_id}",
            startDate="2024-01-01",
            endDate="2024-02-29",
            metrics="views,likes,comments",
            dimensions="video",
            sort="-views",
            maxResults=5
        )
        response = request.execute()
    
        print("\n🎥 인기 동영상 데이터:")
        for row in response.get("rows", []):
            video_id, views, likes, comments = row
            print(f"동영상 ID: {video_id} - 조회수: {views}, 좋아요: {likes}, 댓글: {comments}")
    
    if __name__ == "__main__":
        youtube, analytics = authenticate_youtube()
        channel_id = get_channel_id(youtube)
        if channel_id:
            get_video_stats(analytics, channel_id)

     

    ❌❌ 아래와 같은 오류가 발생했을 때

    YouTube Data API v3가 프로젝트에서 활성화되지 않았거나, 활성화된 지 얼마 되지 않아 아직 적용되지 않은 경우 발생!

    • YouTube Data API v3 활성화 여부 확인
    • API 사용 설정 후 5~10분 기다린 후 다시 실행

     

    5. YouTube 데이터 시각화 (선택)

    데이터를 엑셀(CSV)로 저장하거나 시각화할 수도 있습니다.

    # CSV 파일로 저장
    
    import csv
    
    def save_to_csv(data, filename="youtube_data.csv"):
        with open(filename, mode="w", newline="") as file:
            writer = csv.writer(file)
            writer.writerow(["날짜", "조회수", "구독자 증가", "시청 시간"])
            writer.writerows(data)
    
        print(f"데이터가 {filename}에 저장되었습니다.")
    
    if __name__ == "__main__":
        youtube, analytics = authenticate_youtube()
        channel_id = get_channel_id(youtube)
        if channel_id:
            data = get_channel_analytics(analytics, channel_id)
            save_to_csv(data)
    # Matplotlib을 이용한 조회수 트렌드 그래프
    
    import matplotlib.pyplot as plt
    import datetime
    
    def plot_views(data):
        dates = [datetime.datetime.strptime(row[0], "%Y-%m-%d") for row in data]
        views = [int(row[1]) for row in data]
    
        plt.figure(figsize=(10, 5))
        plt.plot(dates, views, marker="o", linestyle="-", label="조회수")
        plt.xlabel("날짜")
        plt.ylabel("조회수")
        plt.title("YouTube 조회수 트렌드")
        plt.legend()
        plt.grid()
        plt.show()
    
    if __name__ == "__main__":
        youtube, analytics = authenticate_youtube()
        channel_id = get_channel_id(youtube)
        if channel_id:
            data = get_channel_analytics(analytics, channel_id)
            plot_views(data)

     

     

    오늘은 유튜브 API를 사용하는 법에 대해 간단하게 알아보았습니다. 실제로 사용하실 때는 필요한 데이터를 얻기 위한 Metric 등을 확인하여 원하는 대로 바꾸어서 사용해보시면 좋을 것 같습니다.