파이썬 실습/유튜브 새로운 영상 올라오면 알림 및 실시간 다운로드하기

파이썬 유튜브 새로운 영상 올라오면 알림 및 실시간 다운로드하기 - 2.구글 유튜브 API를 이용하여 전체영상 갯수, 제목, URL 알아내기

파기차차 2023. 6. 2. 19:22
728x90
반응형
SMALL

ㅁ 개요

 

O 프로그램 소개

 

 

- 이번 글은 이전글(파이썬 유튜브 새로운 영상 올라오면 알림 및 실시간 다운로드하기 - 1.구글 youtube API를 사용하기 위한 환경설정하기)에 이은 3번째 글로 유튜브 API를 이용하여 동영상 전체 갯수, 영상의 제목, URL을 얻어내는 방법을 알아보겠습니다.

 

 

 

 

O 완성된 프로그램 실행 화면

 - 최종 완성된 프로그램의 결과화면은 아래와 같습니다..

 

 

1.프로그램을 실행하면 아래와 같이 실행됩니다.

 

아래 프로그램의 경우 간단하게 특정 유튜브 채널의 전체 동영상 수를 보여주고 있습니다.

 

아래는 위의 동일한 소스이나 채널의 각종 정보를 API요청으로 모두 가져와 보았습니다.

 

실제 유튜브 채널에 들어가 보면 정말로 영상이 1개만 존재하는 것을 확인할 수 있습니다.

 

 

2. 아래 프로그램 실행 결과 다양한 영상 목록 정보를 가져오는데, 이 중에서 특히 영상의 제목과 URL정보 2개를 출력하여 보여주고 있습니다.

 

아래 유튜브채널에 가서 확인 결과 최근영상 2개가 위의 프로그램 실행결과 나온것을 알 수 있습니다.

 

 

 

 

3. 우리가 이전 글에서 API 사용을 위해 설정했던 구글 클라우드 콘솔에서 확인 결과 API요청수를 확인할 수 있습니다.(실제 요청수가 정확하지는 않음)

 

 

 

 

4. 아래와 같이 구글 클라우드 콘솔에서 '사용 설정된 API 및 서비스' > 할당량 > Queries per day'를 보면 하루 10000개의 쿼리한도가 제한되어 있습니다.

다만, 쿼리 요청수를 어떻게 계산하는지 모르겠지만 실제로 해보면 훨씬 더 적은 수를 사용했음에도 쿼터 제한에 걸리곤 하였습니다. 그래도 하루가 지나면 다시 쿼터제한이 풀리고 10000 쿼리를 요청할 수 있습니다.

 

 

 

 

 


 

 

O 사전 준비 작업

 

-채널ID 찾는 방법(예: 유튜브 김*테 채널)
1.유튜브 채널 메인화면에서 마우스 오른쪽 버튼을 클릭하고 '페이지 소스 보기'를 클릭합니다. (메인 화면에서 해야 externalId를 얻을 수 있습니다.)

 

 

 

2.브라우저에서 Ctrl+F 로 검색창에 "externalId"로 찾습니다.

아래에서 채널id은 다음과 같습니다.
UCKTMvIu9a4VGSrpWy-8bUrQ # 김*테

 

 

 


 

ㅁ 세부 내용

 

O 완성된 소스

 

 

소스 : 1.totalCount.py

 

 

from googleapiclient.discovery import build
from googleapiclient.errors import HttpError

# 유튜브 데이터 API를 사용하기 위한 API 키
from conf import *


# 채널 ID
CHANNEL_ID = 'UChBYnUkgXUk2rmkQlIMNXNw'
# https://www.youtube.com/channel/UChBYnUkgXUk2rmkQlIMNXNw


# YouTube Data API 클라이언트 생성
youtube = build('youtube', 'v3', developerKey=YOUTUBE_APIKEY)

try:
    # 채널 정보 가져오기
    channel_response = youtube.channels().list(
        part='statistics',
        id=CHANNEL_ID
    ).execute()
    print(channel_response)

    # 전체 동영상 수 출력
    video_count = int(channel_response['items'][0]['statistics']['videoCount'])
    print('전체 동영상 수:', video_count)

except HttpError as e:
    print('에러 발생:', e)

 

 

소스 : 2.view_title&url.py

 

from googleapiclient.discovery import build
from googleapiclient.errors import HttpError
# YouTube Data API의 API key를 입력합니다.
from conf import *

# 가져올 채널의 ID를 입력합니다.
channel_id = 'UCW8UqoC1NrlV4JiqV3hRTbA'
# https://www.youtube.com/channel/UCW8UqoC1NrlV4JiqV3hRTbA 파기차차

# YouTube Data API 클라이언트를 빌드합니다.
youtube = build('youtube', 'v3', developerKey=YOUTUBE_APIKEY)

beforeVideos = []

try:
    # 동영상 목록을 가져옵니다.
    request = youtube.search().list(
        part='id,snippet',
        channelId=channel_id,
        order='date',
        type='video',
        maxResults=2
    )
    response = request.execute()
    print(response)

    # 동영상 제목과 ID를 출력합니다.
    for item in response['items']:
        video_title = item['snippet']['title']
        video_id = item['id']['videoId']
        print(f'{video_title}: {video_id}')
        # beforeVideos.append(video_title)
    
    # print(beforeVideos)

except HttpError as e:
    print(f'An HTTP error {e.resp.status} occurred:\n{e.content}')

 

 

 - 소스파일을 cmd, 파워쉘 또는 vscode 등에서 아래와 같이 실행하시기 바랍니다.
 

 

 > python 1.totalCount.py
 > python 2.view_title&url.py

 

 

 


 
 

 

O 주요 내용

 

1. 1.totalCount.py 소스를 간략하게 살펴보겠습니다.

 

API 사용을 위한 간련 모듈을 임포트하고, 유튜브 API키를 설정해 줍니다.( line1 ~ 5)

 

정보를 가져올 유튜브 채널ID를 설정해 줍니다.(채널의 끝부분에 있는 문자열, line7)

 

유튜브 API사용을 위한 객체를 생성(line 14)하고 youtube객체의 list()함수로 채널의 정보를 요청하고 응답을 받습니다.(line 17~ 21)

 

이 중에서 우리가 필요한 정보는 전체 동영상 수이므로 'videoCount' 정보만 가져와서 print()로 보여줍니다.

 

 

 

 

2. 2.view_title&url.py 소스를 살펴보겠습니다.

내용이 거의 동일하나, API 요청 시 내용이 조금 달라졌습니다.

유튜브 채널에서 최신 영상정보 2개만 가져올 수 있도록 요청합니다.(line17~23)

 

API 응답값에서 우리는 제목과 URL 정보가 필요하므로 이부분만 필터링하여 가져옵니다.(line28~31)

 

 

 


 

ㅁ 정리

 

O 우리가 배운 내용

 
 - 오늘은 유튜브 API를 이용하여 동영상 전체 갯수, 영상의 제목, URL을 얻어내는 방법을 알아보았습니다..
 
 - 오늘 우리가 배운 내용을 간략히 정리해 보면 아래와 같습니다.
 > 1.채널의 전체 동영상 수 가져오는 API 요청 코드
    channel_response = youtube.channels().list(
        part='statistics',
        id=CHANNEL_ID
    ).execute()

 > 2.채널에서 가져올 최신영상 갯수 지정 및 제목과 URL 가져오는API 요청 코드

    request = youtube.search().list(
        part='id,snippet',
        channelId=channel_id,
        order='date',
        type='video',
        maxResults=2
    )

 

 

 

 

오늘은 여기까지이며, 댓글하트는 제가 이글을 지속할 수 있게 해주는 힘이 됩니다.

위의 내용이 유익하셨다면, 댓글과 하트 부탁드립니다.

 

 

 

 

감사합니다.

 

 

 

※ 추가적인 정보는 아래 유튜브 영상에서 해당 내용을 더욱 자세히 보실 수 있습니다.

 

 

728x90
반응형
LIST