giangbai / google_utils.py
hoangthiencm's picture
Create google_utils.py
0f700d7 verified
import os
import json
import logging
from google.oauth2 import service_account
from googleapiclient.discovery import build
from datetime import datetime
# Cấu hình Log
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
# File json key bạn đã upload lên (đảm bảo file này nằm cùng thư mục)
SERVICE_ACCOUNT_FILE = 'service_account.json'
SCOPES = ['https://www.googleapis.com/auth/spreadsheets']
class GoogleSheetClient:
def __init__(self):
self.creds = None
self.service = None
self.connect()
def connect(self):
"""Kết nối đến Google Sheets API dùng Service Account"""
try:
if os.path.exists(SERVICE_ACCOUNT_FILE):
self.creds = service_account.Credentials.from_service_account_file(
SERVICE_ACCOUNT_FILE, scopes=SCOPES
)
self.service = build('sheets', 'v4', credentials=self.creds)
logger.info("✅ Google Sheets API: Kết nối thành công.")
else:
logger.warning(f"⚠️ Không tìm thấy {SERVICE_ACCOUNT_FILE}. Chức năng ghi Sheet sẽ bị tắt.")
except Exception as e:
logger.error(f"❌ Lỗi kết nối Google Sheets: {e}")
def append_row(self, sheet_id, data_row, sheet_range="Sheet1!A1"):
"""Ghi dòng mới vào Sheet"""
if not self.service: return {"status": "skipped", "reason": "No service"}
try:
body = { "values": [data_row] }
result = self.service.spreadsheets().values().append(
spreadsheetId=sheet_id, range=sheet_range,
valueInputOption="USER_ENTERED", insertDataOption="INSERT_ROWS",
body=body
).execute()
return {"status": "success"}
except Exception as e:
logger.error(f"❌ Lỗi ghi Sheet: {e}")
return {"status": "error", "message": str(e)}
# Khởi tạo singleton
gsheet_client = GoogleSheetClient()