Automating Website Change Notifications via Email using Python

Python Web Scrapping

In the digital age, staying updated with real-time information is crucial for businesses and individuals alike. In this article, we’ll explore how to leverage the power of Python to automate website change notifications via email. By monitoring a website’s content and sending email alerts whenever changes are detected, you can efficiently stay informed about the latest updates. We’ll break down the code snippet you provided to understand each component and its role in achieving this task.

1. Importing Required Libraries

The script starts by importing the necessary libraries:

  • requests: For making HTTP requests to fetch website content.
  • smtplib: For sending emails using the Simple Mail Transfer Protocol (SMTP).
  • email.mime.text and email.mime.multipart: For creating MIME-formatted email content.

2. Configuration Setup

Before delving into the main functionality, the script defines essential configurations:

  • sender_email, sender_password, receiver_email: Email addresses for sender and receiver.
  • smtp_server, smtp_port: SMTP server and port (Gmail’s SMTP server and port 587 in this case).
  • website_url: The URL of the website to monitor.
  • subject, message: Email subject and message content.

Read also……..

How to Integrate IP Camera in YOLO Model: A Comprehensive Guide for Enhanced Object Detection

3. Email Notification Function

A function named send_email_notification() is defined to send email notifications. It constructs a MIME-formatted email, attaches the message content, and tries to send the email. If successful, it prints a success message; otherwise, it handles any exceptions and prints an error message. The function ensures that the SMTP server is properly handled and closed in the end using a finally block.

4. Main Script Execution

The main script is encapsulated within a try block to handle any exceptions that might occur during its execution. Here’s what the main script does:

  • It uses the requests.get() method to fetch the content of the specified website_url.
  • The fetched content is stored in the current_content variable.
  • The script then compares current_content with previous_content to check for changes in the website’s content.
  • If a change is detected, the send_email_notification() function is called to send an email alert.
  • The previous_content is updated with the current_content to reflect the latest state of the website.
import requests
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart

# Email config
sender_email = 'xxxxxxxxx'
sender_password = 'xxxxxxx'
receiver_email = 'xxxxxxxxx'
smtp_server = 'smtp.gmail.com'
smtp_port = 587

# Website config
website_url = 'https://abcd.com/'
previous_content = response.text  # Var store the previous website content

# message
subject = 'website Update Notification'
message = 'new update available'

#Functionfor email notification
def send_email_notification():
    msg = MIMEMultipart()
    msg['From'] = sender_email
    msg['To'] = receiver_email
    msg['Subject'] = subject
    msg.attach(MIMEText(message, 'plain'))

    # Send the email
    try:
        server = smtplib.SMTP(smtp_server, smtp_port)
        server.starttls()
        server.login(sender_email, sender_password)
        server.send_message(msg)
        print('Email notification sent successfully.')
    except Exception as e:
        print('An error occurred while sending the email:', str(e))
    finally:
        if 'server' in locals():
            server.quit()

# Main script
try:
    response = requests.get(website_url)
    current_content = response.text

    # Compare current content with previous content
    if current_content != previous_content:
        send_email_notification()
        previous_content = current_content  # Update previous content

except Exception as e:
    print('An error occurred while fetching the website content:', str(e))

Must Read……

The Evolution of Artificial Intelligence: Complete History

Website New Update Auto Notification and updated data source link in Email using Latest Python Web scrapping Program.

#Enhancing Automated Website Change Notifications with Python
import requests
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
import difflib

# Email configuration
sender_email = 'xxxxxxxx'
sender_password = 'bxujgldpwboprxhy'
receiver_email = 'xxxxxxxxxx'
smtp_server = 'smtp.gmail.com'
smtp_port = 587

# Website configuration
websites = [
    {'url': 'https://website1.com/', 'previous_content': ''},
    # {'url': 'https://website2.com/', 'previous_content': ''},
    # {'url': 'https://website3.com/', 'previous_content': ''},
    # Add more websites here
]

# API configuration
# api_url = 'https://api.example.com/updates'

# Create the message
subject = 'Website Update Notification'

# Function to send email notification
def send_email_notification(website_url, content_diff):
    message = f'There is a new update on {website_url}.\n\nChanges:\n{content_diff}'

    msg = MIMEMultipart()
    msg['From'] = sender_email
    msg['To'] = receiver_email
    msg['Subject'] = subject
    msg.attach(MIMEText(message, 'plain'))

    # Send the email
    try:
        server = smtplib.SMTP(smtp_server, smtp_port)
        server.starttls()
        server.login(sender_email, sender_password)
        server.send_message(msg)
        print(f'Email notification sent successfully for {website_url}.')
    except Exception as e:
        print(f'An error occurred while sending the email for {website_url}:', str(e))
    finally:
        if 'server' in locals():
            server.quit()

# Main script
try:
    for website in websites:
        response = requests.get(website['url'])
        current_content = response.text

        # Compare current content with previous content
        if current_content != website['previous_content']:
            diff = difflib.unified_diff(website['previous_content'].splitlines(), current_content.splitlines())
            content_diff = '\n'.join(diff)
            send_email_notification(website['url'], content_diff)
            website['previous_content'] = current_content  # Update previous content

    # Call API to retrieve updates
    # api_response = requests.get(api_url)
    # updates = api_response.json()

    for update in updates:
        website_url = update['website']
        update_content = update['content']
        send_email_notification(website_url, update_content)

except Exception as e:
    print('An error occurred while monitoring websites:', str(e))

FAQs

1. What does this script do?

This script automates the process of monitoring websites for changes in their content and sends email notifications when updates are detected. It compares the current content of specified websites with their previously stored content and uses email to alert users about any differences.

2. How does the email notification work?

The script uses the smtplib library to send email notifications. It constructs an email with details about the website URL and the differences found in the content. The script connects to the SMTP server (Gmail’s SMTP server in this case), logs in using the sender’s email credentials, sends the email, and then closes the server connection.

3. What is the purpose of the difflib library?

The difflib library provides tools for comparing text data. In this script, it’s used to generate a unified diff between the previously stored website content and the current content. This diff shows the differences between the two versions of text content.

4. How can I configure the script for my use?

You can configure the script by updating the variables in the “Configuration Setup” section. Set the sender and receiver email addresses, SMTP server details, and add websites you want to monitor to the websites list.

5. Can I monitor more than one website?

Yes, the script is designed to monitor multiple websites simultaneously. You can add as many websites as needed to the websites list in the “Configuration Setup” section.

6. Can I modify the email content format?

Absolutely. You can customize the email message format by editing the send_email_notification() function. The script constructs the email message using the unified diff generated by difflib, but you can change the message to suit your preferences.

7. How often does the script run and check for updates?

The script’s execution frequency depends on how often you run it. You could set up a scheduled task (cron job) to run the script at specific intervals. The more frequently you run the script, the more real-time your notifications will be.

8. Is the API integration necessary?

No, the API integration part is optional. It demonstrates how you can enhance the script by integrating an external API to retrieve website updates. If you don’t need this feature, you can simply remove or comment out the relevant sections.

9. What kind of errors can occur during script execution?

Various errors could occur, such as problems with internet connectivity, website unavailability, incorrect SMTP server details, or email-related issues. The script has robust exception handling to catch and handle these errors gracefully.

10. How can I expand this script’s functionality?

You can expand the script by adding more features, such as logging the updates, sending notifications through other channels (like SMS), incorporating more sophisticated content comparison techniques, or even building a web dashboard to view updates.

Leave a Comment