Obteniendo imágenes de onebox localmente

Hola a todos,

He creado un plugin que extiende la funcionalidad de onebox para un sitio web que utilizan muchos usuarios de mi foro.

Este onebox también muestra una imagen del sitio web mencionado. ¿Existe alguna forma de almacenar la imagen localmente para que el onebox no se rompa cuando la imagen cambie en el sitio web de origen?

He visto que tal función está disponible en el foro, pero no consigo encontrar cómo acceder a ella en el plugin que he creado.

¡Muchas gracias de antemano! :smiley:


PD: Aquí está el repositorio de GitHub del plugin que he creado. Cualquier comentario sobre mi código sería muy apreciado.

(Es la primera vez que programo en Ruby, viniendo de un entorno de backend en NodeJS).

1 me gusta

Onebox y Discourse lo harán de forma nativa sin necesidad de plugins adicionales.

Solo debes asegurarte de que el sitio web de destino genere las etiquetas meta og apropiadas. Si es necesario modificar algo, deberás hacerlo en el sitio web de destino, no en Discourse, para que esto funcione.

Por ejemplo:

El sitio web de la BBC genera esas etiquetas meta para cada página. Discourse y Onebox extraerán site_name, image, description y title para generar el onebox.

Solo asegúrate de que tu sitio web de destino siga ese estándar y no deberías necesitar hacer nada más.

Tiene sentido hacerlo así, porque entonces tu sitio web también estará cubierto para todas las vistas previas en otras plataformas, por ejemplo, Facebook.

Asumo que tienes control o influencia sobre este sitio web, aunque eso podría ser una gran suposición.

Si esto no es posible, tendrás que crear un motor personalizado en Onebox que pueda reconocer la singularidad de ese sitio web y rastrearlo para obtener los metadatos apropiados. La biblioteca Nokogiri es la herramienta adecuada para ese trabajo.

1 me gusta

No lo hace :sweat_smile:

Desafortunadamente no :confused: Además de eso, quiero personalizar un poco la vista de onebox. Esto no sería posible si usara el motor predeterminado.

Pero…
Ya he desarrollado la extensión onebox. ¡Hace todo el trabajo de obtención de datos y funciona muy bien!

La pregunta es: ¿Cómo puedo asegurarme de que la imagen obtenida se almacenará localmente? Asumo que necesito escribir algo de código adicional en el plugin.

Algunas vías para explorar:

El procesador de publicaciones cocinadas encola un trabajo para hacer esto, ver:

El código de los trabajos está aquí: discourse/app/jobs/regular/pull_hotlinked_images.rb at e98c7b15d6ce864f1b5e83b6881700eaa808bdd1 · discourse/discourse · GitHub

Si has logrado devolver las imágenes enlazadas directamente a la publicación, las imágenes cumplen con los criterios y la configuración asegura que las imágenes externas se suban, esto debería funcionar.

image

Criterios aquí: discourse/lib/cooked_post_processor.rb at e98c7b15d6ce864f1b5e83b6881700eaa808bdd1 · discourse/discourse · GitHub

Si esto aún no funciona, pero estás mostrando correctamente las imágenes externas en el onebox, mi intuición es que las imágenes no cumplen con los criterios para ser subidas.

2 Me gusta