En este artículo, veremos cómo recopilar datos meteorológicos usando Python y recibir recordatorios por correo electrónico. Si el clima es lluvioso o nublado, este programa le enviará un «recordatorio de paraguas» a su correo electrónico para recordarle que empaque un paraguas antes de salir de casa. Extraeremos la información meteorológica de Google usando bs4 y solicitaremos bibliotecas en python.
Luego, según las condiciones climáticas, enviaremos el correo electrónico utilizando la biblioteca smtplib. Para ejecutar este programa todos los días a una hora específica, usaremos la biblioteca de programación en python.
Módulos necesarios
- bs4 : Beautiful Soup (bs4) es una biblioteca de Python para extraer datos de archivos HTML y XML. Para instalar esta biblioteca, escriba el siguiente comando en IDE/terminal.
pip install bs4
- requests: esta biblioteca le permite enviar requests HTTP/1.1 muy fácilmente. Para instalar esta biblioteca, escriba el siguiente comando en IDE/terminal.
pip install requests
- smtplib: smtplib es un módulo de Python que define un objeto de sesión de cliente SMTP, que se puede usar para enviar correo a cualquier máquina en Internet. Para instalar esta biblioteca, escriba el siguiente comando en el IDE/terminal.
pip install smtplib
- horario: un horario es una biblioteca de Python que se utiliza para programar tareas en momentos específicos del día o días específicos de la semana. Para instalar esta biblioteca, escriba el siguiente comando en el IDE/terminal.
pip install schedule
Implementación paso a paso
Paso 1: Importe las bibliotecas de programación, smtplib, requests y bs4.
Python3
import schedule import smtplib import requests from bs4 import BeautifulSoup
Paso 2: Cree una URL con el nombre de la ciudad especificada y cree una instancia de requests sin pasar por esta URL.
Python3
city = "Hyderabad" url = "https://www.google.com/search?q=" + "weather" + city html = requests.get(url).content
Paso 3: Pase el documento HTML recuperado a Beautiful Soup, que devolverá una string sin etiquetas HTML ni metadatos. Usando la función de búsqueda recuperaremos todos los datos necesarios.
Python3
soup = BeautifulSoup(html, 'html.parser') temperature = soup.find( 'div', attrs={'class': 'BNeawe iBp4i AP7Wnd'}).text time_sky = soup.find( 'div', attrs={'class': 'BNeawe tAd8D AP7Wnd'}).text # formatting data sky = time_sky.split('\n')[1]
Paso 4: Si las condiciones climáticas resultan ser lluviosas o nubladas, este programa enviará un correo electrónico con un mensaje de «recordatorio general» al destinatario. Para encapsular una conexión SMTP, he creado un objeto SMTP con los parámetros `smtp.gmail.com` y 587. Después de crear el objeto SMTP, puede iniciar sesión con su dirección de correo electrónico y contraseña.
Nota: Diferentes sitios web usan diferentes números de puerto. En este artículo, estamos usando una cuenta de Gmail para enviar correos electrónicos. El número de puerto utilizado aquí es «587». Si desea enviar correo a través de un sitio web que no sea Gmail, debe obtener la información correspondiente.
Python3
if sky == "Rainy" or sky == "Rain And Snow" or sky == "Showers" or sky == "Haze" or sky == "Cloudy": smtp_object = smtplib.SMTP('smtp.gmail.com', 587)
Paso 5: Por motivos de seguridad, la conexión SMTP ahora se encuentra en modo TLS. Transport Layer Security cifra todos los comandos SMTP. Después de eso, para fines de autenticación, debe pasar las credenciales de su cuenta de Gmail en la instancia de inicio de sesión. Si ingresa una identificación de correo electrónico o contraseña no válida, el compilador mostrará un error de autenticación.
Guarde el mensaje que necesita enviar en una variable, como msg. Utilice la instancia de sendmail() para enviar su mensaje. sendmail() utiliza tres parámetros: sender_email_id, receiver_email_id y message_to_be_sent. El orden de estos tres parámetros debe ser el mismo. Esto enviará un correo electrónico desde su cuenta. Después de completar la tarea, use quit() para finalizar la sesión SMTP.
Python3
# start TLS for security smtp_object.starttls() # Authentication smtp_object.login("YOUR EMAIL", "PASSWORD") subject = "Umbrella Reminder" body = f"Take an umbrella before leaving the house.\ Weather condition for today is ", { sky}, " and temperature is {temperature} in {city}." msg = f"Subject:{subject}\n\n{body}\n\nRegards,\ \nGeeksforGeeks".encode('utf-8') # sending the mail smtp_object.sendmail("FROM EMAIL ADDRESS", "TO EMAIL ADDRESS", msg) # terminating the session smtp_object.quit() print("Email Sent!")
Paso 6: usando la biblioteca de programación, programe la tarea todos los días a una hora específica. schedule.run_pending() Comprueba si una tarea programada está pendiente de ejecución o no.
Python3
# Every day at 06:00AM time umbrellaReminder() is called. schedule.every().day.at("06:00").do(umbrellaReminder) while True: schedule.run_pending()
Nota: cuando ejecuta este programa, le arrojará un smtplib.SMTPAuthenticationError y también le enviará una alerta de seguridad crítica a su correo electrónico porque, en pocas palabras, Google no le permite iniciar sesión a través de smtplib porque ha marcado este tipo de inicio de sesión. como “menos seguro”, por lo que lo que tienes que hacer es ir a este enlace mientras estás logueado en tu cuenta de google, y permitir el acceso:
A continuación se muestra la implementación completa:
Python3
import schedule import smtplib import requests from bs4 import BeautifulSoup def umbrellaReminder(): city = "Hyderabad" # creating url and requests instance url = "https://www.google.com/search?q=" + "weather" + city html = requests.get(url).content # getting raw data soup = BeautifulSoup(html, 'html.parser') temperature = soup.find('div', attrs={'class': 'BNeawe iBp4i AP7Wnd'}).text time_sky = soup.find('div', attrs={'class': 'BNeawe tAd8D AP7Wnd'}).text # formatting data sky = time_sky.split('\n')[1] if sky == "Rainy" or sky == "Rain And Snow" or sky == "Showers" or sky == "Haze" or sky == "Cloudy": smtp_object = smtplib.SMTP('smtp.gmail.com', 587) # start TLS for security smtp_object.starttls() # Authentication smtp_object.login("YOUR EMAIL", "PASSWORD") subject = "GeeksforGeeks Umbrella Reminder" body = f"Take an umbrella before leaving the house.\ Weather condition for today is {sky} and temperature is\ {temperature} in {city}." msg = f"Subject:{subject}\n\n{body}\n\nRegards,\nGeeksforGeeks".encode( 'utf-8') # sending the mail smtp_object.sendmail("FROM EMAIL", "TO EMAIL", msg) # terminating the session smtp_object.quit() print("Email Sent!") # Every day at 06:00AM time umbrellaReminder() is called. schedule.every().day.at("06:00").do(umbrellaReminder) while True: schedule.run_pending()
Producción:
Ejemplo de correo electrónico de recordatorio de paraguas
Publicación traducida automáticamente
Artículo escrito por vinayedula y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA