¿Hay alguna forma de obtener una publicación cocinada, pero sin oneboxes renderizadas?

Para un generador externo de Artículos Instantáneos de Facebook, necesitamos las publicaciones en HTML procesado, pero sin los oneboxes renderizados…

¿Ya existe alguna ruta o punto de conexión de API para publicaciones que haga esto?

Tal vez esto pueda ayudar GitHub - discourse/raw-post-button · GitHub

Hola @adopilot, muchas gracias por tu comentario. ¿Podrías darnos más detalles?

Parece ser un componente para ver la publicación en bruto.

Buscamos algo que renderice una publicación procesada, pero sin las oneboxes.

Disculpas, pensé que necesitabas el post en bruto, pero luego me di cuenta de que me había equivocado y ya estaba publicado.

¿Alguien? ¿Se puede lograr esto de alguna manera?

Hola @Terrapop

Podrías escribir un plugin para ocultar (o eliminar) el elemento DOM de One Box cuando la cadena de User Agent que realiza la solicitud coincida con la cadena de User Agent del bot de FB.

Espero que esto ayude.

Necesitarás realizar un postprocesamiento del HTML; las publicaciones ya cocidas ya contienen todo el HTML de los oneboxes expandidos.

Ese es exactamente el problema. Dado que las publicaciones procesadas contienen oneboxes (que ya no tienen los enlaces originales a los medios; solo las versiones raw conservan los enlaces originales), no podemos transformarlas en un formato válido para Facebook IA.

Iframely genera IFRAMEs válidos para IA a partir de enlaces independientes. Intentamos utilizar las publicaciones raw junto con un parser de Markdown en PHP (Markdown-It para PHP) e Iframely para los enlaces independientes, pero el análisis de Markdown en Discourse realiza muchas más operaciones, y no queremos replicar toda la lógica que Discourse aplica al Markdown. Por ello, buscamos una vía para obtener las publicaciones procesadas, pero sin las oneboxes ya analizadas (ya que deseamos procesarlas posteriormente mediante Iframely).

Nuestro enfoque actual funciona para publicaciones sencillas: tomamos la versión raw como base, usamos PHP Markdown-It para convertirla a HTML, empleamos Iframely para generar tarjetas de medios válidas para IA (las oneboxes no lo son), transformamos el HTML al formato HTML de Facebook IA y lo transmitimos mediante el SDK de PHP de Facebook. Sin embargo, dado que Discourse aplica muchas reglas adicionales al análisis de Markdown, sería ideal poder obtener directamente el HTML ya analizado desde Discourse, pero sin las oneboxes.

No necesitas cocinar tu publicación fuera de Discourse. Simplemente aplica un parche al método responsable y excluye la parte donde se generan los oneboxes. Idea general.

Bueno, no queremos cambiar el comportamiento de cocción en general en Discourse, pero necesitamos un punto final (API) que genere una publicación cocida sin oneboxes (pero dejar los enlaces independientes originales, por ejemplo, como ahrefs).

Simplemente oculta o elimina el elemento del DOM. Es una tarea bastante sencilla.

  1. Compara la cadena del agente de usuario con Ruby y establece un valor booleano en caso de coincidencia.
  2. Usa JavaScript para ocultar el elemento del DOM si el valor booleano es verdadero.

Esta es básicamente la forma “estándar” de realizar esta tarea y otras similares donde un desarrollador no desea mostrar (o quiere eliminar) ningún elemento del DOM.


**Nota:

Usar la gema ‘gon’ de Ruby hace que pasar cualquier variable de Ruby a JavaScript sea muy sencillo, pero solo la he utilizado en una aplicación de Rails, no con EmberJS en la pila (de todos modos, hay muchas formas de pasar una variable de Ruby a JS).