본문 바로가기
프로그램 (PHP,Python)

Google Sheets API 통해 Python으로 구글시트 콘텐츠 활용

by 날으는물고기 2024. 3. 26.

Google Sheets API 통해 Python으로 구글시트 콘텐츠 활용

Google Sheets API를 사용하여 Python에서 Google Sheets의 내용을 크롤링하고 OAuth 2.0 인증을 사용하는 과정은 몇 가지 단계로 나눌 수 있습니다. 여기서는 Google Sheets API를 사용하여 데이터를 읽는 기본적인 방법을 소개합니다.

1단계: Google Cloud Platform 프로젝트 생성 및 설정

  1. Google Cloud Console에서 새 프로젝트를 생성합니다.
  2. "API 및 서비스" 대시보드로 이동하여 "사용 설정"을 클릭하고 "Google Sheets API"를 검색한 다음 사용 설정합니다.
  3. "사용자 인증 정보" 페이지로 이동하여 "사용자 인증 정보 만들기"를 클릭하고 "OAuth 클라이언트 ID"를 선택합니다.
  4. 애플리케이션 유형으로 "데스크톱 앱"을 선택하고 필요한 정보를 입력한 뒤 사용자 인증 정보를 생성합니다.
  5. 생성된 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_IDSAMPLE_RANGE_NAME을 원하는 Google Sheets 문서의 ID와 범위로 설정해야 합니다.

 

이 코드는 첫 실행 시 브라우저를 통해 Google 계정으로 로그인하고 액세스 권한을 부여하도록 요청합니다. 인증 과정이 성공적으로 완료되면, token.json 파일이 생성되어 이후 실행에서는 자동으로 인증 정보를 사용합니다.

 

구글 시트를 사용하여 작업 관리 및 추적 시스템을 구축하는 것은 꽤 실용적인 아이디어입니다. 이러한 기능을 구현하기 위해 Python 스크립트를 사용할 수 있으며, 이는 다음과 같은 단계로 구성됩니다.

  1. 구글 시트 데이터 읽기: 이미 제공된 코드를 사용하여 기존의 작업 목록을 읽어옵니다.
  2. 작업 주기 확인 및 담당자에게 알림 보내기: 읽어온 데이터를 바탕으로 각 작업의 주기와 마지막 수행일을 확인하고, 이를 통해 해당 작업을 수행할 시간이 되었는지 판단합니다. 담당자에게 알림을 보내는 기능은 이메일이나 메시징 API를 통해 구현할 수 있습니다.
  3. 수행 결과 기록: 담당자로부터 작업 수행 결과를 받아 이를 구글 시트에 기록합니다.

아래 예시는 이러한 과정의 기본적인 아이디어를 구현한 것입니다. 이 예시에서는 담당자에게 알림을 보내는 부분은 구체적인 메서드로 구현하지 않았으나, 실제 사용 시에는 이메일을 보내는 함수나 메시징 플랫폼 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 메서드를 사용하는 코드를 추가해야 합니다.

 

이 코드는 기본적인 틀을 제공하며, 실제 환경에서 사용하기 위해서는 상세한 요구 사항에 맞게 조정이 필요할 수 있습니다.

728x90

댓글