В современном мире автоматизация — ключевой фактор для повышения эффективности повседневных задач. Одним из примеров автоматизации является отправка сообщений 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()
Как это работает:
- Пользователь вводит:
- Номер телефона.
- Текст сообщения.
- Дату и время отправки (или оставляет поля пустыми для мгновенной отправки).
- Если задано время, скрипт проверяет, что дата и время не в прошлом, и запланирует сообщение с помощью
pywhatkit.sendwhatmsg
. - Если время не указано, сообщение отправляется немедленно с помощью
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()
Пока нет комментариев. Будьте первым!