Exponer external_id en embed.js

Necesito cargar publicaciones en un sitio externo donde no conozco el post_id pero SÍ conozco el external_id que configuré cuando creé el tema.

¿Podría alguien exponer la variable external_id en la lógica de embed.js o enseñarme lo que me estoy perdiendo?

Ejemplo de soporte necesario:

window.DiscourseEmbed = {
discourseUrl: ‘https://forums.blah.org/’,
external_id: ‘2023-4’
};

Supongo que creaste los temas a través de la API y estableciste el parámetro external_id.

No estoy seguro si esto ayuda, pero Discourse tiene una ruta t/external_id/:external_id. Parece que solo devuelve datos JSON:

Así que puedes obtener el JSON del tema en (por ejemplo)

/t/external_id/2023-4.json

Eso devolvería el contenido y el id del tema de Discourse. Sin embargo, no creo que esto resuelva tu problema.

Probando esto ahora, se devuelven datos JSON, pero Discourse realiza una redirección automática a la URL real del tema de Discourse cuando realizas la solicitud. Por ejemplo, una solicitud GET a http://localhost:4200/t/external_id/1.json me redirige a http://localhost:4200/t/testing-the-external-id-param/206.json

Quiero tener algo en el formato de publicaciones incrustadas. Discourse ya hace un gran trabajo con ese diseño y no quiero reinventar la rueda.

Al no permitir buscar por external_id, tendría que almacenar el id del tema del foro en mi base de datos y buscar de esa manera. Parece redundante cuando ya tenemos una variable única almacenada en external_id cuando creé el tema desde la API.

1 me gusta

Creo que ahora entiendo. Quieres usar el script que se muestra aquí: https://meta.discourse.org/t/embed-discourse-comments-on-another-website-via-javascript/31963#alternate-configuration-linking-to-existing-topics-6. Pero en lugar de usar el parámetro topicId, quieres usar el parámetro external_id.

Posiblemente esto podría agregarse como una característica.

También podría ser posible hacer una solicitud en el cliente a (por ejemplo)
http://localhost:4200/t/external_id/1.json
Luego, extrae la URL real del tema de la respuesta y, o bien analiza esa URL para extraer el id del tema, o haz una segunda solicitud a la URL del tema para obtener el id del tema.
Esto parece propenso a errores.

Si estás agregando el script de incrustación en el servidor en lugar de en el cliente, podrías simplemente hacer una solicitud GET a http://localhost:4200/t/external_id/1.json, realizar las acciones que necesites para obtener el id del tema de Discourse, y luego insertar el script en tu página web usando ese id.

Este es un buen comentario y me da algunas cosas en qué pensar. La solicitud de funciones es la más sencilla, ¡pero me gustan algunas de tus ideas en las que no había pensado!

1 me gusta