Como sabemos, Python es un lenguaje multipropósito y se usa ampliamente para secuencias de comandos. Su uso no solo se limita a resolver cálculos complejos, sino también a automatizar tareas de la vida diaria. Digamos que queremos realizar un seguimiento de la disponibilidad de cualquier producto de Amazon y aprovechar la oferta cuando cambie la disponibilidad del producto e informar al usuario de la disponibilidad por correo electrónico. Será muy divertido escribir un script de Python para esto.
Nota: Instale las bibliotecas requeridas (según el código) antes de ejecutar el script. Además, tenga en cuenta que si el producto no está disponible actualmente, no se enviará ningún correo electrónico al usuario. El usuario debe proporcionar Asin Id para el producto del que desea realizar un seguimiento.
Funcionamiento de cada módulo utilizado:
-> requests: se usa para hacer que HTTP obtenga y publique requests
-> tiempo: se usa para encontrar la hora actual, esperar, dormir
-> programa: se usa para programar una función para que se ejecute nuevamente después de intervalos. Es similar a la funcionalidad «setInterval» en JavaScript.
-> smptlib: se usa para enviar correos electrónicos usando Python.
A continuación se muestra la implementación del proyecto anterior:
Python3
# Python script for Amazon product availability checker # importing libraries from lxml import html import requests from time import sleep import time import schedule import smtplib # Email id for who want to check availability receiver_email_id = "EMAIL_ID_OF_USER" def check(url): headers = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.90 Safari/537.36'} # adding headers to show that you are # a browser who is sending GET request page = requests.get(url, headers = headers) for i in range(20): # because continuous checks in # milliseconds or few seconds # blocks your request sleep(3) # parsing the html content doc = html.fromstring(page.content) # checking availability XPATH_AVAILABILITY = '//div[@id ="availability"]//text()' RAw_AVAILABILITY = doc.xpath(XPATH_AVAILABILITY) AVAILABILITY = ''.join(RAw_AVAILABILITY).strip() if RAw_AVAILABILITY else None return AVAILABILITY def sendemail(ans, product): GMAIL_USERNAME = "YOUR_GMAIL_ID" GMAIL_PASSWORD = "YOUR_GMAIL_PASSWORD" recipient = receiver_email_id body_of_email = ans email_subject = product + ' product availability' # creates SMTP session s = smtplib.SMTP('smtp.gmail.com', 587) # start TLS for security s.starttls() # Authentication s.login(GMAIL_USERNAME, GMAIL_PASSWORD) # message to be sent headers = "\r\n".join(["from: " + GMAIL_USERNAME, "subject: " + email_subject, "to: " + recipient, "mime-version: 1.0", "content-type: text/html"]) content = headers + "\r\n\r\n" + body_of_email s.sendmail(GMAIL_USERNAME, recipient, content) s.quit() def ReadAsin(): # Asin Id is the product Id which # needs to be provided by the user Asin = 'B077PWK5BT' url = "http://www.amazon.in/dp/" + Asin print ("Processing: "+url) ans = check(url) arr = [ 'Only 1 left in stock.', 'Only 2 left in stock.', 'In stock.'] print(ans) if ans in arr: # sending email to user if # in case product available sendemail(ans, Asin) # scheduling same code to run multiple # times after every 1 minute def job(): print("Tracking....") ReadAsin() schedule.every(1).minutes.do(job) while True: # running all pending tasks/jobs schedule.run_pending() time.sleep(1)
Producción:
Tracking.... Processing: http://www.amazon.in/dp/B077PWK5BT Only 1 left in stock. Tracking.... Processing: http://www.amazon.in/dp/B077PWK5BT Only 1 left in stock. Tracking.... Processing: http://www.amazon.in/dp/B077PWK5BT Only 1 left in stock.
Tenga en cuenta que el programa puede arrojar un error (alerta de seguridad crítica/intento de inicio de sesión bloqueado) al enviar el correo al usuario, lo que puede solucionarse modificando la configuración de seguridad en la aplicación de correo que está utilizando.