Youtube API - Data V3

박단이·2024년 2월 14일

프로젝트 정리

목록 보기
1/1

데브코스 최종 프로젝트에서 Youtube API를 통해 실시간 스트리밍 중인 방송의 정보를 가져오는 부분을 맡게 됐다.
Youtube 정보는 다른 프로젝트에서 사용할 수도 있기 때문에 블로그로 API를 조금 정리해본다.

우선 Youtube Data API에는 3가지 종류가 있다.

  1. Youtube Data API
    : 필요한 데이터는 여기에 있다! GCP에서 API key를 발급받아서 사용하면 된다.
  2. Youtube Analytics API
    : 우리는 통계적으로 정리된 데이터가 아니라 실시간 정보가 필요하기 때문에 이 API는 사용하지 않았다.
  3. Youtube Live Streaming API
    : 이 API가 가장 필요할 것이라 여겼지만, 자신이 킨 방송에 대한 정보만 받을 수 있기 때문에 필요없었다.
    이 API는 방송에 대한 세팅도 할 수 있기 때문에 OAuth 2.0 자격증명이 필요하다. 이것 때문에 하루를 썼는데...ㅜ

위와 같은 이유로 우리는 Youtube Data API만 사용하여 데이터를 가져오기로 했다. 실시간 정보라고 했지만 웹소켓을 제공하지는 않기 때문에 5~10분이라는 짧은 간격으로 데이터를 불러오도록 진행할 예정이다.

Youtube API Credit

  • youtube API는 무료로 쓸 수 있고 하루 할당량은 10,000 크레딧
  • 최대 API key 를 12개 만들 수 있으므로 120,000크레딧까지 쓸 수 있다고 한다. 더 늘리고 싶으면 늘릴 수 있지만 구글에서 답을 늦게 준다.
  • 사용하는 API에 따라서 사용되는 크레딧이 다르므로 사용할 API에 따라서 계산할 것
  • list를 받아오는 것은 대부분 credit 1을 사용하지만, 검색(search) API는 한번에 100씩 사용한다. 이게 제일 문제...

DATA API

여러 가지 API를 제공하지만 내가 필요한 건 검색 API와 동영상 API이다. 특정 게임 스트리머를 정해서 그 스트리머가 방송을 켰을 때 5~10분 마다 방송의 정보를 불러와야 한다.
이 과정을 차례대로 작성해보면

  1. 게임 스트리머가 생방송을 하고 있는지 아닌지 확인한다.
    (이 과정은 다른 DAG를 통해 확인)
  2. 방송을 하고 있는 게임 스트리머의 channel에 접속하여 해당 생방송의 id를 알아낸다. => search()
    생방송의 정보를 얻기 위해서는 해당 방송의 id가 필수!
    그 정보는 search를 통해서만 알 수 있다.
  3. 생방송의 id를 통해 현재 시청자수를 얻어낸다. => videos()
from googleapiclient.discovery import build
import pandas as pd
import time
from datetime import datetime

api_key = 'api_key'
youtube = build('youtube', 'v3', developerKey=api_key)

# 동영상 ID를 찾기 위한 search() 
request = youtube.search().list(
	part="snippet",
    eventType="live",   # 현재 생방송을 진행하고 있는 영상만 찾아올 수 있게 한다.
    type="video",		# 방송은 video이기 때문에 이 설정 필수
    regionCode='KR',
    channelId = '알고 싶은 channel의 id'
)

response = request.execute()
# 동영상 id
video_id = response['items'][0]['id']['videoId']

# 동영상 id를 통해 시청자 수를 가져오기
request = youtube.videos().list(
	part="snippet,liveStreamingDetails",
	id = video_id
)
        
response = request.execute()
# 현재 시청자 수
viewer_num = response['items'][0]['liveStreamingDetails']['concurrentViewers']

위의 코드 외에도 다른 python 코드 몇 개만 두고 이만 총총...

# Youtube 연결하기
from googleapiclient.discovery import build

youtube = build('youtube', 'v3', developerKey='api_key')

# query를 사용하여 youtube 동영상 서치
request = youtube.search().list(
    part="snippet",
    maxResults=25,
    q="하마",
    regionCode='kr'
)
response = request.execute()

# 해당 동영상 댓글 검색
request = youtube.commentThreads().list(
    part="snippet,replies",
    videoId="videoId"
)
response = request.execute()


# 특정 video id 를 사용한 영상 정보
# liveStreamingDetails 안에 실시간 조회수를 담고 있다.
request = youtube.videos().list(
    part="snippet,contentDetails,statistics,liveStreamingDetails",
    id="ON6XV5YCCiI"
)
response = request.execute()


# 카테고리 아이디를 사용해서 인기있는 영상
request = youtube.videos().list(
    part="snippet,contentDetails,statistics",
    chart="mostPopular",
    regionCode="KR",
    videoCategoryId="20"
)
response = request.execute()
profile
데이터 엔지니어를 꿈꾸는 주니어 입니다!

0개의 댓글