| import os |
| from gtts import gTTS |
| import gradio as gr |
| import gspread |
| from oauth2client.service_account import ServiceAccountCredentials |
| from datetime import datetime |
| import requests |
| import traceback |
|
|
| |
| WEATHER_API_KEY = "6e55658a10b85904fe0c3b589a54bf7f" |
| SHEET_CREDS_FILE = "google_sheet_credentials.json" |
| SHEET_NAME = "LocationLogs" |
|
|
| |
| def setup_sheets(): |
| try: |
| scope = ["https://spreadsheets.google.com/feeds", "https://www.googleapis.com/auth/drive"] |
| creds = ServiceAccountCredentials.from_json_keyfile_name(SHEET_CREDS_FILE, scope) |
| client = gspread.authorize(creds) |
| sheet = client.open(SHEET_NAME).sheet1 |
| return sheet |
| except Exception as e: |
| raise Exception(f"Google Sheets setup failed: {str(e)}") |
|
|
| |
| def speak(text, filename="voice.mp3"): |
| try: |
| tts = gTTS(text) |
| tts.save(filename) |
| return filename |
| except Exception as e: |
| raise Exception(f"Text-to-speech failed: {str(e)}") |
|
|
| |
| def get_weather(city): |
| try: |
| url = f"http://api.openweathermap.org/data/2.5/weather?q={city}&appid={WEATHER_API_KEY}&units=metric" |
| res = requests.get(url) |
| data = res.json() |
| desc = data["weather"][0]["description"] |
| temp = data["main"]["temp"] |
| return f"{desc.capitalize()}, {temp}°C" |
| except Exception as e: |
| return "Weather info unavailable" |
|
|
| |
| def log_and_notify(place, city, note): |
| try: |
| sheet = setup_sheets() |
| now = datetime.now().strftime("%Y-%m-%d %H:%M:%S") |
| weather = get_weather(city) |
|
|
| |
| sheet.append_row([now, place, city, note, weather]) |
|
|
| reminder_text = f"Reminder! You are near {place}. Note: {note}. Weather is {weather}." |
| voice_file = speak(reminder_text) |
| return reminder_text, voice_file |
|
|
| except Exception as e: |
| error_msg = f"Error: {str(e)}\n{traceback.format_exc()}" |
| return error_msg, None |
|
|
| |
| interface = gr.Interface( |
| fn=log_and_notify, |
| inputs=[ |
| gr.Textbox(label="Place Name", placeholder="eg. Starbucks, MG Road"), |
| gr.Textbox(label="City", placeholder="eg. Bengaluru"), |
| gr.Textbox(label="Reminder Note", placeholder="eg. Buy coffee here"), |
| ], |
| outputs=[ |
| gr.Textbox(label="Reminder Text"), |
| gr.Audio(type="filepath", label="Voice Reminder") |
| ], |
| title="📍 Location Reminder App", |
| description="⏰ Save a place and note — get a voice reminder + weather info when near the location!" |
| ) |
|
|
| if __name__ == "__main__": |
| interface.launch() |
|
|