본문 바로가기
문송충의 코딩하기/파이썬 데이터 분석

[파이썬] - 유튜브 API를 활용해서 네고왕 조회, 좋아요, 댓글 수 가져오기

by 동장군님 2020. 11. 14.
728x90
반응형

[파이썬] - 유튜브 API를 활용해서 네고왕 조회, 좋아요, 댓글 수 가져오기

요즘 유튜브에서 가장 핫한 콘텐츠 중에 하나가 바로 네고왕이다. 광희 목소리가 부담스러워서 나는 한 번도 콘텐츠를 시청하지 않았지만 주변에 물어보면 네고왕이 굉장히 인기가 많아 보여서 이번 포스팅에서 해당 유튜브 콘텐츠를 분석해보고자 한다. 우선 네고왕 콘텐츠 리스트를 다 가져와서 영상별로 영상 타이틀, 조회, 좋아요, 싫어요, 댓글 수를 가져와서 테이블화 하도록 하겠다. 코드는 크게 어렵지 않다. 우선 유의할 점은 코드를 작성하기 전에 Youtube API를 발급해야 한다.

 

네고왕 PlayList Id 값

유튜브 채널에는 각 콘텐츠 별로 특정 ID값이 부여가 된다. 네고왕 콘텐츠를 제작하는 달라스튜디오 채널에도 발명왕, 네고왕 각 콘텐츠 별로 ID값이 있기 때문에 아래 코드를 통해 네고왕 ID 값을 가져오도록 하겠다. 아래 코드를 돌리면 아래 표처럼 달라스튜디오의 플레이리스트 이름과 ID 값을 확인할 수 있을 것이다.

from googleapiclient.discovery import build
from googleapiclient.errors import HttpError
from oauth2client.tools import argparser

DEVELOPER_KEY = "~" #유튜브 API 키 값
YOUTUBE_API_SERVICE_NAME = "youtube"
YOUTUBE_API_VERSION = "v3"

youtube = build(YOUTUBE_API_SERVICE_NAME, YOUTUBE_API_VERSION,developerKey=DEVELOPER_KEY)

search_response = youtube.search().list(
    q = "달라스튜디오",
    order = "relevance",
    part = "snippet",
    maxResults = 50
    ).execute()
    
channel_id=search_response['items'][0]['id']['channelId']

playlists=youtube.playlists().list(
    channelId= channel_id,
    part = "snippet",
    maxResults=20
).execute()

import pandas as pd

ids=[]
titles=[]
for i in playlists['items']:
    ids.append(i['id'])
    titles.append(i['snippet']['title'])
    
df=pd.DataFrame([ids,titles]).T
df.columns=['PlayLists','Titles']

 

 

네고왕 영상 LIST

위에서 네공왕 플레이리스트 ID 값을 확인했다면 이걸 통해 플레이리스트에 있는 영상 리스트를 가져오도록 하겠다. 여기서는 우선 영상 타이틀과 유튜브 영상 하나하나에 부여된 영상 ID값을 가져오겠다.

 

nego=df['PlayLists'][2]
playlist_videos=youtube.playlistItems().list(
    playlistId= nego,
    part = "snippet",
    maxResults=50,
)
playlistitems_list_response = playlist_videos.execute()

video_names=[]
video_ids=[]
date=[]

for v in playlistitems_list_response['items']:
    video_names.append(v['snippet']['title'])
    video_ids.append(v['snippet']['resourceId']['videoId'])
    date.append(v['snippet']['publishedAt'])
    
vdf=pd.DataFrame([date,video_names,video_ids]).T
vdf.columns=['Date','Title','IDS']

 

데이터 추출 결과 영상이 총 14개인 점을 확인할 수 있다.

 

 

 

 

네고왕 영상 Stats(Views, Likes, Dislikes, Comments)

Youtube API에서는 영상의 ID값만 있다면 영상 관련 수치를 다 가져올 수 있다. 영상 수치라고 하면 당연히 조회, 좋아요, 싫어요, 댓글 영상을 보는 유저의 반응 관련 수치라고 볼 수 있다. 네고왕이 엄청 핫하다고 하는데 실제로 영상을 보는 유저들의 반응이 어떤지 보겠다.

 

import re

category_id=[]
views=[]
likes=[]
dislikes=[]
comments=[]
mins =[]
seconds=[]
title=[]

for u in range(len(vdf)):
    request = youtube.videos().list(
        part="snippet,contentDetails,statistics",
        id=vdf['IDS'][u]
    )
    response = request.execute()
    
    if response['items']==[]:
        ids.append("-")
        category_id.append("-")
        views.append("-")
        likes.append("-")
        dislikes.append("-")
        comments.append("-")

    else:

        title.append(response['items'][0]['snippet']['title'])
        category_id.append(response['items'][0]['snippet']['categoryId'])
        views.append(response['items'][0]['statistics']['viewCount'])
        likes.append(response['items'][0]['statistics']['likeCount'])
        dislikes.append(response['items'][0]['statistics']['dislikeCount'])
        comments.append(response['items'][0]['statistics']['commentCount'])    
        
nego_df=pd.DataFrame([title,category_id,views,likes,dislikes,comments]).T
nego_df.columns=['title','category_id','views','likes','dislikes','comments']

 

위 코드로 데이터 추출하면 아래와 같은 결과물을 확인할 수 있다. 조회수가 기본적으로 백만 단위고 댓글도 수천 단위인 것을 보아 확실히 핫한 영상인 듯 싶다.

 

 

 

 

이번 포스팅은 여기까지 하고 다음 영상에는 이번 데이터를 가지고 시각화를 해보도록 하겠다. 끝!

 

 

 

 

 

728x90
반응형

댓글