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()