2023.09.26 - [개발 노트/Python] - [Python] Google API 사용을 위한 GCP 설정
개요
이 글에서는 Python에서 Google API를 통해 Youtube 데이터를 조작할 수 있는 코드를 간략히 다룹니다.
Google Youtube API Document
Youtube API의 경우 Oauth로 인증만 된다면 비교적 쉽게 이용할 수 있습니다.
다음 링크는 Youtube API의 API 문서입니다.
필요한 라이브러리
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
Oauth Login_Hint Link : https://developers.google.com/identity/protocols/oauth2/web-server?hl=ko
'Language > Python' 카테고리의 다른 글
[GCP] Python으로 Google Oauth Login 하기 (1) | 2023.11.22 |
---|---|
[SQLAlchemy] dependency-injector로 SQLAlchemy Session 다루기 (0) | 2023.11.21 |
[SQLAlchemy] Connection 설정에 관한 탐구 (1) | 2023.11.14 |
[SQLAlchemy] Imperative Mapping (0) | 2023.11.05 |
[SQLAlchemy] SQL Logging 가독성 향상시키기 (0) | 2023.11.03 |