구글 제품들을 이용하면서 사용자의 데이터를 접근할 수 있도록 API를 제공하고 있습니다. 구글 제품에 연동해서 데이터를 실시간으로 가져와 사용할 수 있습니다.
이번에는 API를 사용하기 위해 기본 환경설정 및 간단한 프로젝트를 소개할 예정입니다.
과정
- 환경 설정
- 클라이언트 라이브러리 설치
- 프로그래밍 실행
요구사항
- Python 3.10.7 이상
- 구글 클라우드 프로젝트 (A Google Cloud project)
- gmail 사용하고 있는 모든 구글 계정
1. 환경설정
1.1 Google Cloud Project 생성
먼저 Google Developer 가입 후 Google Cloud 프로젝트 생성해야 Google Workspace API를 사용, Google Workspace 부가기능, API 관리, 결제 사용 설정, 공동작업자 추가 및 삭제, 권한 관리를 포함한 모든 Google Cloud 서비스를 생성, 사용 설정, 사용할 수 있습니다.
- Google Cloud 프로젝트 생성 >새 프로젝트
- 프로젝트 이름 설정 , 위치 선택, 만들기 하면 프로젝트 생성 완료
![](https://blog.kakaocdn.net/dn/yyOJB/btrSM34f1lZ/qF9WxQPajgCMDrq2qak560/img.png)
![](https://blog.kakaocdn.net/dn/bfHkOU/btrSM3iRy42/jSTgpVk6FGJETBEN1GvS8K/img.png)
1.2 API 사용 설정하기
한 프로젝트에 여러 개 API 사용 가능하여 하단의 과정을 반복해서 API 사용설정하면 됩니다.
- Google Cloud 콘솔 메뉴 menu > API 및 서비스 > 라이브러리
- 라이브러리에서 원하는 API 검색해서 원하는 서비스를 선택.
- 사용 설정을 클릭하면 자동으로 화면이 API 및 서비스 > 사용 설정된 API 및 서비스로 전환
![](https://blog.kakaocdn.net/dn/bevVhU/btrSRQpD5q6/bV6a6KTkCgP6D0aKZN1vk1/img.png)
![](https://blog.kakaocdn.net/dn/bcBjvB/btrSLKcTOgF/qg2Txr7IzhUVuKM03ml8Sk/img.png)
![](https://blog.kakaocdn.net/dn/ctbPUX/btrSMI61hmY/jwjx0Ky5gPtQmG9hoXzW8k/img.png)
1.3 OAuth 동의 화면 구성
사용자가 데이터에 대한 앱의 액세스 권한을 이해하고 승인할 수 있도록 합니다.
OAuth2.0 프로토콜
어떤 서비스에 저장된 자신의 데이터를 다른 서비스에서 접근할 수 있도록 승인해주는 프로토콜로 많은 글로벌 기업들이 채택하면서 OAuth는 인가 분야에서 거의 산업 표준이 되어 가고 있습니다.
승인에 OAuth 2.0을 사용하면 앱에서 계정의 여러 액세스 범위에 대한 승인을 요청하고 사용자에게 프로젝트 및 정책 요약과 요청된 액세스 범위가 포함된 동의 화면을 표시합니다. 사용자 데이터 접근 여부를 특정 데이터를 특정 작업에만 사용하도록 사용자가 접근 허용을 할 수 있습니다.
인증 및 승인 작동 방식
OAuth 동의 범위: 범위는 사용자를 대신해 액세스 권한을 요청할 사용자 데이터 종류를 정의합니다. 참조: 사용 가능한 범위의 전체 목록.
민감한 API 범위: 동의 화면에서 사용자에게 표시되기 전에 Google이 인증을 요청합니다.
제한된 API 범위: 앱에서 제한된 범위를 사용하는 경우 Google에서 앱이 특정 API 범위의 추가 요구사항을 준수하는지 확인합니다. 참조 : 현재의 제한된 범위 목록
1. Google Cloud console에서 menu > API 및 서비스 (APIs & Services) > OAuth 동의 화면
![](https://blog.kakaocdn.net/dn/lsMRr/btrSJmjIJaN/9UVUkZSKQVqzTkjDe8P2r0/img.png)
2. 용도에 맞추어 사용자 선택 , 만들기 클릭
User Type | 내부 | 외부 |
정의 | 조직내 사용자(G Suite 그룹 내) | Google 계정이 있는 모든 테스트 사용자 - 테스트 사용자 목록에 추가된 사용자 |
인증 | 앱을 제출할 필요 없음 | 프로덕션 및 앱 게시 시 인증 |
앱 등록 프로세스 필요한 정보 |
|
|
1.4 사용자 인증정보 만들기 : OAuth 클라이언트 ID 생성
필요한 사용자 인증 정보는 앱의 데이터 유형, 플랫폼 및 액세스 방법에 따라 상이합니다.
최종 유저 인증하고 유저 데이터에 접근하기 위해서 1개 이상의 OAuth 2.0 Client 아이디를 생성해야 합니다.
각 플랫폼 개수만큼 클라이언트 ID를 생성해야 합니다. 클라이언트 ID는 Google's OAuth 서버에서 각 애플리케이션을 구분하는 데에 사용합니다
사용자 인증정보 유형 3가지
- API 키 : 앱에서 공개적으로 사용 가능한 데이터에 익명으로 액세스
- OAuth 클라이언트 ID : 최종 사용자로 인증하고 데이터에 액세스, 앱에서 사용자의 동의를 요청하고 받아야 합니다.
- 서비스 계정 : 로봇 서비스 계정으로 인증/Google Workspace 또는 Cloud ID 사용자를 대신하여 도메인 전체 위임을 통해 리소스에 액세스
- API 및 서비스 > 사용자 인증정보 만들기
- + 사용자 인증정보 만들기 > OAuth 클라이언트 ID (OAuth 2.0 Client IDs) 클릭
![](https://blog.kakaocdn.net/dn/Cclov/btrSRRB56Rz/CpPIJVnz6oxOKQmHwMYX11/img.png)
3. 애플리케이션 유형 선택, 이름 설정
4. 생성하면 생성 화면에서 Client ID와 Client secret 비밀번호가 나온다. 1회만 나오므로 복사해서 붙여 넣기 하거나 json으로 다운로드
![](https://blog.kakaocdn.net/dn/tWtIw/btrSITvjvPi/4uoIevO60mVCIkwBVAcKRk/img.png)
![](https://blog.kakaocdn.net/dn/blyG8f/btrSOyQsNlu/k5dUKwyO7oLCFffaj1rMq0/img.png)
2. 구글 클라이언트 라이브러리 설치
파이썬에서 Google client library 설치하기 (최초 1회)
pip install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib
3. 설정 및 실행
환경설정을 모든 언어에 동일, 프로그래밍 언어는 파이썬
OAuth 클라이언트에서 발급한 ID, 비밀번호가 담긴 json 파일명칭을 credential.json으로 변경해서 working directory에 저장하기
- 처음 실행 시 access 권한 확인을 합다. token.json 에 유저의 접근과 리프레쉬 토큰이 저장되어 있습다. 첫 인증이 성공적인 경우에 생성되면서 인증 정보가 파일 시스템에 저장되어 다음 실행 시에 바로 호출 가능합니다
- 첫 실행에는 토큰이 없기 때문에 구글에 로그인하라고 요청받습니다. 이미 여러 계정에 로그인되었다면 인증을 위해서 계정 하나 선택해서 Accpet 합니다.
- 목적에 따라서 API 호출합니다.
from __future__ import print_function
import os.path
from google.auth.transport.requests import Request
from google.oauth2.credentials import Credentials
from google_auth_oauthlib.flow import InstalledAppFlow
from googleapiclient.discovery import build
from googleapiclient.errors import HttpError
# If modifying these scopes, delete the file token.json.
SCOPES = ['https://www.googleapis.com/auth/gmail.readonly']
def main():
"""Shows basic usage of the Gmail API.
Lists the user's Gmail labels.
"""
creds = None
# The file token.json stores the user's access and refresh tokens, and is
# created automatically when the authorization flow completes for the first
# time.
if os.path.exists('token.json'):
creds = Credentials.from_authorized_user_file('token.json', SCOPES)
# If there are no (valid) credentials available, let the user log in.
if not creds or not creds.valid:
if creds and creds.expired and creds.refresh_token:
creds.refresh(Request())
else:
flow = InstalledAppFlow.from_client_secrets_file(
'credentials.json', SCOPES)
creds = flow.run_local_server(port=0)
# Save the credentials for the next run
with open('token.json', 'w') as token:
token.write(creds.to_json())
try:
# Call the Gmail API
service = build('gmail', 'v1', credentials=creds)
results = service.users().labels().list(userId='me').execute()
labels = results.get('labels', [])
if not labels:
print('No labels found.')
return
print('Labels:')
for label in labels:
print(label['name'])
except HttpError as error:
# TODO(developer) - Handle errors from gmail API.
print(f'An error occurred: {error}')
if __name__ == '__main__':
main()
이번에 정리하면서 OAuth 2.0 프로토콜 인증 프로세스와 인증 정보에 대해서 좀 더 이해하게 되었습니다.
제가 한 프로젝트는 특정 기준으로 필터링하고 HTML 형태의 내용에서 특정 태그를 기준으로 가져오고 자연어 처리하여 수집했습니다.
참고로 기본 100개 호출하니 호출 가능한 max 값 별도 설정 해주셔야 합니다.
출처:
'Data > Python' 카테고리의 다른 글
[OPEN API] 행정안정부 도로명주소, 지번주소, 영문, 우편번호 변환(API 활용방법, 키발급,Python 예제 코드, 수집) (0) | 2024.01.30 |
---|---|
[Google Developers] GMAIL API 사용방법 1 - 소개 (0) | 2022.11.23 |
개발자 필수 시험이 될 프로그래머스의 코딩역량인증시험 PCCP.E (3) | 2022.08.30 |
[Pandas] 결측치가 없는 데 계산에서 NaN이 나오는 경우(feat. dtype) (0) | 2022.07.21 |
[Python] 코랩(Colab) 한글 깨짐 현상 해결방법 (0) | 2022.07.08 |