37 lines
1,007 B
Python
37 lines
1,007 B
Python
|
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}")
|