
Сразу прошу прощения за длиннопост, но по-другому, к сожалению, писать не умею.
Имеется форум на phpBB3, точную версию не знаю, но старая, типа 3.0.11, но возможно и постарше.
На форуме установлено расширение мини-чат mChat -> https://www.phpbb.com/customise/db/exte ... extension/
В этом мини-чате переписываются форумчане и кроме того, туда постятся заголовки и ссылки на новые темы, создаваtvst на форуме.
Примерно так: "Новая тема: Название новой, свежесозданной, темы"
Я решил написать бота на Python, который будет транслировать мини-чат с форума в Telegram.
Нашел, что при обращении по адресу:
https://www.САЙТ.ru/forum/mchat.php?mode=read
можно получить последние 25 сообщений мини-чата в виде 25 DIV'ов такого вида:
Код: Выделить всё
<div id="messНОМЕРСООБЩЕНИЯ" class="mChatBG2 mChatHover"> ... </div>
что мне как раз подходит для трансляции в Telegram, так как BBCode очень удобно парсить и конвертировать
в скромный набор HTML-тэгов, которые поддерживает Telegram.
В общем эта часть бота уже нормально работает, сообщения транслируются из мини-чата на форуме в Telegram,
причем более-менее с сохранением форматирования и с графическими смайликами/эмодзи.
Но я хочу так же транслировать в Telegram и новые сообщения, которые появляются на форуме.
Благо, что заголовки (со ссылкой) новых сообщений так же появляются в мини-чате в виде:
"Новая тема: Название новой, свежесозданной, темы"
и я их отлавливаю, затем извлекаю заголовок и ссылку на новую тему вида:
https://www.САЙТ.ru/forum/viewtopic.php?p=157301#p157301
по этой ссылке я могу получить HTML-страницу с новой темой и первым постом в ней и из неё извлечь автора темы и текст поста,
но я получаю текст с полной потерей форматирования, размеров, цветов, спойлеров, цитат и т.д.
Транслированная в Telegram информация о новой теме на форуме выглядит пока примерно так: Текст поста пока - это просто голый текст, даже переводы строки "съедены".
А мне бы хотелось сохранить форматирование текста поста, который я транслирую в Telegram.
Для этого мне или надо парсить полученный HTML, в котором все эти замечательные и такие удобные для меня bbCode превратились в HTML-разметку с однотипными <span> и кучей <script>, которую очень сложно распарсить (особенно если BBCode в тексте поста были вложенными) и сконвертировать в тот вид, который можно транслировать в Telegram.
Так как из модуля mChat.php мне удалось получать текст сообщений с BBCode-форматированием, то есть до превращения BBCode в HTML,
то я стал искать, как теперь получить текст первого поста в новой теме в таком-же "чистом" BBCode-виде, до превращения в HTML,
то есть мне надо получить, как я понимаю, чистый тест поста из базы данных phpBB.
Единственное, чего мне удалось добиться, это получить текст с BBCode'ами через как-бы быстрое редактирование поста
с помощью jquery_base.php то есть примерно по такому запросу:
https://www.САЙТ.ru/forum/jquery_base.php?mode=quickedit&qe_mode=init&post_id=157301
В результате такого запроса я получаю JSON-файл в котором есть текст поста в нужном мне "чистом" виде, с BBCode'ами, не превращенный пока в HTML.
Но теперь проблема в том, что обратиться к jquery_base.php и получить текст поста можно только если ты залогинен на форуме,
а значит надо снова усложнять и усложнять бота, добавлять в него сессии, авторизацию на форуме, контроль, что авторизация не пропала по ходу работы (а такое бывает) и т.д.
Бот становится чем дальше, тем сложнее, а я пишу на Python всего 2-3 недели и, сами понимаете, почти "по нулям" во всём этом.
Дело идет слишком медленно и трудозатратно.
Ну вот я, собственно, подобрался к тому, что хотел у вас спросить:
Может быть есть какой-то способ максимально просто получить с форума текст поста, зная его номер, причем получить именно в том виде, в котором он редактируется (и видимо хранится в базе), то есть с форматированием BBCode'ами?
Спасибо.