Google Sheets API를 사용하여 Python에서 Google Sheets의 내용을 크롤링하고 OAuth 2.0 인증을 사용하는 과정은 몇 가지 단계로 나눌 수 있습니다. 여기서는 Google Sheets API를 사용하여 데이터를 읽는 기본적인 방법을 소개합니다.
1단계: Google Cloud Platform 프로젝트 생성 및 설정
- Google Cloud Console에서 새 프로젝트를 생성합니다.
- "API 및 서비스" 대시보드로 이동하여 "사용 설정"을 클릭하고 "Google Sheets API"를 검색한 다음 사용 설정합니다.
- "사용자 인증 정보" 페이지로 이동하여 "사용자 인증 정보 만들기"를 클릭하고 "OAuth 클라이언트 ID"를 선택합니다.
- 애플리케이션 유형으로 "데스크톱 앱"을 선택하고 필요한 정보를 입력한 뒤 사용자 인증 정보를 생성합니다.
- 생성된 OAuth 2.0 클라이언트 ID의 JSON 파일을 다운로드합니다.
2단계: Python 환경 설정
Python과 Google Sheets API를 사용하기 위한 라이브러리를 설치합니다.
pip install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib
3단계: Python에서 Google Sheets API 사용
아래는 Google Sheets의 내용을 읽기 위한 기본적인 Python 코드 예시입니다. 이 예시는 앞서 다운로드한 OAuth 2.0 클라이언트 ID JSON 파일을 사용하여 인증을 수행합니다.
from google.oauth2.credentials import Credentials
from google_auth_oauthlib.flow import InstalledAppFlow
from googleapiclient.discovery import build
import os
# 사용자 인증 정보 파일 경로
creds_filename = 'path/to/your/credentials.json'
# 스코프 설정
SCOPES = ['https://www.googleapis.com/auth/spreadsheets.readonly']
def main():
creds = None
# token.json 파일이 존재하면 기존 토큰 사용
if os.path.exists('token.json'):
creds = Credentials.from_authorized_user_file('token.json', SCOPES)
# 없으면 새로운 인증 흐름 시작
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(creds_filename, SCOPES)
creds = flow.run_local_server(port=0)
# 다음번 실행을 위해 크레덴셜 저장
with open('token.json', 'w') as token:
token.write(creds.to_json())
service = build('sheets', 'v4', credentials=creds)
# Google Sheets 문서 ID와 범위 설정
SAMPLE_SPREADSHEET_ID = 'your-spreadsheet-id'
SAMPLE_RANGE_NAME = 'your-range'
# Google Sheets API 호출
sheet = service.spreadsheets()
result = sheet.values().get(spreadsheetId=SAMPLE_SPREADSHEET_ID, range=SAMPLE_RANGE_NAME).execute()
values = result.get('values', [])
if not values:
print('No data found.')
else:
for row in values:
# 행 데이터 출력
print(row)
if __name__ == '__main__':
main()
이 코드를 실행하기 전에, creds_filename
변수를 JSON 파일의 실제 경로로 수정하고, SAMPLE_SPREADSHEET_ID
및 SAMPLE_RANGE_NAME
을 원하는 Google Sheets 문서의 ID와 범위로 설정해야 합니다.
이 코드는 첫 실행 시 브라우저를 통해 Google 계정으로 로그인하고 액세스 권한을 부여하도록 요청합니다. 인증 과정이 성공적으로 완료되면, token.json
파일이 생성되어 이후 실행에서는 자동으로 인증 정보를 사용합니다.
구글 시트를 사용하여 작업 관리 및 추적 시스템을 구축하는 것은 꽤 실용적인 아이디어입니다. 이러한 기능을 구현하기 위해 Python 스크립트를 사용할 수 있으며, 이는 다음과 같은 단계로 구성됩니다.
- 구글 시트 데이터 읽기: 이미 제공된 코드를 사용하여 기존의 작업 목록을 읽어옵니다.
- 작업 주기 확인 및 담당자에게 알림 보내기: 읽어온 데이터를 바탕으로 각 작업의 주기와 마지막 수행일을 확인하고, 이를 통해 해당 작업을 수행할 시간이 되었는지 판단합니다. 담당자에게 알림을 보내는 기능은 이메일이나 메시징 API를 통해 구현할 수 있습니다.
- 수행 결과 기록: 담당자로부터 작업 수행 결과를 받아 이를 구글 시트에 기록합니다.
아래 예시는 이러한 과정의 기본적인 아이디어를 구현한 것입니다. 이 예시에서는 담당자에게 알림을 보내는 부분은 구체적인 메서드로 구현하지 않았으나, 실제 사용 시에는 이메일을 보내는 함수나 메시징 플랫폼 API 호출로 대체할 수 있습니다.
필요한 라이브러리 설치
먼저 필요한 라이브러리를 설치합니다. (이미 설치하셨다면 이 단계는 건너뛰세요.)
pip install --upgrade google-api-python-client google-auth-httplib2 google-auth-oauthlib
기본 코드 구조
from datetime import datetime, timedelta
from google.oauth2.credentials import Credentials
from google_auth_oauthlib.flow import InstalledAppFlow
from googleapiclient.discovery import build
import os
# Google Sheets API 설정
SCOPES = ['https://www.googleapis.com/auth/spreadsheets']
SPREADSHEET_ID = 'your-spreadsheet-id'
TASKS_RANGE = 'your-tasks-range'
# 인증 및 서비스 객체 생성
def google_sheets_service():
creds = None
if os.path.exists('token.json'):
creds = Credentials.from_authorized_user_file('token.json', SCOPES)
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)
with open('token.json', 'w') as token:
token.write(creds.to_json())
service = build('sheets', 'v4', credentials=creds)
return service
# 작업 목록 읽기
def read_tasks(service):
sheet = service.spreadsheets()
result = sheet.values().get(spreadsheetId=SPREADSHEET_ID, range=TASKS_RANGE).execute()
tasks = result.get('values', [])
return tasks
# 담당자에게 알림 보내기 (이 부분은 실제 알림 전송 로직으로 대체해야 함)
def notify_responsible(responsible, task):
print(f"Notify {responsible} about task: {task}")
# 작업 주기에 따른 알림 처리
def process_tasks(tasks, service):
today = datetime.today().date()
for task in tasks:
if len(task) < 5: # 항목명, 대상, 담당자, 주기, 마지막수행일 필드 확인
continue
task_name, target, responsible, frequency, last_performed = task
last_performed_date = datetime.strptime(last_performed, '%Y-%m-%d').date()
frequency_days = int(frequency) # 주기를 일 단위 숫자로 변환
next_due_date = last_performed_date + timedelta(days=frequency_days)
if today >= next_due_date:
notify_responsible(responsible, task_name)
# 여기에서 작업 수행 결과를 기록하는 로직 추가 가능
def main():
service = google_sheets_service()
tasks = read_tasks(service)
process_tasks(tasks, service)
if __name__ == '__main__':
main()
이 코드는 구글 시트에서 작업 목록을 읽고, 각 작업의 주기와 마지막 수행일을 확인하여, 주기에 따라 담당자에게 알림을 보내는 기본적인 로직을 구현합니다. 실제 알림 전송을 위해서는 notify_responsible
함수를 적절한 알림 전송 코드로 대체해야 합니다 (예: 이메일 전송 함수).
추가 사항
- 알림 전송 방법: 실제 환경에서는
notify_responsible
함수 내에 이메일 전송 로직이나 Slack, Microsoft Teams 등의 메시징 서비스 API를 호출하는 코드를 추가해야 합니다. - 작업 수행 결과 기록: 작업 수행 결과를 구글 시트에 기록하기 위해서는 Google Sheets API의
append
또는update
메서드를 사용하는 코드를 추가해야 합니다.
이 코드는 기본적인 틀을 제공하며, 실제 환경에서 사용하기 위해서는 상세한 요구 사항에 맞게 조정이 필요할 수 있습니다.
댓글