Автоматическая отправка сообщений WhatsApp с Python

Автоматическая отправка сообщений WhatsApp с Python

В современном мире автоматизация — ключевой фактор для повышения эффективности повседневных задач. Одним из примеров автоматизации является отправка сообщений WhatsApp с помощью программного кода. В этой статье мы рассмотрим, как использовать Python-библиотеку PyWhatKit для планирования и отправки сообщений WhatsApp на заданные номера с помощью простого скрипта.

Этот Python-код позволяет пользователю вводить номер телефона, текст сообщения, а также дату и время отправки. Скрипт проверяет корректность данных и отправляет сообщение автоматически. Давайте разберёмся, как работает данный скрипт и как его использовать.

Установка необходимых библиотек

Перед использованием кода убедитесь, что библиотека PyWhatKit установлена. Установка выполняется с помощью команды:

pip install pywhatkit

Также понадобится встроенная библиотека re для работы с регулярными выражениями и модуль datetime для работы с датами и временем.

Разбор функций в коде

1. Проверка номера телефона

Функция is_valid_phone_number(phone_number) проверяет, соответствует ли введённый номер телефона международному формату:

def is_valid_phone_number(phone_number):
    """Проверяет, является ли номер телефона корректным."""
    pattern = r"^\+\d{11,15}$"
    return re.match(pattern, phone_number)
  • Формат: Номер должен начинаться с символа +, за которым следуют от 11 до 15 цифр (например, +12345678901).
  • Если номер некорректный, пользователь получает сообщение об ошибке.

2. Получение номера телефона от пользователя

Функция get_phone_number() запрашивает номер телефона у пользователя до тех пор, пока он не введёт корректный формат:

def get_phone_number():
    """Получает и проверяет номер телефона от пользователя."""
    while True:
        phone_number = input("Введите номер телефона (с кодом страны, например, +1234567890): ")
        if is_valid_phone_number(phone_number):
            return phone_number
        else:
            print("Некорректный номер телефона. Убедитесь, что номер начинается с '+' и содержит код страны.")

3. Ввод текста сообщения

Функция get_message() просто возвращает введённое пользователем сообщение:

def get_message():
    """Получает текст сообщения от пользователя."""
    return input("Введите сообщение: ")

4. Ввод даты отправки сообщения

Функция get_date() позволяет пользователю задать дату отправки в формате DD-MM-YYYY:

def get_date():
    """Получает дату отправки сообщения от пользователя в формате DD-MM-YYYY."""
    while True:
        date_input = input("Введите дату отправки сообщения (в формате DD-MM-YYYY). Оставьте пустым для отправки сегодня: ")
        if date_input == "":
            return datetime.now().date()
        try:
            date = datetime.strptime(date_input, "%d-%m-%Y").date()
            if date >= datetime.now().date():
                return date
            else:
                print("Дата не может быть в прошлом. Введите корректную дату.")
        except ValueError:
            print("Некорректный формат даты. Используйте формат DD-MM-YYYY.")

Если дата не введена, скрипт использует текущий день для отправки сообщения.

5. Ввод времени отправки

Функция get_time() принимает время в формате HH:MM:

def get_time():
    """Получает время отправки сообщения в формате HH:MM."""
    while True:
        time_input = input("Введите время отправки сообщения (в формате HH:MM, 24-часовой формат). Оставьте пустым для немедленной отправки: ")
        if time_input == "":
            return None, None
        try:
            hour, minute = map(int, time_input.split(":"))
            if 0 <= hour < 24 and 0 <= minute < 60:
                return hour, minute
            else:
                print("Некорректное время. Введите часы (0-23) и минуты (0-59).")
        except ValueError:
            print("Некорректный формат. Введите время в формате HH:MM.")

Основная функция и отправка сообщений

Функция main() объединяет все шаги и вызывает отправку сообщения:

def main():
    phone_number = get_phone_number()
    message = get_message()
    date = get_date()
    hour, minute = get_time()

    try:
        if hour is not None and minute is not None:
            send_datetime = datetime.combine(date, datetime.min.time()) + timedelta(hours=hour, minutes=minute)
            now = datetime.now()
            if send_datetime <= now:
                print("Дата и время отправки не могут быть в прошлом.")
            else:
                pywhatkit.sendwhatmsg(phone_number, message, hour, minute, wait_time=15)
                print(f"Сообщение запланировано на отправку по номеру {phone_number} {date.strftime('%d-%m-%Y')} в {hour:02d}:{minute:02d}.")
        else:
            pywhatkit.sendwhatmsg_instantly(phone_number, message, tab_close=True)
            print(f"Сообщение отправлено немедленно на номер {phone_number}.")
    except Exception as e:
        print(f"Произошла ошибка: {e}")

if __name__ == "__main__":
    main()

Как это работает:

  1. Пользователь вводит:
    • Номер телефона.
    • Текст сообщения.
    • Дату и время отправки (или оставляет поля пустыми для мгновенной отправки).
  2. Если задано время, скрипт проверяет, что дата и время не в прошлом, и запланирует сообщение с помощью pywhatkit.sendwhatmsg.
  3. Если время не указано, сообщение отправляется немедленно с помощью pywhatkit.sendwhatmsg_instantly.

Особенности и преимущества использования PyWhatKit

  • Автоматизация: Позволяет отправлять сообщения в заранее запланированное время.
  • Простой интерфейс: Пользователю нужно лишь ввести данные, и скрипт выполнит всю работу.
  • Универсальность: Поддержка международного формата номеров.
  • Ошибкозащищенность: Проверка корректности ввода данных (номера телефона, даты, времени).

Заключение

Этот Python-скрипт — отличное решение для автоматизации отправки сообщений WhatsApp. Он идеально подходит для напоминаний, уведомлений или рекламных рассылок. Использование PyWhatKit значительно упрощает процесс интеграции WhatsApp с вашими рабочими процессами.

Примеры использования

Запланировать отправку на конкретную дату и время:

Введите номер телефона (с кодом страны, например, +1234567890): +1234567890
Введите сообщение: Привет! Как дела?
Введите дату отправки сообщения (в формате DD-MM-YYYY). Оставьте пустым для отправки сегодня: 25-12-2024
Введите время отправки сообщения (в формате HH:MM, 24-часовой формат). Оставьте пустым для немедленной отправки: 15:30
Сообщение запланировано на отправку по номеру +1234567890 25-12-2024 в 15:30.

Отправка сообщения немедленно:

Введите номер телефона (с кодом страны, например, +1234567890): +1234567890
Введите сообщение: Привет! Как дела?
Введите дату отправки сообщения (в формате DD-MM-YYYY). Оставьте пустым для отправки сегодня:
Введите время отправки сообщения (в формате HH:MM, 24-часовой формат). Оставьте пустым для немедленной отправки:
Сообщение отправлено немедленно на номер +1234567890.

Полный код:

import pywhatkit
import re
from datetime import datetime, timedelta

def is_valid_phone_number(phone_number):
    """Проверяет, является ли номер телефона корректным."""
    pattern = r"^\+\d{11,15}$"
    return re.match(pattern, phone_number)

def get_phone_number():
    """Получает и проверяет номер телефона от пользователя."""
    while True:
        phone_number = input("Введите номер телефона (с кодом страны, например, +1234567890): ")
        if is_valid_phone_number(phone_number):
            return phone_number
        else:
            print("Некорректный номер телефона. Убедитесь, что номер начинается с '+' и содержит код страны.")

def get_message():
    """Получает текст сообщения от пользователя."""
    return input("Введите сообщение: ")

def get_date():
    """Получает дату отправки сообщения от пользователя в формате DD-MM-YYYY."""
    while True:
        date_input = input("Введите дату отправки сообщения (в формате DD-MM-YYYY). Оставьте пустым для отправки сегодня: ")
        if date_input == "":
            return datetime.now().date()
        try:
            date = datetime.strptime(date_input, "%d-%m-%Y").date()
            if date >= datetime.now().date():
                return date
            else:
                print("Дата не может быть в прошлом. Введите корректную дату.")
        except ValueError:
            print("Некорректный формат даты. Используйте формат DD-MM-YYYY.")

def get_time():
    """Получает время от пользователя в формате HH:MM."""
    while True:
        time_input = input("Введите время отправки сообщения (в формате HH:MM, 24-часовой формат). Оставьте пустым для немедленной отправки: ")
        if time_input == "":
            return None, None
        try:
            hour, minute = map(int, time_input.split(":"))
            if 0 <= hour < 24 and 0 <= minute < 60:
                return hour, minute
            else:
                print("Некорректное время. Введите часы (0-23) и минуты (0-59).")
        except ValueError:
            print("Некорректный формат. Введите время в формате HH:MM.")

def main():
    phone_number = get_phone_number()
    message = get_message()
    date = get_date()
    hour, minute = get_time()

    try:
        if hour is not None and minute is not None:
            send_datetime = datetime.combine(date, datetime.min.time()) + timedelta(hours=hour, minutes=minute)
            now = datetime.now()
            if send_datetime <= now:
                print("Дата и время отправки не могут быть в прошлом.")
            else:
                pywhatkit.sendwhatmsg(phone_number, message, hour, minute, wait_time=15)
                print(f"Сообщение запланировано на отправку по номеру {phone_number} {date.strftime('%d-%m-%Y')} в {hour:02d}:{minute:02d}.")
        else:
            pywhatkit.sendwhatmsg_instantly(phone_number, message, tab_close=True)
            print(f"Сообщение отправлено немедленно на номер {phone_number}.")
    except Exception as e:
        print(f"Произошла ошибка: {e}")

if __name__ == "__main__":
    main()
Комментарии

Пока нет комментариев. Будьте первым!

Оставить комментарий

Чтобы оставить комментарий, пожалуйста, войдите или зарегистрируйтесь.