django-weather/weather_project/weather/tasks.py

37 lines
1,007 B
Python
Raw Permalink Normal View History

2025-04-01 13:20:23 +00:00
import os
import requests
import logging
from celery import shared_task
from django.core.mail import send_mail
from django.conf import settings
logger = logging.getLogger(__name__)
API_KEY = 'a7cc162fc60a76d2e31461071634b8ce'
@shared_task
def send_weather_email(city, email):
url = f'https://api.openweathermap.org/data/2.5/weather?q={city}&appid={API_KEY}&units=metric&lang=en'
try:
response = requests.get(url)
response.raise_for_status()
data = response.json()
temp = data['main']['temp']
description = data['weather'][0]['description']
message = f"Weather in {city}: {description}, {temp}°C"
send_mail(
subject=f"Weather in {city}",
message=message,
from_email=settings.DEFAULT_FROM_EMAIL,
recipient_list=[email]
)
logger.info(f"[send_weather_email] Email sent successfully")
except Exception as e:
logger.exception(f"[send_weather_email] Failed: {e}")