Получить сообщения из канала телеграм, которые были опубликованы сегодня
Как получить сообщения из телеграм канала, которые были опубликованы только сегодня? Не могу найти как передать в параметр offset_date текущую дату из модуля datetime. Если передаю самостоятельно написанную, то всё работает. Как автоматически передавать текующую дату?
И как получать текстовое сообщение вместе с медиа? Как отдельно получать знаю, а вот как всё вместе - не понимаю.
Работает корректно:
date = datetime(2023, 3, 29)
with TelegramClient('session', api_id, api_hash) as client:
all_message = client.iter_messages('ссылка на тг канал', reverse=True, offset_date=date)
Не работает:
date = datetime.today().strftime('%Y.%m.%d')
with TelegramClient('session', api_id, api_hash) as client:
all_message = client.iter_messages('ссылка на тг канал', reverse=True, offset_date=datetime.today())
Ответы (1 шт):
Давайте вместе посмотрим какие результаты будут выведены при выполнении вашего кода:
date = datetime.datetime(2023, 3, 29)
print(date, type(date))
2023-03-29 00:00:00 <class 'datetime.datetime'>
Клас datetime всё как положено, а что насчёт следующего примера?
date = datetime.datetime.today().strftime('%Y.%m.%d')
print(date, type(date))
2023.03.29 <class 'str'>
А вот это уже интересно. Почему мы видим класс str? Разбираемся. Попробуем выполнить код поочерёдно:
date = datetime.datetime.today()
print(date, type(date))
date = date.strftime('%Y.%m.%d')
print(date, type(date))
Вывод:
2023-03-29 21:04:15.066619 <class 'datetime.datetime'>
2023.03.29 <class 'str'>
Значит функция strftime возвращает строку, на которую и ругается метод iter_messages. Решение: передавать экземпляр класса datetime. Как получить объект, использующий только дату без времени? Вот ответ:
date = datetime.datetime.today().date()
print(date, type(date))
2023-03-29 <class 'datetime.date'>
А ещё вы во втором примере передаёте объект класса datetime напрямую, в нём присутствует время и вероятно программа думает, что вы хотите получить посты конкретно за это время.