Soporte de oEmbed onebox para Photobucket

Tenemos un foro de fotografía que data de 2004, y Photobucket es utilizado por muchos miembros… sin embargo, las publicaciones más antiguas con Photobucket, las imágenes no aparecen en la publicación… (Metrô de NYC - #3 de fotografosonline - Galeria de Fotos - Fotógrafos Online)

¿Hay algún soporte de Photobucket o alguna forma de añadirlo a la lista de dominios permitidos para onebox?

Photobucket no quiere que incrustes esas imágenes:

¡¡PERO ESPERA!! Si haces esto:

![](https://hosting.photobucket.com/images/af237/atpaula/tempImageuaxhM1.heic?width=1920&height=1080&fit=bounds
)

Puedes obtener esto:

Eso no permitirá que Discourse descargue esas imágenes para que las tengas cuando ya no estén disponibles en Photobucket, pero sí las mostrará.

Entonces, querrías ir a Rails, obtener todas las publicaciones que tengan ^https://hosting.photobucket.com y hacer un gsub para reemplazar esas URL desnudas con ![](la url).

Espera. Cuando escribí esto por primera vez, la URL superior no se renderizó, ¡pero luego parece que Discourse logró descargarla! (¡Y también funcionó en mi servidor de prueba!)

¿Quizás solo necesitas volver a hornear las publicaciones?

Pero no funciona en tu sitio: https://forum.fotografos.online/t/esta-imagem-do-photobucket-sera-renderizada/226420

¿Tienes deshabilitada la descarga a local?

Descargar a local - No lo sabría :confused:

Si eres administrador, puedes ver

https://forum.fotografos.online/admin/site_settings/category/all_results?filter=download%20remote%20images

Si está deshabilitado, habilítalo, ve al tema que creé, haz clic en la :wrench: y luego en la opción que se traduce como “rebuild html”.

Lo acabo de habilitar en el administrador… y fui a la publicación original para reconstruir… pero no funcionó…

Sin embargo, funcionó en tu publicación.

En la publicación original, simplemente agregué la URL sin formato:

https://hosting.photobucket.com/images/af237/atpaula/tempImageRLm0iR.heic?width=1920&height=1080&fit=bounds

(supongo que discourse lo tiene deshabilitado)

Eso es porque en la publicación original están codificados como URL: https://forum.fotografos.online/posts/1579128.json

como


1
[URL=https://hosting.photobucket.com/images/af237/atpaula/tempImage7XmEb0.heic?width=1920&height=1080&fit=bounds]
https://hosting.photobucket.com/images/af237/atpaula/tempImage7XmEb0.heic?width=1920&height=1080&fit=bounds
[/URL]

Así que realmente querías arreglarlos cuando hiciste la migración, pero todavía es posible ejecutar una tarea en rails que los arregle.

1 me gusta

Pregunté en https://ask.discourse.com/ y, después de un primer intento fallido, obtuve esto:

Reemplazando etiquetas [URL] en publicaciones de Discourse IA

pfaffman:

Tengo un montón de publicaciones que se ven así:

1
[URL=https://hosting.photobucket.com/images/af237/atpaula/tempImage7XmEb0.heic?width=1920&height=1080&fit=bounds]
https://hosting.photobucket.com/images/af237/atpaula/tempImage7XmEb0.heic?width=1920&height=1080&fit=bounds
[/URL]

Necesito ejecutar un comando de rails para encontrar todas esas publicaciones y luego usar gsub para reemplazar los [URL…][/URL] con solo la url real para que se renderice en un one-box.

DiscourseHelper:

Búsqueda

Buscando: ¿Cómo uso un comando de Rails o código de consola para encontrar todas las publicaciones que contienen un formato de cadena específico como las etiquetas [URL] y luego reemplazo esas etiquetas con solo la URL contenida en Discourse?

Para encontrar todas las instancias de [URL]...[/URL] y reemplazarlas con solo la URL contenida en tus publicaciones de Discourse, puedes lograr esto usando Rails en la consola de Discourse. Aquí te explico cómo hacerlo:

Pasos:

  1. Accede a la Consola de Rails:
    Necesitas acceso SSH a tu servidor. Ejecuta el siguiente comando para acceder a la consola de Rails de Discourse:

    cd /var/discourse
    ./launcher enter app
    rails c
    
  2. Ejecuta un Comando de Buscar y Reemplazar:
    Usa el siguiente fragmento de código para localizar publicaciones que contengan [URL]...[/URL] y reemplazarlas.

    Post.where("cooked LIKE ?", "%[URL=%[/URL]%").find_each do |post|
      updated_cooked = post.cooked.gsub(/\[URL=.*?\](.*?)\[\/URL\]/, '\1')
      if updated_cooked != post.cooked
        post.update!(cooked: updated_cooked)
        PostRevisor.new(post, Discourse.system_user).revise!(
          post.user,
          { cooked: updated_cooked },
          revised_at: Time.now
        )
        puts "Publicación actualizada id: #{post.id}"
      end
    end
    
  3. Prueba el Script:
    Antes de reemplazar el contenido en masa, ejecuta la lógica gsub en una sola publicación para asegurarte de que se comporta como esperas.

    test_post = Post.first # Reemplaza con un ID para una mejor prueba
    puts test_post.cooked.gsub(/\[URL=.*?\](.*?)\[\/URL\]/, '\1')
    
  4. Ejecuta el Script y Monitorea:
    Ejecuta el script completo, monitorea la salida y corrige cualquier error si es necesario.

Notas:

  • Este script utiliza Regex (\[URL=.*?\](.*?)\[\/URL\]) para encontrar y reemplazar el patrón especificado. Asegúrate de que el patrón coincida exactamente con tus necesidades.
  • Utiliza PostRevisor para asegurar que los cambios se registren en el historial de edición de la publicación.
  • Asegúrate de probar a fondo y hacer una copia de seguridad de tu base de datos antes de ejecutar cualquier cambio masivo.

Para obtener orientación adicional, consulta la documentación relacionada en meta.discourse.org. Si encuentras problemas, ¡no dudes en compartir los detalles aquí!

pfaffman:

Necesita reemplazar eso en raw, no en cooked.

DiscourseHelper:

¡Gracias por la aclaración! Dado que los cambios deben realizarse en el campo raw (contenido original de la publicación), podemos modificar el script para que funcione con el campo raw en su lugar. Aquí te explico cómo puedes lograrlo:

Comando de Rails Actualizado para el Campo raw

  1. Modifica y Ejecuta el Script:
    A continuación se muestra el script actualizado para procesar y reemplazar las etiquetas [URL]...[/URL] en el campo raw de las publicaciones:

    # Encuentra todas las publicaciones donde raw incluye la etiqueta [URL]
    Post.where("raw LIKE ?", "%[URL=%[/URL]%").find_each do |post|
      updated_raw = post.raw.gsub(/\[URL=.*?\](.*?)\[\/URL\]/, '\1')
      
      if updated_raw != post.raw
        # Actualiza el contenido raw
        post.update!(raw: updated_raw, cooked: nil)
    
        # Dispara el rebake para regenerar el contenido cocido
        post.rebake!
    
        puts "Publicación actualizada id: #{post.id}"
      end
    end
    
  2. Explicación de los Cambios:

    • raw en lugar de cooked: El campo raw contiene el contenido original de la publicación, por lo que la operación gsub se aplica al texto raw.
    • Restablecer cooked: Establecer cooked a nil asegura que la publicación se procesará (rebake) correctamente.
    • rebake!: Esto activa el proceso de rebake, que regenera la versión cooked (renderizada en HTML) de la publicación a partir del contenido raw actualizado.
  3. Prueba el Gsub para Contenido Raw:
    Prueba la sustitución de la expresión regular en una sola publicación para asegurarte de que se comporta correctamente:

    test_post = Post.first # Reemplaza con un ID de publicación apropiado para la prueba
    puts test_post.raw.gsub(/\[URL=.*?\](.*?)\[\/URL\]/, '\1')
    
  4. Ejecuta la Actualización Masiva:
    Una vez que confirmes que funciona según lo previsto, puedes ejecutar el script para procesar todas las publicaciones que contengan las etiquetas [URL].

  5. Monitorea y Verifica:
    Monitorea la salida del script. Por cada publicación actualizada, se imprimirá su id en la consola. Después de completar, revisa algunas publicaciones en el sitio para asegurarte de que los cambios aparezcan correctamente.


Recordatorio de Copia de Seguridad:
Antes de ejecutar el script, asegúrate de tener una copia de seguridad completa de la base de datos, especialmente cuando trabajes con actualizaciones masivas.

Si tienes preguntas adicionales o encuentras problemas, ¡no dudes en preguntar!

Y me gusta que use PostRevisor para que si algo sale mal, tengas un registro de la edición.

1 me gusta

¡¡¡Ahhhh… ¡Lo revisaré!!! ¡¡¡Muchas gracias!!!

1 me gusta

Definitivamente querrás probarlo en algunas publicaciones antes de lanzarlo, y también ver cuántas publicaciones va a arreglar y quién recibirá notificaciones sobre todas ellas (creo que hay algo como bypass_bump o similar que omite las notificaciones).

1 me gusta