본문 바로가기
#개발 이야기 - 개발, IT 트렌드/AI 이야기

ChatGPT로 노아 ai 10분 만에 후다닥 만들어 보자 | 엉아 ai | 비개발자도 가능

by DrinkAloneTogether 2023. 2. 15.
728x90
반응형

aI 이야기
#AI 이야기
chatGPT 로고
chatGPT 로고

요즘 chatGPT가 아주 핫하다.
Open AI에서 만든 대화형 인공지능.
간단한 질문에 대한 대답부터 글/코드 작성까지 아주 다재다능한 녀석이다.

노아ai 로고
노아ai 로고

그리고 또 한 가지! 노아ai도 아주 핫하다.
유튜브를 시작하는, 또는 채널을 키워보고 싶은 사람들에게 AI와 빅데이터를 이용하여
유튜브 채널을 운영하기 위한 인사이트를 제공하는 서비스이다.
그러면 위에서 얘기한 chatGPT를 이용해서 노아ai를 직접 만들어보면 어떨까?
내가 주로 사용하는 아이디는 hounga13 이므로
(엉아라고 발음한다. 그렇다면 그런거다.)

엉아ai

를 만들어보자.
아! 시작하기 전에 chatGPT 가입하고 오자.
https://openai.com/blog/chatgpt/

 

ChatGPT: Optimizing Language Models for Dialogue

We’ve trained a model called ChatGPT which interacts in a conversational way. The dialogue format makes it possible for ChatGPT to answer followup questions, admit its mistakes, challenge incorrect premises, and reject inappropriate requests. ChatGPT is

openai.com

가입해서 채팅창에 들어왔으면 시작해보자.


먼저 나는 영어 실력이 부족하므로 구글 번역이나 파파고를 이용하여 질문을 영어로 바꾼다.

대한민국에서 인기 있는 유튜브 영상 중에 "백색 소음"과 관련된 영상을 찾아서
영상 제목, 주소, 시청자 수, 좋아요 수, 통계를 출력해주는 파이썬 프로그램을 작성해줘


번역한 질문을 chatGPT에게 바로 물어보면 아래와 같이
설명과 함께 파이썬 코드를 작성해준다.

코드 결과

설명을 대충 읽어보니 Youtube API key가 필요하다고 한다.

Youtube API key를 어떻게 얻는데?

API key 얻는 법
이런 것도 다 알려준다. 똑똑하군


하라는 대로 해보자.
https://console.cloud.google.com/apis/

 

Google 클라우드 플랫폼

로그인 Google 클라우드 플랫폼으로 이동

accounts.google.com

 

1. API 라이브러리에서 YouTube Data API v3 검색하고

API key 1

2. "사용" 버튼 누른 다음 (나는 사용을 이미 눌렀기 때문에 "관리"로 나온다.)

API key 2

3. 사용자 인증 정보에 들어가서 "+사용자 인증 정보 만들기" > "API 키" 선택하여 만들면 API 키를 얻을 수 있다.

API key 3

 

다 만들었으면, 위에서 만들어 준 코드를 살펴보자

import requests
import json

api_key = "YOUR_API_KEY"

query = "white noise in Korea"

def get_videos(query):
    url = f"https://www.googleapis.com/youtube/v3/search?part=snippet&maxResults=50&q={query}&type=video&key={api_key}"
    response = requests.get(url)
    data = json.loads(response.text)
    return data["items"]

def get_video_statistics(video_id):
    url = f"https://www.googleapis.com/youtube/v3/videos?part=statistics&id={video_id}&key={api_key}"
    response = requests.get(url)
    data = json.loads(response.text)
    return data["items"][0]["statistics"]

videos = get_videos(query)
for video in videos:
    video_id = video["id"]["videoId"]
    title = video["snippet"]["title"]
    url = f"https://www.youtube.com/watch?v={video_id}"
    statistics = get_video_statistics(video_id)
    print("Title:", title)
    print("URL:", url)
    print("View Count:", statistics["viewCount"])
    print("Like Count:", statistics["likeCount"])
    print("Dislike Count:", statistics["dislikeCount"])
    print("Favorite Count:", statistics["favoriteCount"])
    print("Comment Count:", statistics["commentCount"])
    print("\n")

엑셀로 이쁘게 만들어주면 좋으련만
print라는 코드가 많이 있는거 보니 대충 가져와서 화면에 뿌려주고 말 녀석인 것 같다.

결과를 .csv 파일로 만들어주는 기능을 추가해서 프로그램을 다시 작성해줘. (자식아)

다시 작성 요청

이번엔 "def write_to_csv(videos)" 라는 부분이 추가된 것으로 보아, 엑셀로 만들어 주기는 하려나보다.
그런데 코드를 자세히 보다 보니, 구독자 수를 출력해주지 않는다.
노아ai 대표인 현승원 대표의 영상을 보면,
노아ai구독자 수 대비 시청 수가 많은 영상을 벤치마킹 하기 좋은 영상으로 표시해준다고 한다.
아! 그럼 한 번만 더 일해라 chatGPT야.

 

결과에 구독자 수를 포함할 수 있도록 프로그램을 다시 작성해줘.

 

다시 작성 요청 2
슈얼 와이낫?!

말 잘 듣는다.
그럼 이 파이썬 프로그램을 실행 시켜보자.
https://colab.research.google.com/?hl=ko

 

Google Colaboratory

colab.research.google.com

구글에서 운영하는 코랩이라는 사이트인데, 브라우저 내에서 Python 스크립트를 작성하고 실행할 수 있다.
구글 계정으로 접속해서, 파일 > 새 노트를 눌러 코드 작성할 준비를 한다.
이제, chatGPT가 열심히 작성해 준 코드를 낼름 가져다 붙이고 왼쪽의 재생 버튼(▶) 같이 생긴 것을 눌러 보..
기 전에, 몇 가지만 수정하고 누르자.

코드랩 화면

* 중요!!! api_key="" 여기에 아까 발급 받은 YouTube API key를 넣는다.

  1. query="white noise in Korea"라고 되어 있는데, 이 부분에 원하는 검색어를 넣으면 될 것 같이 보인다.
    우리가 YouTube 검색 창에 검색할 때 "white noise in Korea"라고 검색하지 않으니깐 그냥 "백색 소음" / "white noise"와 같이 바꿔 보았다.
  2. file_name이 고정이었는데, query + ".csv"로 바꿔서, 내가 검색한 "검색어.csv" 형태로 만들어지게 하였다.
  3. 만든 file_name 변수를 3번의 with.open 함수의 첫 번째 인자로 넣어주었다.
  4. 3번 까지 하고 재생 버튼을 눌러보았더니, dislikeCount가 잘못된 Key라는 error가 발생하였다.
    생각해보면 우리가 실제 YouTube에서 영상을 볼 때도, 싫어요 수는 표시되지 않는다.
    YouTube API에서도 싫어요 수에 대해서는 결과를 안 주는 것 아닐까?
    그래서 4번(엑셀의 각 열의 카테고리를 구성하는 코드)에서 "Dislike Count"를 제거하고
  5. 수집한 데이터를 각 행에 작성하는 코드에서도 statistics["dislikeCount"]를 제거 하였다.

 

완성된 코드
import requests
import json
import csv

api_key = "여기에 발급 받은 API KEY를 넣으세요."

query = "white noise"
file_name = query + ".csv"

def get_videos(query):
    url = f"https://www.googleapis.com/youtube/v3/search?part=snippet&maxResults=50&q={query}&type=video&key={api_key}"
    response = requests.get(url)
    data = json.loads(response.text)
    return data["items"]

def get_video_statistics(video_id):
    url = f"https://www.googleapis.com/youtube/v3/videos?part=statistics&id={video_id}&key={api_key}"
    response = requests.get(url)
    data = json.loads(response.text)
    return data["items"][0]["statistics"]

def get_channel_statistics(channel_id):
    url = f"https://www.googleapis.com/youtube/v3/channels?part=statistics&id={channel_id}&key={api_key}"
    response = requests.get(url)
    data = json.loads(response.text)
    return data["items"][0]["statistics"]

def write_to_csv(videos):
    with open(file_name, "w", newline="") as file:
        writer = csv.writer(file)
        writer.writerow(["Title", "URL", "View Count", "Like Count", "Favorite Count", "Comment Count", "Subscriber Count"])
        for video in videos:
            video_id = video["id"]["videoId"]
            title = video["snippet"]["title"]
            url = f"https://www.youtube.com/watch?v={video_id}"
            channel_id = video["snippet"]["channelId"]
            statistics = get_video_statistics(video_id)
            channel_statistics = get_channel_statistics(channel_id)
            writer.writerow([title, url, statistics["viewCount"], statistics["likeCount"], statistics["favoriteCount"], statistics["commentCount"], channel_statistics["subscriberCount"]])

videos = get_videos(query)
write_to_csv(videos)


자 이제 진짜 재생 버튼(▶) 같이 생긴 것을 눌러 보자.
초록색으로 완료되었다고 표시되고,
왼쪽 파일 리스트에 white noise.csv 파일이 생성되었다.

코드랩 화면 2
성공!

이 파일을 다운로드 받아서 열어보자.

결과 엑셀 화면

위와 같이 인기 있는 영상 50개의 제목 / 링크 / 시청 수 / 좋아요 수 / 댓글 수 / 구독자 수가 쭉 출력되었다.
마지막의 View/Subscriber ratio는 내가 직접 엑셀 수식으로 시청 수 나누기 구독자 수 하여 내림차 순으로 정렬한 것이다.
이 View/Subscriber ratio가 높을수록 벤치마킹하기 좋은 영상이라고 생각할 수 있다.

여기까지 chatGPT를 이용하여 노아ai의 기능을 일부 구현엉아ai를 만들어 보았다.
AI가 코드도 짜 주는 참으로 편리한 시대에 살고 있다.
AI를 얼마나 잘 이용하는지에 따라 삶의 질이 많이 달라질 것이다.

다음에도 AI를 활용한 재미있는 포스팅을 올려보겠다.

* 이 포스팅은 유튜브 AI노마드(빅데이터김교수) 님의 영상을 참고하였습니다. 감사합니다.
https://youtu.be/c4WxKRm3vyo


"깡깡도사"님이 댓글로 질문을 남겨주셔서 질문 해주신 부분을 추가한 코드를 올린다.

깡깡도사님 댓글

1. 우선 YouTube Data API v3 중 Videos API를 이용하였기 때문에, 해당 문서를 들여다 본다.

 

Videos  |  YouTube Data API  |  Google Developers

Videos 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. video 리소스는 YouTube 동영상을 나타냅니다. 메소드 API는 videos 리소스에 다음 메소드를 지원합니다. getRat

developers.google.com

 

2. API의 응답으로 오는 JSON 파일을 보니 channelId도 있고, title도 있는 snippet 내부에서 "publishedAt" 이라는 부분을 찾을 수 있었다.

{
  "kind": "youtube#video",
  "etag": etag,
  "id": string,
  "snippet": {
    "publishedAt": datetime,
    "channelId": string,
    "title": string,
    
    ...

 

3. 그렇다면 실제 각 video의 데이터를 csv로 변환하는 과정에 이 "publishedAt"도 끼워 넣으면 되겠다 싶어서 아래와 같이 write_to_csv(videos) 함수 부분의 코드를 수정하였다. (주석(#으로 시작하는 줄) 부분 참고)

def write_to_csv(videos):
    with open(file_name, "w", newline="") as file:
        writer = csv.writer(file)
        # 엑셀의 가장 첫 열에 "Upload date" 추가
        writer.writerow(["Title", "URL", "View Count", "Like Count", "Favorite Count", "Comment Count", "Subscriber Count", "Upload date"])
        for video in videos:
            video_id = video["id"]["videoId"]
            title = video["snippet"]["title"]
        	# snippet의 publishedAt 내용을 읽어서 upload_date 변수에 저장
        	upload_date = video["snippet"]["publishedAt"]
            url = f"https://www.youtube.com/watch?v={video_id}"
            channel_id = video["snippet"]["channelId"]
            statistics = get_video_statistics(video_id)
            channel_statistics = get_channel_statistics(channel_id)
            # 각 video의 데이터를 각 행에 추가할 때, 마지막에 upload_date를 추가
            writer.writerow([title, url, statistics["viewCount"], statistics["likeCount"], statistics["favoriteCount"], statistics["commentCount"], channel_statistics["subscriberCount"], upload_date])

 

4. 실행해서 나온 .csv 파일을 열어보면 아래와 같이 Upload date가 잘 출력되는 것을 확인할 수 있다.
   (검색어는 "beer" ㅋㅋㅋ)

개선 버전 결과 화면

질문 남겨주신 "깡깡도사"님 감사합니다.

 

 

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."

 
 
 
 
728x90
반응형

댓글