AI를 활용한 재밌는 것들을 개발합니다

2026년 4월 26일 일요일

유튜브 Data API 연동 코드 전체 공개 [Claude Code · 유튜브분석기 · 2편]

YouTube Data API v3 Python 코드 공개

유튜브 Data API 연동 코드 전체 공개
— 채널 수집부터 통계까지

API 키 발급부터 실제 데이터 수집까지, 따라 하기만 하면 됩니다.

📌 시리즈 2편입니다
1편에서 전체 시스템 구조를 설명했습니다. 이번 편은 YouTube Data API 연동 코드를 전체 공개합니다.

YouTube Data API v3 준비

API 키 발급 방법

1
Google Cloud Console 접속 → 새 프로젝트 생성
2
좌측 메뉴 → API 및 서비스 → 라이브러리 → "YouTube Data API v3" 검색 → 사용 설정
3
사용자 인증 정보 → API 키 만들기 → 생성된 키 복사
4
프로젝트 루트의 .env 파일에 추가:
YOUTUBE_API_KEY=여기에_붙여넣기
⚠️ 할당량 주의
YouTube Data API는 하루 10,000 units 무료 제공됩니다. 검색 1회 = 100 units. 무분별하게 호출하면 하루 만에 소진됩니다.

할당량 절약 전략: 채널 목록 고정 관리

매주 "어떤 채널이 탑 채널인지" 검색하는 것 자체가 할당량을 낭비합니다. 그래서 저는 채널 목록을 코드에 하드코딩하고, 매주 해당 채널의 최신 영상만 가져오는 방식을 택했습니다.

# tools/fetch_tools.py

NICHE_CHANNELS = {
    "수익성 브랜드": [
        # 👇 채널 ID 찾는 법: 채널 페이지 → 소개 탭 → '채널 공유' → 채널 ID 복사
        # URL이 youtube.com/channel/UCxxx 형태라면 UCxxx 부분이 채널 ID입니다
        "UC여기에_채널ID_붙여넣기",
        "UC여기에_채널ID_붙여넣기",
    ],
    "콘텐츠 수익화": [
        "UC여기에_채널ID_붙여넣기",
        "UC여기에_채널ID_붙여넣기",
    ],
    "1인 사업 런칭": [
        "UC여기에_채널ID_붙여넣기",
        "UC여기에_채널ID_붙여넣기",
    ],
}
채널 ID 확인하는 방법
채널 페이지 → 소개 → 채널 공유 → 채널 ID 복사
또는 URL이 youtube.com/channel/UC... 형태라면 UC... 부분이 채널 ID입니다.

실제 코드 전체 공개

1. 채널 인기 영상 수집

import os
from googleapiclient.discovery import build

def get_popular_videos(channel_id: str, max_results: int = 10) -> list[dict]:
    """채널의 최근 인기 영상 목록 조회"""
    youtube = build("youtube", "v3", developerKey=os.environ["YOUTUBE_API_KEY"])

    # 채널의 업로드 재생목록 ID 조회
    ch_resp = youtube.channels().list(
        part="contentDetails",
        id=channel_id
    ).execute()

    uploads_id = (
        ch_resp["items"][0]["contentDetails"]
        ["relatedPlaylists"]["uploads"]
    )

    # 재생목록에서 최근 영상 ID 수집
    pl_resp = youtube.playlistItems().list(
        part="contentDetails",
        playlistId=uploads_id,
        maxResults=max_results
    ).execute()

    video_ids = [
        item["contentDetails"]["videoId"]
        for item in pl_resp["items"]
    ]

    return get_video_stats(video_ids)

2. 영상 통계 수집

def get_video_stats(video_ids: list[str]) -> list[dict]:
    """조회수·좋아요·댓글 등 영상 통계 수집"""
    youtube = build("youtube", "v3", developerKey=os.environ["YOUTUBE_API_KEY"])

    resp = youtube.videos().list(
        part="snippet,statistics",
        id=",".join(video_ids)
    ).execute()

    videos = []
    for item in resp.get("items", []):
        stats = item.get("statistics", {})
        snippet = item["snippet"]
        videos.append({
            "video_id":      item["id"],
            "title":         snippet["title"],
            "channel_title": snippet["channelTitle"],
            "published_at":  snippet["publishedAt"],
            "tags":          snippet.get("tags", []),
            "view_count":    int(stats.get("viewCount", 0)),
            "like_count":    int(stats.get("likeCount", 0)),
            "comment_count": int(stats.get("commentCount", 0)),
        })

    return sorted(videos, key=lambda v: v["view_count"], reverse=True)

3. FetchAgent — 전체 분야 수집 조율

# agents/fetch_agent.py
from tools.fetch_tools import NICHE_CHANNELS, get_popular_videos

class FetchAgent:
    def run(self) -> dict[str, list[dict]]:
        print("[FetchAgent] YouTube 데이터 수집 시작")
        niche_data = {}

        for niche, channel_ids in NICHE_CHANNELS.items():
            all_videos = []
            for ch_id in channel_ids:
                videos = get_popular_videos(ch_id, max_results=10)
                all_videos.extend(videos)

            # 분야별 조회수 기준 상위 20개만 유지
            niche_data[niche] = sorted(
                all_videos,
                key=lambda v: v["view_count"],
                reverse=True
            )[:20]
            print(f"  ✔ {niche}: {len(niche_data[niche])}개 수집")

        return niche_data

실제 수집된 데이터 구조

한 번 실행하면 이런 형태의 데이터가 수집됩니다:

{
  "수익성 브랜드": [
    {
      "video_id": "abc123",
      "title": "퍼스널 브랜딩으로 월 1000만 버는 법",
      "channel_title": "브랜드채널",
      "view_count": 284000,
      "like_count": 8200,
      "tags": ["퍼스널브랜딩", "수익화", "1인기업"]
    },
    ...
  ]
}

API 할당량 계산

작업units 소모주당 실행 횟수합계
채널 업로드 목록 조회1채널 수 × 1~10
재생목록 아이템 조회1채널 수 × 1~10
영상 통계 조회1배치당 1~10
합계~30 units

하루 10,000 units 중 30만 쓰니 할당량 걱정은 전혀 없습니다.


다음 편 예고

3편에서는 수집한 데이터를 Gemini AI로 분석하고, PDF로 만들어 Gmail로 자동 발송하는 과정을 공개합니다.

댓글 없음:

댓글 쓰기

가장 많이 본 글