Для внешнего генератора мгновенных статей Facebook нам нужны обработанные HTML-публикации, но без рендеринга oneboxes…
Существует ли уже какой-либо такой маршрут или конечная точка API для публикаций?
Для внешнего генератора мгновенных статей Facebook нам нужны обработанные HTML-публикации, но без рендеринга oneboxes…
Существует ли уже какой-либо такой маршрут или конечная точка API для публикаций?
Возможно, это поможет GitHub - discourse/raw-post-button · GitHub
Привет, @adopilot, большое спасибо за ваш отзыв. Не могли бы вы уточнить?
Похоже, это компонент для просмотра необработанного поста.
Нам нужно что-то для отображения обработанного поста, но без oneboxes.
Извините, я думал, что вам нужен необработанный пост, но позже я понял, что ошибался, и он уже был опубликован.
Кто-нибудь? Можно ли этого как-то добиться?
Привет, @Terrapop
Вы можете написать плагин, который скрывает (или удаляет) элемент DOM для One Box, когда строка User Agent запроса совпадает со строкой User Agent бота FB.
Надеюсь, это поможет.
Вам потребуется постобработка HTML: в уже обработанных сообщениях весь HTML для oneboxes уже развёрнут.
В этом и заключается проблема. Так как обработанные посты содержат oneboxes (в которых больше нет прямых ссылок на оригинальные медиа, только в необработанных данных есть оригинальные ссылки), мы не можем преобразовать их в формат, допустимый для Facebook Instant Articles. Iframely генерирует допустимые для IA iFrame из отдельных ссылок. Мы пробовали использовать необработанные посты в связке с PHP-парсером Markdown (Markdown-It для PHP) и Iframely для отдельных ссылок, но парсинг Markdown в Discourse выполняет гораздо больше операций, и мы не хотим дублировать всю магию, которую Discourse применяет к Markdown. Поэтому мы ищем способ получать обработанные посты, но без уже распарсенных oneboxes (так как мы хотим обрабатывать их через Iframely на пост-этапе). Наш текущий подход работает для простых постов: берем необработанные данные за основу, используем PHP Markdown-It для преобразования в HTML, применяем Iframely для создания допустимых для IA медиа-карточек (oneboxes не являются таковыми), затем преобразуем HTML в формат Facebook IA HTML и передаем через FB PHP SDK. Однако, поскольку Discourse применяет к парсингу Markdown множество дополнительных правил, было бы отлично получить распарсенный HTML напрямую из Discourse, но без oneboxes.
Вам не нужно обрабатывать посты вне Discourse. Достаточно просто добавить патч в соответствующий метод и исключить часть, отвечающую за генерацию oneboxes. В общем, идея такая.
Что ж, мы не хотим в целом менять поведение рендеринга на Discourse, но нам нужен endpoint (API), который генерирует обработанный пост без oneboxes (но оставляя оригинальные независимые ссылки, например, в виде тегов ).
Просто скройте или удалите элемент DOM. Это довольно простая задача.
Это по сути «стандартный» способ решения таких задач, когда разработчик не хочет показывать (или хочет удалить) какой-либо элемент DOM.
**Примечание:
Использование Ruby-гама ‘gon’ делает передачу любых переменных Ruby в JavaScript очень простой, но я использовал его только в приложении на Rails, а не со стеком EmberJS (в любом случае, существует множество способов передать переменную Ruby в JS).