YouTube Analytics API를 통해 수집할 수 있는 메트릭 항목은 다음과 같습니다. 이 항목들은 API 요청 시 metrics
파라미터로 지정할 수 있습니다.
주요 메트릭 카테고리
- 시청 데이터 관련 메트릭
views
: 조회수estimatedMinutesWatched
: 추정 시청 시간(분 단위)averageViewDuration
: 평균 시청 시간(초 단위)averageViewPercentage
: 평균 시청 비율 (%)
- 구독자 관련 메트릭
subscribersGained
: 증가한 구독자 수subscribersLost
: 감소한 구독자 수subscriberCount
: 총 구독자 수
- 수익 관련 메트릭 (YouTube 파트너 프로그램 사용자 대상)
estimatedRevenue
: 추정 총수익estimatedAdRevenue
: 추정 광고 수익grossRevenue
: 총 수익estimatedRedPartnerRevenue
: YouTube Premium 수익monetizedPlaybacks
: 수익화된 재생수cpm
: 1,000회 노출당 비용
- 동영상 참여 관련 메트릭
likes
: 좋아요 수dislikes
: 싫어요 수comments
: 댓글 수shares
: 공유 수videosAddedToPlaylists
: 재생목록에 추가된 동영상 수videosRemovedFromPlaylists
: 재생목록에서 제거된 동영상 수
- 동영상 콘텐츠 및 재생 관련 메트릭
annotationClickThroughRate
: 주석 클릭율annotationCloseRate
: 주석 닫기율cardClickRate
: 카드 클릭율cardTeaserClickRate
: 카드 티저 클릭율endScreenClickRate
: 엔드스크린 클릭율
주의 사항
- 사용 가능한 메트릭은 선택한
dimensions
및filters
에 따라 다릅니다.- 예를 들어,
day
를dimensions
로 선택하면 일별 데이터가 제공되며, 일부 메트릭은 특정filters
조합에서만 사용 가능합니다.
- 예를 들어,
- 추가 조건
- 수익 관련 메트릭을 수집하려면 채널이 YouTube 파트너 프로그램에 가입되어 있어야 합니다.
- API 버전에 따라 일부 메트릭이 제한될 수 있으니 공식 문서에 명시된 조건을 참고하세요.
현재 사용 중인 dimensions=day
와 metrics=subscribersGained,subscribersLost,views,estimatedMinutesWatched
는 일별 구독자 증감, 조회수, 시청 시간을 수집하는 기본적인 조합입니다. 다른 메트릭도 필요하면 위 목록을 참고해 추가하세요.
YouTube Analytics API에서 한 번의 요청으로 가능한 모든 메트릭을 받는 것은 제한이 있습니다. 이는 API 호출 시 특정 메트릭 조합이 지원되지 않거나 dimensions
와 filters
에 따라 일부 메트릭이 사용할 수 없기 때문입니다. 하지만 모든 메트릭을 수집하려면 여러 API 호출을 통해 데이터를 나눠서 받아야 합니다.
모든 메트릭을 수집하는 방법
- 가능한 메트릭 전체 목록을 그룹화: YouTube Analytics API에서 메트릭을 한 번에 요청할 수 있는 조합을 만들어야 합니다. 메트릭 조합은 문서에서 지원되는
dimensions
와filters
에 따라 다릅니다. - 추천 조합: 아래와 같이 호출 그룹을 나눠 요청합니다.
그룹 1: 콘텐츠 성과 메트릭
dimensions: day
metrics: views, estimatedMinutesWatched, averageViewDuration, averageViewPercentage, subscribersGained, subscribersLost
그룹 2: 참여도 메트릭
dimensions: day
metrics: likes, dislikes, comments, shares, videosAddedToPlaylists, videosRemovedFromPlaylists
그룹 3: 수익 메트릭
dimensions: day
metrics: estimatedRevenue, estimatedAdRevenue, grossRevenue, estimatedRedPartnerRevenue, monetizedPlaybacks, cpm
그룹 4: 인터랙션 메트릭
dimensions: day
metrics: annotationClickThroughRate, annotationCloseRate, cardClickRate, cardTeaserClickRate, endScreenClickRate
모든 메트릭을 수집하는 Python 코드 예제
아래는 YouTube Analytics API에서 모든 메트릭을 나눠 호출하고 결과를 통합하는 예제입니다.
import requests
from google.oauth2.credentials import Credentials
# OAuth 인증을 통해 얻은 액세스 토큰
ACCESS_TOKEN = "your_access_token_here"
BASE_URL = "https://youtubeanalytics.googleapis.com/v2/reports"
# 요청 그룹 정의
groups = [
{"dimensions": "day", "metrics": "views,estimatedMinutesWatched,averageViewDuration,averageViewPercentage,subscribersGained,subscribersLost"},
{"dimensions": "day", "metrics": "likes,dislikes,comments,shares,videosAddedToPlaylists,videosRemovedFromPlaylists"},
{"dimensions": "day", "metrics": "estimatedRevenue,estimatedAdRevenue,grossRevenue,estimatedRedPartnerRevenue,monetizedPlaybacks,cpm"},
{"dimensions": "day", "metrics": "annotationClickThroughRate,annotationCloseRate,cardClickRate,cardTeaserClickRate,endScreenClickRate"},
]
# 함수: API 호출
def fetch_data(group):
params = {
"ids": "channel==MINE",
"startDate": "2023-01-01",
"endDate": "2023-12-31",
"metrics": group["metrics"],
"dimensions": group["dimensions"],
}
headers = {"Authorization": f"Bearer {ACCESS_TOKEN}"}
response = requests.get(BASE_URL, params=params, headers=headers)
return response.json()
# 데이터 수집 및 통합
all_data = []
for group in groups:
result = fetch_data(group)
all_data.append(result)
# 결과 출력
for data in all_data:
print(data)
결과를 통합하여 저장
여러 호출의 데이터를 통합하려면 결과를 CSV 또는 데이터베이스에 저장하면 좋습니다. 이를 위해 pandas
라이브러리를 활용할 수 있습니다.
import pandas as pd
# 예제: 데이터를 pandas DataFrame으로 변환
dataframes = []
for data in all_data:
df = pd.DataFrame(data.get('rows', []), columns=data.get('columnHeaders', []))
dataframes.append(df)
# 통합 DataFrame 생성
final_df = pd.concat(dataframes, ignore_index=True)
# CSV로 저장
final_df.to_csv("youtube_analytics.csv", index=False)
주의사항
- 쿼리 제한: YouTube Analytics API는 일일 쿼리 제한(쿼터)을 가지고 있으므로 모든 데이터를 수집하기 위해 요청 횟수를 조정해야 합니다.
- 최신 메트릭 확인: Google 문서에서 제공하는 최신 메트릭 목록을 주기적으로 확인하세요.
- OAuth 인증: 액세스 토큰은 반드시 유효한 상태로 유지하며 필요시 갱신하세요.
위 코드를 활용하면 모든 메트릭 데이터를 수집하여 분석할 수 있습니다.
YouTube Analytics API에서 제공하는 정확한 수익 관련 지표를 사용하려면, watchTime
은 estimatedMinutesWatched
와는 다르게 YouTube API에서 직접 지원하지 않는 경우가 있습니다. 특히 earnings
관련 데이터를 가져올 때는 YouTube Partner Program(YPP)에 가입된 계정이어야 합니다.
1. 사용 가능한 유효 시청시간 및 수익 관련 지표
YouTube Analytics API에서 사용할 수 있는 유효 시청시간 및 수익 관련 지표는 다음과 같습니다.
메트릭(Metrics) | 설명 |
---|---|
estimatedMinutesWatched |
예상 시청시간 (모든 유형 포함) |
views |
조회수 |
estimatedRevenue |
총 예상 수익 |
adRevenue |
광고 수익 |
redPartnerRevenue |
YouTube Premium 수익 |
playbackBasedCpm |
광고 CPM(천 회 재생 기준 수익) |
cpm |
CPM(천 회 노출 기준 수익) |
monetizedPlaybacks |
수익 창출이 가능한 재생수 |
grossRevenue |
총 수익 (수수료 포함) |
2. 채널의 수익 창출 데이터 조회
def get_monetized_data(youtube, channel_id, start_date, end_date):
analytics = youtube.reports().query(
ids="channel=="+channel_id,
startDate=start_date,
endDate=end_date,
metrics="views,estimatedMinutesWatched,estimatedRevenue,adRevenue,redPartnerRevenue,monetizedPlaybacks",
dimensions="day",
sort="day"
)
response = analytics.execute()
# 데이터 출력
for row in response.get("rows", []):
print(f"{row[0]} - 조회수: {row[1]}, 시청시간(분): {row[2]}, 예상 수익: ${row[3]}, 광고 수익: ${row[4]}, YouTube Premium 수익: ${row[5]}, 수익 창출 재생수: {row[6]}")
# 최근 30일간 수익 창출 관련 데이터 조회
get_monetized_data(youtube, channel_id, start_date, end_date)
views
: 조회수estimatedMinutesWatched
: 예상 시청시간estimatedRevenue
: 총 예상 수익adRevenue
: 광고 수익redPartnerRevenue
: YouTube Premium에서 발생한 수익monetizedPlaybacks
: 수익이 발생한 재생수 (광고가 표시된 재생)
3. 영상별 수익 데이터 조회
특정 영상별 수익 데이터를 가져오려면 dimensions="video"
를 사용합니다.
def get_video_monetized_data(youtube, channel_id, start_date, end_date):
analytics = youtube.reports().query(
ids="channel=="+channel_id,
startDate=start_date,
endDate=end_date,
metrics="views,estimatedMinutesWatched,estimatedRevenue,adRevenue,redPartnerRevenue,monetizedPlaybacks",
dimensions="video",
sort="-estimatedRevenue"
)
response = analytics.execute()
# 데이터 출력
for row in response.get("rows", []):
video_id = row[0]
print(f"영상 ID: {video_id} - 조회수: {row[1]}, 시청시간(분): {row[2]}, 예상 수익: ${row[3]}, 광고 수익: ${row[4]}, YouTube Premium 수익: ${row[5]}, 수익 창출 재생수: {row[6]}")
# 최근 30일간 영상별 수익 데이터 조회
get_video_monetized_data(youtube, channel_id, start_date, end_date)
- 조회수가 많지만 수익이 적은 영상과, 조회수가 적어도 수익이 높은 영상을 비교할 수 있음.
4. 영상 제목과 함께 조회
def get_video_title(youtube, video_id):
request = youtube.videos().list(
part="snippet",
id=video_id
)
response = request.execute()
return response["items"][0]["snippet"]["title"] if response["items"] else "알 수 없음"
def get_video_monetized_data_with_title(youtube, channel_id, start_date, end_date):
analytics = youtube.reports().query(
ids="channel=="+channel_id,
startDate=start_date,
endDate=end_date,
metrics="views,estimatedMinutesWatched,estimatedRevenue,adRevenue,redPartnerRevenue,monetizedPlaybacks",
dimensions="video",
sort="-estimatedRevenue"
)
response = analytics.execute()
# 데이터 출력
for row in response.get("rows", []):
video_id = row[0]
video_title = get_video_title(youtube, video_id)
print(f"영상: {video_title} - 조회수: {row[1]}, 시청시간(분): {row[2]}, 예상 수익: ${row[3]}, 광고 수익: ${row[4]}, YouTube Premium 수익: ${row[5]}, 수익 창출 재생수: {row[6]}")
# 최근 30일간 영상별 수익 데이터 조회 (제목 포함)
get_video_monetized_data_with_title(youtube, channel_id, start_date, end_date)
5. 데이터 저장 및 분석
pandas를 활용해 데이터 저장
import pandas as pd
def get_monetized_data_df(youtube, channel_id, start_date, end_date):
analytics = youtube.reports().query(
ids="channel=="+channel_id,
startDate=start_date,
endDate=end_date,
metrics="views,estimatedMinutesWatched,estimatedRevenue,adRevenue,redPartnerRevenue,monetizedPlaybacks",
dimensions="day",
sort="day"
)
response = analytics.execute()
data = []
for row in response.get("rows", []):
data.append({
"날짜": row[0],
"조회수": row[1],
"시청시간(분)": row[2],
"예상 수익($)": row[3],
"광고 수익($)": row[4],
"YouTube Premium 수익($)": row[5],
"수익 창출 재생수": row[6]
})
return pd.DataFrame(data)
df = get_monetized_data_df(youtube, channel_id, start_date, end_date)
print(df)
# CSV 파일로 저장
df.to_csv("youtube_monetized_data.csv", index=False, encoding="utf-8-sig")
✅ YouTube API에서 watchTime
은 지원되지 않음 → 대신 estimatedMinutesWatched
사용
✅ 수익 창출과 관련된 주요 지표: estimatedRevenue
, adRevenue
, redPartnerRevenue
, monetizedPlaybacks
✅ 영상별 수익 및 유효 시청시간 확인 가능
✅ 데이터를 pandas DataFrame으로 변환 후 CSV로 저장하여 분석 가능
이 방법을 활용하면 YouTube의 수익 창출과 연결된 데이터(시청시간, 수익, 광고 수익 등)를 자동으로 수집하고 분석할 수 있습니다.
YouTube 데이터를 체계적으로 수집, 저장, 분석, 시각화하는 자동화된 파이프라인을 구축하는 방법입니다. 이 파이프라인은 YouTube API → Airflow → Google BigQuery → Looker Studio로 구성되며, 데이터 수집부터 분석까지 자동화할 수 있습니다.
1. 전체 아키텍처 개요
목표
- YouTube Analytics 데이터를 정기적으로 수집 (시청시간, 수익, 조회수 등)
- Google BigQuery에 저장하여 분석 가능하도록 구축
- Looker Studio를 활용하여 대시보드 자동 업데이트
- 모든 작업을 Airflow를 활용하여 자동화
주요 구성 요소
구성 요소 | 역할 |
---|---|
YouTube API | YouTube 데이터 수집 (시청시간, 수익, 조회수 등) |
Docker | Airflow 환경을 컨테이너화하여 배포 및 실행 |
Apache Airflow | YouTube API → BigQuery로 데이터를 ETL 자동화 |
Google BigQuery | 데이터 저장 및 분석 |
Looker Studio | BigQuery 데이터를 시각화하여 대시보드 생성 |
2. YouTube API를 활용한 데이터 수집
YouTube API를 사용하여 views
, estimatedMinutesWatched
, earnings
등의 데이터를 가져옵니다.
YouTube API 활성화 및 인증
- Google Cloud Console에서 YouTube Data API v3 활성화
- OAuth 2.0 인증 정보 생성 및 JSON 다운로드
google-auth
및googleapiclient
라이브러리 설치
pip install google-auth google-auth-oauthlib google-auth-httplib2 googleapiclient pandas
YouTube API를 통한 데이터 수집 코드
아래 Python 코드를 사용하여 YouTube 데이터를 수집할 수 있습니다.
import googleapiclient.discovery
import google_auth_oauthlib.flow
CLIENT_SECRETS_FILE = "client_secret.json"
SCOPES = ["https://www.googleapis.com/auth/youtube.readonly"]
API_SERVICE_NAME = "youtube"
API_VERSION = "v3"
def get_authenticated_service():
flow = google_auth_oauthlib.flow.InstalledAppFlow.from_client_secrets_file(CLIENT_SECRETS_FILE, SCOPES)
credentials = flow.run_local_server(port=0)
return googleapiclient.discovery.build(API_SERVICE_NAME, API_VERSION, credentials=credentials)
youtube = get_authenticated_service()
def get_channel_analytics(youtube, channel_id, start_date, end_date):
request = youtube.reports().query(
ids="channel=="+channel_id,
startDate=start_date,
endDate=end_date,
metrics="views,estimatedMinutesWatched,earnings",
dimensions="day",
sort="day"
)
response = request.execute()
return response["rows"]
data = get_channel_analytics(youtube, "CHANNEL_ID", "2024-01-01", "2024-01-31")
print(data)
이 데이터를 BigQuery에 업로드하여 저장할 수 있습니다.
3. Airflow를 활용한 데이터 자동화
Airflow는 데이터 파이프라인을 관리하고 스케줄링하는 도구입니다.
Airflow 환경 설정 (Docker 기반)
Airflow를 Docker 컨테이너에서 실행하려면 docker-compose.yaml
파일을 설정해야 합니다.
version: '3'
services:
postgres:
image: postgres:13
environment:
POSTGRES_USER: airflow
POSTGRES_PASSWORD: airflow
POSTGRES_DB: airflow
webserver:
image: apache/airflow:latest
restart: always
depends_on:
- postgres
environment:
- AIRFLOW__CORE__EXECUTOR=LocalExecutor
- AIRFLOW__DATABASE__SQL_ALCHEMY_CONN=postgresql+psycopg2://airflow:airflow@postgres/airflow
ports:
- "8080:8080"
command: webserver
컨테이너 실행
docker-compose up -d
Airflow DAG 생성 (YouTube API → BigQuery 자동화)
Airflow에서 DAG(Directed Acyclic Graph)를 정의하여 자동화합니다.
from airflow import DAG
from airflow.operators.python import PythonOperator
from datetime import datetime, timedelta
import pandas as pd
default_args = {
"owner": "airflow",
"depends_on_past": False,
"start_date": datetime(2024, 1, 1),
"retries": 1,
"retry_delay": timedelta(minutes=5),
}
dag = DAG(
"youtube_data_pipeline",
default_args=default_args,
description="Fetch YouTube analytics data and store in BigQuery",
schedule_interval="0 12 * * *",
)
def fetch_youtube_data():
data = get_channel_analytics(youtube, "CHANNEL_ID", "2024-01-01", "2024-01-31")
df = pd.DataFrame(data, columns=["date", "views", "watch_time", "earnings"])
df.to_csv("/tmp/youtube_data.csv", index=False)
task_fetch = PythonOperator(
task_id="fetch_youtube_data",
python_callable=fetch_youtube_data,
dag=dag,
)
task_fetch
4. Google BigQuery에 데이터 저장
YouTube 데이터를 BigQuery로 업로드하여 분석할 수 있도록 합니다.
BigQuery 테이블 생성
CREATE TABLE youtube_data (
date DATE,
views INT64,
watch_time INT64,
earnings FLOAT64
);
Python을 활용한 BigQuery 데이터 업로드
from google.cloud import bigquery
client = bigquery.Client()
table_id = "your_project.youtube_dataset.youtube_data"
job_config = bigquery.LoadJobConfig(
source_format=bigquery.SourceFormat.CSV,
autodetect=True,
)
with open("/tmp/youtube_data.csv", "rb") as source_file:
job = client.load_table_from_file(source_file, table_id, job_config=job_config)
job.result()
print("Data loaded into BigQuery!")
5. Looker Studio를 활용한 데이터 시각화
BigQuery 데이터를 Looker Studio에 연결
- Looker Studio에 접속
- 데이터 소스로 Google BigQuery 선택
youtube_data
테이블을 연결하여 그래프 및 대시보드 생성- 시청시간, 수익, 조회수 트렌드를 시각화
6. 전체 자동화 파이프라인 요약
데이터 흐름
- YouTube API: YouTube 데이터를 가져옴
- Airflow DAG: API 호출 및 데이터 저장을 자동화
- BigQuery: 데이터를 저장 및 분석 가능하도록 구축
- Looker Studio: 데이터를 시각화하여 분석 가능
기대 효과
- YouTube 데이터를 자동으로 수집 및 저장
- Google BigQuery를 활용한 대규모 데이터 분석 가능
- Looker Studio를 통한 실시간 대시보드 제공
- Airflow를 활용한 완전 자동화 시스템 구축
이 방법을 적용하면 YouTube API 데이터를 자동으로 수집, 저장, 분석, 시각화하는 완전 자동화된 파이프라인을 구축할 수 있습니다.
✔ YouTube API → Airflow → BigQuery → Looker Studio
✔ 완전 자동화 및 확장 가능
✔ 데이터 기반 YouTube 운영 최적화 가능
댓글