유튜브 API 영상 가져 오기 - yutyubeu API yeongsang gajyeo ogi

Normal

Youtube에 내가 즐겨보는 '팩토리' 라는 유튜버가 있다.

이 유튜버의 컨텐츠는 사람들의 흥미를 잘 이끌고, 나도 한번? 이라는 생각을 만들게한다.

어느날 팩토리 유튜버가 다음과 같은 영상을 올렸다.

유튜브 API 영상 가져 오기 - yutyubeu API yeongsang gajyeo ogi

영상을 하나 올려서 좋아요 수가 가장 많은 영상에 200만원, 그 다음 영상엔 100만원을 주는 이벤트였다.

나는 그래서 #팩토리챌린지를 검색해서 얼마나 많은 영상이 있는지 검색해보았다.

유튜브 API 영상 가져 오기 - yutyubeu API yeongsang gajyeo ogi

동영상만 6200개, 참여채널은 5000개가 넘었다.

그래서 나는 생각해보았다.

전체 영상을 보고 가장 많은 좋아요 수를 받은 영상을 찾기 어렵지않을까?

그래서 youtube API를 이용하여서 좋아요 수가 가장 많은 영상 best 6를 뽑아보자!


0. Youtube API key 생성

https://console.cloud.google.com/apis/dashboard

Google Cloud Platform

하나의 계정으로 모든 Google 서비스를 Google Cloud Platform을 사용하려면 로그인하세요.

accounts.google.com

먼저 Project를 생성 해야한다.

유튜브 API 영상 가져 오기 - yutyubeu API yeongsang gajyeo ogi

프로젝트 이름을 설정하고 만들기 Click!

유튜브 API 영상 가져 오기 - yutyubeu API yeongsang gajyeo ogi

라이브러리 탭으로 이동!

유튜브 API 영상 가져 오기 - yutyubeu API yeongsang gajyeo ogi

youtube를 검색하고, 상단 3개를 전부 눌러서 사용설정 해준다.

유튜브 API 영상 가져 오기 - yutyubeu API yeongsang gajyeo ogi

다시 돌아와서 사용자 인증 정보 탭으로 이동한다.

사용자 인증 정보 만들기를 누른뒤 'API키'를 누른다.

유튜브 API 영상 가져 오기 - yutyubeu API yeongsang gajyeo ogi

그러면 API 키가 생성되는 것을 볼 수 있다.


1. Youtube API 본격 파헤치기

https://developers.google.com/youtube/v3/code_samples/python?hl=ko 

Python 코드 예  |  YouTube Data API  |  Google Developers

Python용 Google API 클라이언트 라이브러리를 사용하는 다음 코드 샘플은 YouTube Data API에 사용할 수 있습니다. 이 코드 샘플들은 GitHub의 YouTube API 코드 샘플 리포지토리의 python 폴더에서 받으실 수

developers.google.com

Youtube API를 쓸려면 라이브러리를 또 따로 설치해 주어야 한다.

유튜브 API 영상 가져 오기 - yutyubeu API yeongsang gajyeo ogi
pycharm interpreter(ctrl + alt + s)

이제 Youtube API 문서쪽을 한 번 보자.

유튜브 API 영상 가져 오기 - yutyubeu API yeongsang gajyeo ogi

리소스 및 유형에서 쭉 살펴보니 내가 필요한건 video이다.

video를 검색해서 조회수와 좋아요 수를 가져와야 한다.

유튜브 API 영상 가져 오기 - yutyubeu API yeongsang gajyeo ogi

더불어서 API는 무료로 쓰면 할당량이 존재하기 때문에, 무작정 실행해볼 수 없다.

그리고 만들면서 TEST 해보았는데, 1번 실행이 1번의 API 사용이 아닌듯하다.

유튜브 API 영상 가져 오기 - yutyubeu API yeongsang gajyeo ogi

다음으로 중요한 부분 리소스인다.

우리는 part의 매개변수에 snippet과 statistics를 통해 좋아요 수와 조회 수를 가져올 것이다.

빠르게 코드를 살펴보자.


2. 파이썬 코드 파헤치기

from googleapiclient.discovery import build
import pandas as pd
import operator


class Factory_chellenge_youtube_api:
    def __init__(self):
        self.developer_key = '<your_apikey>'
        self.youtube_api_service_name = "youtube"
        self.youtube_api_version = 'v3'

    def videoID_likes(self):
        youtube = build(self.youtube_api_service_name, self.youtube_api_version, developerKey=self.developer_key)

        search_response = youtube.search().list(
            q='#팩토리챌린',
            order='viewCount',
            part='snippet',
            maxResults=6
        ).execute()
        # print(search_response)
        # 검색을 위한 videoID 추출
        videoIds = []
        for i in range(0, len(search_response['items'])):
            videoIds.append((search_response['items'][i]['id']['videoId']))

        channel_title_lst = []  # 채널 이름을 담는 리스트
        channel_rating_good = []  # 채널 좋아요 수를 담는 리스트
        dicts = {}  # 채널 이름 + 좋아요 수

        # 영상이름, 조회수 , 좋아요 등 정보 등 추출
        for k in range(0, len(search_response['items'])):
            videoIdslists = youtube.videos().list(
                part='snippet, statistics',
                id=videoIds[k],
            ).execute()

            # Channel title 입력
            channel_title_lst.append(videoIdslists['items'][0]['snippet'].get('channelTitle'))

            # 좋아요 입력
            channel_rating_good.append(videoIdslists['items'][0]['statistics'].get('likeCount'))

        for title_plus_rating in zip(channel_title_lst, channel_rating_good):
            dicts[title_plus_rating[0]] = int(title_plus_rating[1])
        sdicts = sorted(dicts.items(), key=operator.itemgetter(1), reverse=True)

        return sdicts

    def channelID_likes_DataFrame(self, sdicts):
        df = pd.DataFrame(sdicts)
        df.columns = ['Channel_title', 'Video_likes']
        print("######################################")
        print("#                                    #")
        print("#            팩토리챌린지              #")
        print("#             조 회 수                #")
        print("#              TOP6                  #")
        print("#                                    #")
        print("######################################")
        print(df)

        # df.to_csv(r"C:\Users\Student\PycharmProjects\k8s_python\result.csv",
        #           encoding='utf-8-sig')

Factory_chellenge = Factory_chellenge_youtube_api()  # 최초 class 선언
channelID_likes_sum = Factory_chellenge.videoID_likes()  # 좋아요 + 조회수 추출
Factory_chellenge.channelID_likes_DataFrame(channelID_likes_sum)  # 데이터프레임화

class를 통해 기본설정을 하였고 videoID를 통한 likes수 뽑기, 그 후 DataFrame를 통해 간편하게 출력하였다.

 search_response = youtube.search().list(
            q='#팩토리챌린',
            order='viewCount',
            part='snippet',
            maxResults=6

이 부분에 q='' 부분이 검색창에 넣을 이름이다.

'#팩토리챌린'이라고 검색한 이유는 Full Name을 넣으면 다른 영상까지 참조되므로 순위가 다르게 표시된다.
order는 조회 수, part는 snippet를 사용하였고, maxResults는 최대 100개까지 된다.

위의 코드를 하나하나씩 설명해주면 좋지만, 필요한 사람이 있으면 가져가서 하나씩 debugging 해보길 바란다.

궁금한점이 있으면 댓글로 남겨주시면 항상 블로그를 보고있으므로 하루내에 답변이 가능하다.


3. 결과 & 비하인드 스토리

유튜브 API 영상 가져 오기 - yutyubeu API yeongsang gajyeo ogi

이렇게 1위부터 6위까지 뽑을 수 있었다.

현재 신남성연대가 좋아요수 162731회 이다. (현재 2021. 07. 15. 23:23분 기준)

유튜브 API 영상 가져 오기 - yutyubeu API yeongsang gajyeo ogi

누수없이 잘 적용되는 모습이다.

근데 유튜브에 간편하게 확인할 수 있는 기능이 있어부려써~~...

유튜브 API 영상 가져 오기 - yutyubeu API yeongsang gajyeo ogi
그래서 망했따 ㅋㅋ

심지어 2순위 '두두' 이분은 조회 수는 낮은데 좋아요 봇을 써서 8만 회 가까이 좋아요가 찍혔다.


나는 조회 수가 많으면 좋아요 수도 많겠지라는 생각으로 접근했는데, 좋아요 봇를 쓰는 사람이 나올 줄은 생각도 못 했다.


4. Side Project 소감

이렇게 간단하게 만든 것도 side project라고하나? Side project에 대해 정리해보아야겠다. 

일단은, 저번에 Virustotal API를 이용한것 이후로 두번째로 API를 이용해보았다.

사실 나는 컴퓨터를 처음 배울때 사람들이 'API 쓰면 좋다, 'API가 편하지!' 하길래 대체 API가 뭐길래 많이 쓰고, 편하다고 하는걸까 궁금해했다.

막상 4학년이 되고, 여러 가지 project를 하면서 Crwaling 이외에 해당 사이트에서 정보를 얻기에는 어려움이 있었는데

이러한 어려움을 쉽게 해결해 주는 것이 바로 API였다.

한편으로는 이런 API를 만들어서 사용자들이 쉽게 쓰도록 하는 개발자분들도 대단하다고 생각했다.

Youtube API는 역시 TOP 기업인 goolge답게 문서에도 설명이 친절하게 잘 되어있다. (언어도 많이 지원함!)

딱 켰을 때는 문서들의 말이 무슨 말인지 모를 수 있는데, 하나하나씩 이해하면서 읽어가면 생각보다 쉽고 활용도 가능하다!

또한 다른 사람들이 youtube API를 이용해서 만든 코드를 debugging 하면서 내 걸로 만드는 것도 괜찮다고 본다.

나도 그렇게 해서 youtube API를 이해하고, 내가 만들고 싶은 프로그램을 만들었으니까

이상으로 이번 Youtube API를 이용하여 팩토리챌린지 좋아요 및 순위 가져오기 project는 끝마치고 ~

또다른 나의 불편함을 해결해줄 코드로 다시 돌아오겠다~~ Coming soon!!!