Уважаемые пользователи!
Напоминаем, что с 7 ноября 2020 года phpBB Group прекращает поддержку phpBB версии 3.2.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.2 до 31 декабря 2020 года.
С учетом этого, а также того, что версия 3.2.x больше не будет получать обновлений, за исключением связанных с проблемами безопасности
(только при их наличии и только до 7 ноября 2020 года), рекомендуется обновить конференции до версии 3.3.x.

Трансляция новых тем с форума phpBB в Telegram

Форум для авторов расширений для phpBB. Здесь можно попросить помощи в разработке у коллег.
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Мини [FAQ] по phpBB3.1.x/3.3.x | FAQ | Как задавать вопросы | Как устанавливать расширения

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
Mihal
phpBB 1.0.0
Сообщения: 3
Стаж: 15 дней

Трансляция новых тем с форума phpBB в Telegram

Сообщение Mihal »

Всем привет :)

Сразу прошу прощения за длиннопост, но по-другому, к сожалению, писать не умею.

Имеется форум на 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>
И из этих DIV'ов легко извлекаются сообщения мини-чата (с именем автора), отформатированные в BBCode,
что мне как раз подходит для трансляции в Telegram, так как BBCode очень удобно парсить и конвертировать
в скромный набор HTML-тэгов, которые поддерживает Telegram.

В общем эта часть бота уже нормально работает, сообщения транслируются из мини-чата на форуме в Telegram,
причем более-менее с сохранением форматирования и с графическими смайликами/эмодзи.

Но я хочу так же транслировать в Telegram и новые сообщения, которые появляются на форуме.

Благо, что заголовки (со ссылкой) новых сообщений так же появляются в мини-чате в виде:
"Новая тема: Название новой, свежесозданной, темы"
и я их отлавливаю, затем извлекаю заголовок и ссылку на новую тему вида: https://www.САЙТ.ru/forum/viewtopic.php?p=157301#p157301
по этой ссылке я могу получить HTML-страницу с новой темой и первым постом в ней и из неё извлечь автора темы и текст поста,
но я получаю текст с полной потерей форматирования, размеров, цветов, спойлеров, цитат и т.д.
Транслированная в Telegram информация о новой теме на форуме выглядит пока примерно так:
11.jpg
Текст поста пока - это просто голый текст, даже переводы строки "съедены".
А мне бы хотелось сохранить форматирование текста поста, который я транслирую в 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'ами?

Спасибо.
Последний раз редактировалось Sheer 11.02.2021 3:09, всего редактировалось 1 раз.
Причина: bb-код
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 15375
Стаж: 14 лет 9 месяцев
Откуда: Красноярск
Благодарил (а): 406 раз
Поблагодарили: 1832 раза

Re: Трансляция новых тем с форума phpBB в Telegram

Сообщение rxu »

Прямым SQL запросом к базе данных.
Изображение
Mihal
phpBB 1.0.0
Сообщения: 3
Стаж: 15 дней

Re: Трансляция новых тем с форума phpBB в Telegram

Сообщение Mihal »

Разве можно сделать прямой запрос к базе сайта/phpBB со стороннего "клиентского" компьютера?

Прямой запрос я же могу сделать только на сервере из PHP-скрипта на самом сайте (форуме),
но никак не со стороннего "клиентского" компьютера из скрипта на Python'е?

Мне то нужно из стороннего скрипта, запущенного на другом компьютере,
получать текст поста на форуме по его ID ("p=...") в BBCode-фоорматированом виде.
Аватара пользователя
rxu
phpBB Guru
phpBB Guru
Сообщения: 15375
Стаж: 14 лет 9 месяцев
Откуда: Красноярск
Благодарил (а): 406 раз
Поблагодарили: 1832 раза

Re: Трансляция новых тем с форума phpBB в Telegram

Сообщение rxu »

Mihal писал(а): 11.02.2021 2:58 причем получить именно в том виде, в котором он редактируется (и видимо хранится в базе)
Вы более определенно выражайтесь, чтобы получить нужный ответ. Никто не знает, где и как вы собираетесь использовать свой скрипт, только для себя или для сторонних пользователей, используя логины доступа к БД или нет.
Mihal писал(а): 11.02.2021 2:58 обратиться к jquery_base.php и получить текст поста можно только если ты залогинен на форуме
В phpBB нет такого файла, и почему к нему можно обратиться только будучи залогиненным, неясно. Переделайте этот сторонний скрипт так, чтобы логин не требовался. Либо сделайте собственный скрипт в корне phpBB, который будет получать пост из БД в нужном виде.
Изображение
Mihal
phpBB 1.0.0
Сообщения: 3
Стаж: 15 дней

Re: Трансляция новых тем с форума phpBB в Telegram

Сообщение Mihal »

rxu писал(а): 13.02.2021 11:20 Вы более определенно выражайтесь, чтобы получить нужный ответ.
Да. Я, похоже, недостаточно ясно описал ситуацию.
Форум, с которого я хочу получать информацию - не мой.
Владелец форума в курсе, что я делаю телеграм-бота для трансляции в телеграм форумного мини-чата (mchat.php) и новых постов.
Просить владельца форума переделывать "под меня" phpbb-скрипты (+сторонние) я, наверное, не буду, так как у него и без меня с форумом работы много.
rxu писал(а): 13.02.2021 11:20 Либо сделайте собственный скрипт в корне phpBB, который будет получать пост из БД в нужном виде.
Спасибо, это хороший вариант, спрошу у владельца форума, можно ли добавить на сайт свой PHP-скрипт-"шлюз" .

Вернуться в «Для авторов»