automatedblogpostcreater / sheets_handler.py
Pamudu13's picture
Upload 16 files
53e65b7 verified
raw
history blame
3.33 kB
from google_auth_oauthlib.flow import InstalledAppFlow
from google.oauth2.credentials import Credentials
from google.auth.transport.requests import Request
from googleapiclient.discovery import build
import os.path
import pickle
from typing import Dict
class SheetsHandler:
def __init__(self, credentials_path: str):
self.SCOPES = ['https://www.googleapis.com/auth/spreadsheets']
self.creds = None
# Load existing token if it exists
if os.path.exists('token.pickle'):
with open('token.pickle', 'rb') as token:
self.creds = pickle.load(token)
# If no valid credentials available, let user log in
if not self.creds or not self.creds.valid:
if self.creds and self.creds.expired and self.creds.refresh_token:
self.creds.refresh(Request())
else:
flow = InstalledAppFlow.from_client_secrets_file(
credentials_path, self.SCOPES)
self.creds = flow.run_local_server(
port=8085,
success_message='The authentication flow has completed. You may close this window.',
open_browser=True
)
# Save the credentials for the next run
with open('token.pickle', 'wb') as token:
pickle.dump(self.creds, token)
self.service = build('sheets', 'v4', credentials=self.creds)
def get_previous_posts(self):
# Implementation for getting previous posts
try:
result = self.service.spreadsheets().values().get(
spreadsheetId='1CL0L4V288SEygm0BieMRM8t8h7MbcV9bYyzkDc0zInU',
range='Sheet1!A:D'
).execute()
rows = result.get('values', [])
if not rows:
return []
posts = []
for row in rows[1:]: # Skip header
if len(row) >= 4:
posts.append({
'title': row[0],
'keywords': row[1],
'summary': row[2],
'url': row[3]
})
return posts
except Exception as e:
print(f"Error getting previous posts: {e}")
return []
def mark_cluster_complete(self, sheet_id: str, sheet_name: str, row_number: int):
range_name = f"{sheet_name}!E{row_number}"
body = {
'values': [['yes']]
}
self.service.spreadsheets().values().update(
spreadsheetId=sheet_id,
range=range_name,
valueInputOption='RAW',
body=body
).execute()
def log_completed_post(self, sheet_id: str, metadata: Dict):
range_name = 'Sheet1!A:D'
body = {
'values': [[
metadata['title'],
metadata['keywords'],
metadata['meta_description'],
f"https://yourblog.com/{metadata['slug']}"
]]
}
self.service.spreadsheets().values().append(
spreadsheetId=sheet_id,
range=range_name,
valueInputOption='RAW',
insertDataOption='INSERT_ROWS',
body=body
).execute()