본문으로 바로가기
728x90
반응형

 

 

 

2023.09.26 - [개발 노트/Python] - [Python] Google API 사용을 위한 GCP 설정

 

개요

이 글에서는 Python에서 Google API를 통해 Youtube 데이터를 조작할 수 있는 코드를 간략히 다룹니다.


Google Youtube API Document

Youtube API의 경우 Oauth로 인증만 된다면 비교적 쉽게 이용할 수 있습니다.

 

다음 링크는 Youtube API의 API 문서입니다.

 

OAuth 2.0 승인 구현  |  YouTube Data API  |  Google for Developers

이 페이지는 Cloud Translation API를 통해 번역되었습니다. Switch to English OAuth 2.0 승인 구현 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. YouTube Data API는 비공개

developers.google.com

 

필요한 라이브러리

Python을 통해 Google API를 사용하기 위해서는 다음과 같은 라이브러리가 필요합니다.

pip install google-api-python-client

위 라이브러리는 Google과 관련한 API를 사용하기 위해 필요한 모듈이 들어있습니다.

pip install google-auth-oauthlib

위 라이브러리는 Google API를 호출에 필요한 인증을 수행하기 위해 필요한 모듈이 들어있습니다. 우선 Google API를 사용하기 위해 필요한 google-api-python-client는 다음과 같은 방식으로 YoutubeAPI를 사용할 수 있습니다.

 

 

Youtube API 호출을 위한 설정

google-api-python-client로는 다음과 같은 방식으로 Youtube에 관련된 자원을 다룰 수 있습니다.

from googleapiclient.discovery import build
youtube = build('youtube', 'v3', credentials=cred)

여기서 credentials 매개변수에 넘기는 “cred”를 얻기 위해서는 “google-auth-oauthlib”를 이용해야 합니다. Oauth2 인증 정보를 얻기 위해 다음과 같은 코드를 이용합시다.

flow = InstalledAppFlow.from_client_secrets_file(
    "../oauth_credential.json",
    scopes=["<https://www.googleapis.com/auth/youtube>"]
)
credential = flow.run_local_server()

token = credential.to_json()

token에는 다음과 같은 데이터가 들어있습니다.

{
    "token": "",
    "refresh_token": "",
    "token_uri": "<https://oauth2.googleapis.com/token>",
    "client_id": "",
    "client_secret": "",
    "scopes": [
        "<https://www.googleapis.com/auth/youtube>"
    ],
    "expiry": "2023-09-25T17:04:23.309741Z"
}

이를 파일(token.json)로 잘 저장한 뒤 다음과 같은 코드를 이용해 앞서 cred로 만들어줍시다.

from google.oauth2 import credentials
cred = credentials.Credentials.from_authorized_user_file("tokens.json")

 

 

Youtube API 호출하기

https://googleapis.github.io/google-api-python-client/docs/dyn/ 를 참고하여 아래와 같은 코드를 사용하면 구독한 유튜브 채널이 표출됩니다.

youtube = build('youtube', 'v3', credentials=cred)
request = youtube.subscriptions().list(
    part="id, snippet",
    mine=True,
    maxResults=100
).execute()
print(request['items'])

 

알고 있으면 좋은 것들

refresh token 유실에 주의하자.

“cred” 변수를 생성하는 과정에서 google server로부터 oauth2 인증이 완료된 token 정보를 얻었습니다. 이 과정을 처음 시도할 때는 token에 refresh_token 정보를 주는데 이후부터는 이미 refresh_token이 발급되었기 문에 해당 정보에 refresh_token정보가 존재하지 않았습니다.

 

이는 실제로 어떤 제품을 개발해야 된다고 할 때 refresh_token에 대한 관리를 필요로 한다는 것을 시사한다고 생각됩니다.

 

refresh token을 재발급하려면?

이는 YoutubeAPI 문서에도 나와있는 내용입니다만 메모할 필요가 있어서 언급만 해놓겠습니다.

requests.post('<https://oauth2.googleapis.com/revoke>',
	  params={'token': token},
	  headers={'content-type': 'application/x-www-form-urlencoded'}
)

 

이메일이 여러 개인 경우 미리 지정하기

oauth2 인증이다 보니 이미 로그인된 계정이 여러 개 있는 경우나 어떤 계정을 미리 선택하고 싶을 때가 있습니다. 그럴 때는 login_hint라는 parameter를 지정해 다음과 같은 단계에서 사용해 주도록 합시다.

flow = InstalledAppFlow.from_client_secrets_file(
    "./oauth_credential.json",
    scopes=["<https://www.googleapis.com/auth/youtube>"],
    redirect_uri="")

flow.authorization_url(login_type="some@email.com") # 추가된 라인, login_type에 이메일을 넣자

credential = flow.run_local_server()
tokens = credential.to_json()

 

 

Reference

Python  GoogleAPI,  YoutuAPI Link: https://googleapis.github.io/google-api-python-client/docs/dyn/youtube_v3.html

 

https://googleapis.github.io/google-api-python-client/docs/dyn/youtube_v3.html

Instance Methods abuseReports() Returns the abuseReports Resource. activities() Returns the activities Resource. captions() Returns the captions Resource. channelBanners() Returns the channelBanners Resource. channelSections() Returns the channelSections R

googleapis.github.io

Oauth Login_Hint Link : https://developers.google.com/identity/protocols/oauth2/web-server?hl=ko 

 

웹 서버 애플리케이션용 OAuth 2.0 사용  |  Authorization  |  Google for Developers

이 페이지는 Cloud Translation API를 통해 번역되었습니다. Switch to English 의견 보내기 웹 서버 애플리케이션용 OAuth 2.0 사용 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분

developers.google.com

 

728x90
반응형