Google Sheets는 협업과 데이터 관리를 위한 강력한 도구입니다. 하지만 매일매일 특정 날짜에 해당하는 데이터를 추출해야 한다면, 수작업으로 처리하기는 번거롭습니다. 이 문제를 해결하기 위해, Python과 Google Sheets API를 활용하여 자동으로 오늘 날짜 데이터를 추출하는 방법을 소개합니다. 이 글에서는 gspread 라이브러리와 OAuth 2.0 인증을 사용하여 Google Sheets에 접근하고, Python 코드를 통해 특정 날짜에 해당하는 데이터를 손쉽게 필터링하는 과정을 단계별로 설명합니다. 프로그래밍 초보자도 따라 할 수 있도록 자세한 코드 설명과 함께 실습 예제를 제공합니다. Google Sheets API를 사용하기 위해서 API key 값이 포함된 json 파일이 필요합니다.
관련 내용은 아래 링크에서 참고해서 미리 준비해주세요.
구글 클라우드 플랫폼 API JSON 파일 다운로드 방법: 단계별 가이드
지금부터 Python과 Google Sheets API를 사용하여 효율적으로 데이터를 관리하는 방법을 알아보겠습니다.
1. Google Sheets 데이터 추출 자동화(샘플) 전체 소스 코드
import gspread
from oauth2client.service_account import ServiceAccountCredentials
from datetime import datetime
def get_rows_for_today(spreadsheet_id, sheet_name, **kwargs):
# OAuth 2.0 인증을 위한 스코프 정의
scope = ["https://spreadsheets.google.com/feeds", "https://www.googleapis.com/auth/drive"]
# 서비스 계정 키 파일 경로
creds = ServiceAccountCredentials.from_json_keyfile_name('./aaaaaaaaaaaaaaaa.json', scope)
# gspread 클라이언트 생성
client = gspread.authorize(creds)
# 스프레드시트 열기
sheet = client.open_by_key(spreadsheet_id).worksheet(sheet_name)
# 모든 데이터를 가져오기
all_data = sheet.get_all_records()
# 오늘 날짜
today = datetime.today().strftime('%Y-%m-%d')
# 결과를 저장할 딕셔너리 리스트
rows_for_today = []
# 필요한 칼럼 이름을 kwargs에서 가져오기
date_column_name = kwargs.get('date_column_name')
title_column_name = kwargs.get('title_column_name')
category_column_name = kwargs.get('category_column_name')
# 각 행을 순회하며 날짜 비교
for row in all_data:
row_date = row.get(date_column_name)
if row_date == today:
# 필요한 칼럼의 데이터 추출
row_data = {
'Date': row.get(date_column_name),
'Title': row.get(title_column_name),
'Category': row.get(category_column_name)
}
rows_for_today.append(row_data)
return rows_for_today
# 사용 예시
spreadsheet_id = 'abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcd'
sheet_name = '시트1'
# kwargs 방식으로 필요한 칼럼 이름 전달
kwargs = {
'date_column_name': 'Date',
'title_column_name': 'Title',
'category_column_name': 'Category'
}
rows_for_today = get_rows_for_today(spreadsheet_id, sheet_name, **kwargs)
print(rows_for_today)
2. Google Sheets API 사용을 위한 필수 라이브러지 import
import gspread
from oauth2client.service_account import ServiceAccountCredentials
from datetime import datetime
- gspread: Google Sheets API와 상호작용하기 위한 라이브러리입니다.
- oauth2client.service_account: 서비스 계정을 사용하여 OAuth 2.0 인증을 처리하는 라이브러리입니다.
- datetime: 현재 날짜를 가져오기 위한 라이브러리입니다.
3. get_rows_for_today 함수 정의
def get_rows_for_today(spreadsheet_id, sheet_name, **kwargs):
- spreadsheet_id: 접근하려는 Google Sheets의 ID입니다.
- sheet_name: 접근하려는 시트의 이름입니다.
- **kwargs: 필요한 칼럼 이름을 동적으로 전달하기 위해 사용되는 키워드 인자입니다.
3.1 OAuth 2.0 인증 설정
scope = ["https://spreadsheets.google.com/feeds", "https://www.googleapis.com/auth/drive"]
creds = ServiceAccountCredentials.from_json_keyfile_name('./aaaaaaaaaaaaaaaa.json', scope)
client = gspread.authorize(creds)
- scope: API 접근 범위를 지정합니다. 여기서는 Google Sheets와 Google Drive에 대한 접근 권한을 설정합니다.
- creds: JSON 키 파일을 통해 인증 정보를 불러옵니다.
- client: 인증된 gspread 클라이언트를 생성합니다.
3.2 스프레드시트와 시트 열기
sheet = client.open_by_key(spreadsheet_id).worksheet(sheet_name)
all_data = sheet.get_all_records()
- sheet: 특정 스프레드시트의 특정 시트를 엽니다.
- all_data: 시트의 모든 데이터를 가져옵니다. 각 행은 딕셔너리 형태로 저장됩니다.
3.3 오늘 날짜 가져오기
today = datetime.today().strftime('%Y-%m-%d')
- today = datetime.today().strftime(‘%Y-%m-%d’)
- 시트에서 today와 값이 일치하는 행를 추출하도록 활용할 예정입니다.
3.4 필요한 칼럼 이름을 kwargs에서 가져오기
date_column_name = kwargs.get('date_column_name')
title_column_name = kwargs.get('title_column_name')
category_column_name = kwargs.get('category_column_name')
- date_column_name, title_column_name, category_column_name: 키워드 인자로 전달된 칼럼 이름을 가져옵니다.
3.5 오늘 날짜에 해당하는 행 데이터 추출
rows_for_today = []
for row in all_data:
row_date = row.get(date_column_name)
if row_date == today:
row_data = {
'Date': row.get(date_column_name),
'Title': row.get(title_column_name),
'Category': row.get(category_column_name)
}
rows_for_today.append(row_data)
- rows_for_today: 오늘 날짜에 해당하는 행의 데이터를 저장할 리스트입니다.
- for row in all_data: 모든 행을 순회하며
- row_date: 각 행의 날짜 값을 가져옵니다.
- 오늘 날짜와 행의 날짜를 비교하여 일치하면, 해당 행의 데이터(Date, Title, Category)를 row_data 딕셔너리에 저장하고 rows_for_today 리스트에 추가합니다.
4. 함수 호출 예시
spreadsheet_id = 'abcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcdabcd'
sheet_name = '시트1'
kwargs = {
'date_column_name': 'Date',
'title_column_name': 'Title',
'category_column_name': 'Category'
}
rows_for_today = get_rows_for_today(spreadsheet_id, sheet_name, **kwargs)
print(rows_for_today)
- spreadsheet_id: 특정 Google Sheets의 ID를 설정합니다.
- sheet_name: 접근하려는 시트의 이름을 설정합니다.
- kwargs: 필요한 칼럼 이름을 키워드 인자로 전달합니다.
- get_rows_for_today 함수를 호출하여 오늘 날짜에 해당하는 행의 데이터를 가져옵니다.
- 결과를 출력합니다.
4.1 Google Sheets의 ID 확인하는 방법
- ID 부분은 “/d/” 이후 부터 “/edit?” 사이의 문자열입니다.
5. 결론
Python과 Google Sheets API를 활용하여 오늘 날짜에 해당하는 데이터를 자동으로 추출하는 방법을 살펴보았습니다. gspread 라이브러리와 OAuth 2.0 인증을 사용하여 Google Sheets에 접근하고, 날짜를 기준으로 데이터를 필터링하여 효율적으로 관리하는 과정을 다뤘습니다.
이 방법을 통해 매일 반복되는 데이터 추출 작업을 자동화함으로써 시간과 노력을 절약할 수 있습니다. 또한, 데이터 분석이나 리포트 작성 등의 후속 작업을 보다 원활하게 진행할 수 있습니다. Python의 강력한 기능을 활용하여 데이터 관리의 효율성을 극대화해 보세요.
지금까지의 과정을 따라 하며 필요한 부분을 수정하고, 자신의 프로젝트에 맞게 응용하면 더욱 유용하게 활용할 수 있을 것입니다. 앞으로도 Python과 다양한 API를 활용한 자동화 방법을 익혀 업무 효율성을 높여보시기 바랍니다.