Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 15, 2023 19:25:36

GloverV
Зарегистрирован: 2023-01-15
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

Нужна помощь по модулю requests и telegram

У меня есть база данных в списке. Там 113 пользователей (иногда меньше иногда больше) и некая информация про них. Затем я высылаю заказчику эту инфу в тг боте с помощью requests.get, но сталкиваюсь с проблемой лимита символов в тг. Каким образом я могу раздробить базу данных на сообщения по 25 юзеров в каждом?

Отредактировано GloverV (Янв. 15, 2023 19:26:57)

Офлайн

#2 Янв. 15, 2023 20:02:30

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1349
Репутация: +  118  -
Профиль   Отправить e-mail  

Нужна помощь по модулю requests и telegram

GloverV
но сталкиваюсь с проблемой лимита символов в тг.
собрать пакеты по приемлемому кол-ву символов из базы, потом эти пакеты отправить в телеграмм.

  
text = 'У меня есть база данных в списке. Там 113 пользователей (иногда меньше иногда больше) и некая информация про них.' \
       ' Затем я высылаю заказчику эту инфу в тг боте с помощью requests.get, но сталкиваюсь с проблемой лимита символов в тг. ' \
       'Каким образом я могу раздробить базу данных на сообщения по 25 юзеров в каждом?'
 
def split_data(text, len_package):
    return [text[i:i+len_package] for i in range(0, len(text), len_package)]
 
packages = split_data(text, 25)
print(f'пакетов для отправки: {len(packages)}\n')
for i in packages:
    print(i)

Офлайн

#3 Янв. 15, 2023 23:29:21

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9852
Репутация: +  853  -
Профиль   Отправить e-mail  

Нужна помощь по модулю requests и telegram

GloverV
но сталкиваюсь с проблемой лимита символов в тг
Лимиты указаны на сайте https://telegram.org

https://core.telegram.org/bots/api#sendmessage
text 	String 	Yes 	Text of the message to be sent, 1-4096 characters after entities parsing

xam1816
  
def split_data(text, len_package):
Не, там надо по разным сообщениям распределить текст. Соответственно, если просто его нарезать по количеству символов, то слова будут разделяться посередине. Ну, например, имя пользователя username разделится на user и name или на use и rname. Поэтому надо сделать такую разделялку, которая делит по целым записям. То есть там надо учитывать записи, границы записей должны быть, длину записи сравнивать с длиной максимального сообщения и так далее.

GloverV
Каким образом я могу раздробить базу данных на сообщения по 25 юзеров в каждом?
Тебе придётся создать свою структуру <Сообщение> и заполнять её записями <Запись> через операцию <Добавить запись>. И вот это <Сообщение> будет способно добавить к себе ещё одну запись, но при этом оно само будет лимитировано, чтобы помещаться в сообщении, которое формируется в Telegram'е. Когда ты попытаешься добавить в <Сообщение> ещё одну <Запись>, то проверка, которую проведёт операция <Добавить запись> покажет, что <Сообщение> уже заполнено и новая <Запись> в нём уже не помещается и что для неё нужно создавать новое сообщение.

Довольно сложно это для новичка. Там надо сделать классы Message и Record, где класс Message хранит у себя внутри список объектов Record и имеет операцию add_record(), которая умеет проверять длины. А чтобы получить длину записи, класс Record должен иметь операцию get_size(), которая возвращает размер в байтах того текста, который получится из этой записи в итоге. Естественно, у Message также должен быть метод to_string(), который у себя внутри составляет какую-то строку и при этом вызывает метод to_string() у каждой записи из списка записей. То есть у Record тоже должен быть свой метод to_string().

В результате ты должен накопить записи из базы данных где-то, получится список записей. Потом начать составлять сообщения с этими записями из списка записей. Когда сообщения заполненяются до лимитированных пределов, ты эти сообщения складываешь куда-то, в какой-то список сообщений, и начинаешь новые сообщения, складывая следующие записи туда. И вот когда у тебя будет список сообщений готовый, когда все записи закончатся, тогда ты этот список сообщений начинаешь отправлять в Telegram, отправляя сообщения из этого списка одно за другим. При этом каждое сообщение отправляется специальным отправителем Sender, который знает, как в Telegram сообщения отправлять.



Отредактировано py.user.next (Янв. 15, 2023 23:31:05)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version