Уведомления об днях рождениях
Предлагаю взять Python в руки, поднять сервер с базой MySQL и вспомнить этот мотив:
Пусть бегут неуклюже
Пешеходы по лужам,
А вода по асфальту рекой.
И неясно прохожим
В этот день непогожий,
Почему я веселый такой?
Для начала определяем, что мы будем делать , а главное какой результат нам необходим на выходе. Предлагаю начать с конца — хочу получать уведомления в Telegram о дне рождения человека(сотрудника) и знать сколько ему исполнилось лет. Значит нам нужен бот + какой-то скрипт (писать будем на Python) и база данных с информацией о людях(сотрудниках). Python кстати имеет в своем функционале встроенную базу данных — SQLite. Но мы будем использовать базу MySQL.
Создаем базу данных:
1 2 3 4 5 |
CREATE TABLE BRTHD ( id int NOT NULL, FIO varchar(300) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL, dob date DEFAULT NULL, phone int DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3; ALTER TABLE BRTHD ADD PRIMARY KEY (id); ALTER TABLE BRTHD MODIFY id int NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=1; COMMIT; |
Теперь сам скрипт на Python:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
import pymysql from datetime import datetime, date import telebot token = 'ТОКЕН_БОТА' bot = telebot.TeleBot(token) chat_id = 'КОМУ_ОТПРАВЛЯЕМ_СООБЩЕНИЕ' connection = pymysql.connect(host='СЕРВЕР_С_БАЗОЙ_АДРЕС', user='ПОЛЬЗОВАТЕЛЬ', passwd='ПАРОЛЬ_ОТ_ПОЛЬЗОВАТЕЛЯ', database='ИМЯ_БАЗЫ_ДАННЫХ') with connection: cursor = connection.cursor() retrive = "SELECT * FROM `BRTHD` WHERE DAYOFYEAR(curdate()) <= DAYOFYEAR(DATE_ADD(`dob`, INTERVAL (YEAR(NOW()) - YEAR(`dob`)) YEAR)) AND DAYOFYEAR(curdate()) >= DAYOFYEAR(DATE_ADD(`dob`, INTERVAL (YEAR(NOW()) - YEAR(`dob`)) YEAR));" cursor.execute(retrive) rows = cursor.fetchall() for row in rows: userbir = "{1}".format(row[0], row[1], row[2]) birday = "{2}".format(row[0], row[1], row[2]) s = birday.replace('-', ' ') date_of_birth = datetime.strptime(s, "%Y %m %d") def calculate_age(born): today = date.today() return today.year - born.year - ((today.month, today.day) < (born.month, born.day)) age = calculate_age(date_of_birth) text = 'Сегодня день рождение у '+ userbir+ '\nИсполняется - '+ str(age) + ' лет' bot.send_message(chat_id, text) |
Не забываем установить в планировщике выполнение данного скрипта раз в сутки (желательно с утра).