1. 유튜브 API로 과거 구독자 수를 알 수 있을까?
먼저 궁금했던 건 "과거 특정 시점의 구독자 수를 유튜브 API로 알 수 있는가"였습니다. 결론부터 말하자면, 안타깝게도 불가능합니다.
plaintext
GET https://www.googleapis.com/youtube/v3/channels?part=statistics&id={CHANNEL_ID}&key={API_KEY}
이 요청은 subscriberCount로 최신 구독자 수를 반환하지만, 과거 데이터(예: 2023년 5월 1일의 구독자 수)는 제공하지 않습니다. 이유는 유튜브가 API 사용자에게 과거 기록을 공식적으로 열어주지 않기 때문이죠.
대안은?
-
YouTube Analytics API: 본인 채널이라면 일별 구독자 수 변화를 확인할 수 있지만, 타인의 채널에는 적용 불가.
-
Social Blade: 서드파티 서비스로 과거 데이터를 추정할 수 있지만, 정확도가 완벽하지 않음.
-
직접 수집: 매일 API로 데이터를 저장하면 미래에 과거 데이터를 만들 수 있죠(지금 시작해야 한다는 점!).
2. 특정 채널의 평균 조회수와 롱폼/숏폼 분리 가능?
다음 질문은 "특정 채널의 평균 조회수를 구할 수 있는가"와 "롱폼과 숏폼을 나눠서 계산할 수 있는가"였습니다. 이건 가능합니다, 하지만 약간의 작업이 필요합니다.
평균 조회수 구하기
-
Search.list로 채널의 동영상 목록을 가져옵니다.
-
Videos.list로 각 동영상의 statistics.viewCount를 수집합니다.
-
조회수를 합산하고 동영상 수로 나누면 끝!
롱폼 vs 숏폼 나누기
유튜브 API는 Shorts와 일반 동영상을 명시적으로 구분하지 않지만, contentDetails.duration을 활용하면 됩니다.
예를 들어:
-
60초 이하: 숏폼(Shorts)
-
60초 초과: 롱폼
Python 코드로 구현하면:
longform_views = [video["statistics"]["viewCount"] for video in videos if parse_duration(video["contentDetails"]["duration"]).total_seconds() > 60]
shorts_views = [video["statistics"]["viewCount"] for video in videos if parse_duration(video["contentDetails"]["duration"]).total_seconds() <= 60]
avg_longform = sum(longform_views) / len(longform_views)
avg_shorts = sum(shorts_views) / len(shorts_views)
주의점: 60초 기준은 근사치일 뿐, 일부 예외가 있을 수 있습니다.
3. 1GB에 얼마나 많은 영상 정보를 저장할 수 있을까?
이제 데이터를 DB에 저장한다고 가정하고, [썸네일이미지] [영상길이] [영상제목] [조회수] [구독자수] [채널명] [게시일]를 포함한 레코드 1개당 크기를 계산해봤습니다.
크기 추정
-
썸네일 이미지: 평균 30KB (URL 대신 이미지 자체 저장 가정).
-
영상 길이: 4바이트 (초 단위 정수).
-
영상 제목: 50바이트 (평균 40자).
-
조회수: 4바이트.
-
구독자수: 4바이트.
-
채널명: 30바이트 (평균 20자).
-
게시일: 8바이트 (타임스탬프).
총합: 약 30,820 바이트. DB 오버헤드(10%)를 추가하면 33,902 바이트.
4. 유튜브 API로 모든 데이터 가져오기
마지막으로, 위 항목들을 API로 수집할 수 있는지 확인해봤습니다. 네, 가능합니다!
필요한 엔드포인트는 두 가지:
-
Videos.list: [썸네일이미지] [영상길이] [영상제목] [조회수] [채널명] [게시일] 제공.
-
Channels.list: [구독자수] 제공.
video = youtube.videos().list(part="snippet,contentDetails,statistics", id="VIDEO_ID").execute()["items"][0]
channel = youtube.channels().list(part="statistics", id=video["snippet"]["channelId"]).execute()["items"][0]
data = {
"thumbnail": video["snippet"]["thumbnails"]["high"]["url"],
"duration": video["contentDetails"]["duration"],
"title": video["snippet"]["title"],
"views": video["statistics"]["viewCount"],
"subscribers": channel["statistics"]["subscriberCount"],
"channel_name": video["snippet"]["channelTitle"],
"published": video["snippet"]["publishedAt"]
}
유튜브 API는 강력한 도구지만, 과거 데이터를 얻는 데는 한계가 있고, 원하는 정보를 얻으려면 약간의 창의성과 추가 작업이 필요합니다. 평균 조회수를 구하거나 DB에 데이터를 쌓는 건 충분히 가능하고, 이를 통해 재미있는 분석도 해볼 수 있을 것 같아요. 다음에는 실제로 데이터를 수집해서 간단한 분석 프로젝트를 진행해볼까 고민 중입니다.
'DEVLOG > Python' 카테고리의 다른 글
[Python] 피보나치 수열 7.7배 빠르게 계산하는 방법 (0) | 2021.04.06 |
---|---|
아직도 파이썬 디버깅할때 print 또는 log 쓰세요? (0) | 2021.04.03 |
진작 알았더라면 좋았을 파이썬(Python) 기능 5가지 (0) | 2020.01.03 |
Django - No such table: main.auth_user__old 해결하기 (0) | 2019.10.22 |
[Django] No module named 'django.core.urlresolvers' 해결방법 (1) | 2019.10.11 |
댓글