Prise en charge oEmbed onebox pour Photobucket

Nous avons un forum de photographie qui date de 2004, et Photobucket est utilisé par de nombreux membres… cependant les anciens messages avec Photobucket, les images n’apparaissent pas dans le message… (Metrô de NYC - #3 de fotografosonline - Galeria de Fotos - Fotógrafos Online)

Existe-t-il un support Photobucket ou un moyen d’ajouter cela à la liste des domaines autorisés pour les onebox ?

Photobucket ne veut pas que vous intégriez ces images :

MAIS ATTENDEZ !! Si vous faites ceci :

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

Vous pouvez obtenir ceci :

Cela ne permettra pas à Discourse de télécharger ces images afin que vous les ayez lorsqu’elles ne seront plus disponibles sur Photobucket, mais cela les affichera.

Vous voudriez alors aller dans Rails, récupérer tous les messages qui contiennent ^https://hosting.photobucket.com, et faire un gsub pour remplacer ces URL brutes par ![](l'URL).

Attendez. Quand j’ai écrit ceci la première fois, l’URL du haut ne s’affichait pas, mais plus tard, il semble que Discourse ait réussi à la télécharger ! (Et cela a également fonctionné sur mon serveur de test !)

Peut-être avez-vous juste besoin de refaire la cuisson des messages ?

Mais cela ne fonctionne pas sur votre site : https://forum.fotografos.online/t/esta-imagem-do-photobucket-sera-renderizada/226420

Avez-vous désactivé le téléchargement en local ?

Télécharger en local - Je ne le saurais pas :confused:

Si vous êtes un administrateur, vous pouvez voir

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

S’il est désactivé, activez-le, allez dans le sujet que j’ai créé, cliquez sur la :wrench: puis sur l’élément qui se traduit par « reconstruire le html »

Je viens de l’activer dans l’administration… et je suis retourné au message d’origine pour reconstruire… mais ça n’a pas fonctionné…

Ça a fonctionné sur votre message par contre.

Sur le post original, j’ai juste ajouté l’URL brute :

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

(discourse l’a désactivé je suppose)

C’est parce que dans le post original, ils sont encodés en tant qu’URL : https://forum.fotografos.online/posts/1579128.json

comme


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]

Donc, vous vouliez vraiment les corriger lorsque vous avez effectué la migration, mais il est toujours possible d’exécuter une tâche dans Rails qui les corrigerait.

1 « J'aime »

J’ai demandé sur https://ask.discourse.com/ et après un faux départ, j’ai obtenu ceci :

Remplacement des balises [URL] dans les publications Discourse IA

pfaffman :

J’ai un tas de publications qui ressemblent à ceci :

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]

Je dois exécuter une commande Rails pour trouver toutes ces publications et ensuite utiliser gsub pour remplacer les [URL…][/URL] par juste l’URL réelle afin qu’elle s’affiche dans une one-box.

DiscourseHelper :

Recherche

Recherche : Comment utiliser une commande Rails ou un code de console pour trouver toutes les publications contenant un format de chaîne spécifique comme les balises [URL] et ensuite remplacer ces balises par juste l'URL contenue dans Discourse ?

Pour trouver toutes les occurrences de [URL]...[/URL] et les remplacer par uniquement l’URL contenue dans vos publications Discourse, vous pouvez y parvenir en utilisant Rails dans la console Discourse. Voici comment procéder :

Étapes :

  1. Accéder à la console Rails :
    Vous avez besoin d’un accès SSH à votre serveur. Exécutez la commande suivante pour accéder à la console Rails de Discourse :

    cd /var/discourse
    ./launcher enter app
    rails c
    
  2. Exécuter une commande de recherche et remplacement :
    Utilisez le fragment de code suivant pour localiser les publications contenant [URL]...[/URL] et les remplacer.

    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 "Publication mise à jour id : #{post.id}"
      end
    end
    
  3. Tester le script :
    Avant de remplacer le contenu en masse, exécutez la logique gsub sur une seule publication pour vous assurer qu’elle se comporte comme prévu.

    test_post = Post.first # Remplacez par un ID pour un meilleur test
    puts test_post.cooked.gsub(/\[URL=.*?\](.*?)\[\/URL\]/, '\1')
    
  4. Exécuter le script et surveiller :
    Exécutez le script complet, surveillez la sortie et corrigez toute erreur si nécessaire.

Notes :

  • Ce script utilise des expressions régulières (\[URL=.*?\\](.*?)\\[\\/URL\\]) pour faire correspondre et remplacer le motif spécifié. Assurez-vous que le motif correspond exactement à vos besoins.
  • Il utilise PostRevisor pour garantir que les modifications sont enregistrées dans l’historique des modifications de la publication.
  • Assurez-vous de tester minutieusement et de sauvegarder votre base de données avant d’exécuter des modifications en masse.

Pour obtenir des conseils supplémentaires, consultez la documentation connexe sur meta.discourse.org. Si vous rencontrez des problèmes, n’hésitez pas à partager les détails ici !

pfaffman :

Il faut les remplacer dans raw, pas dans cooked.

DiscourseHelper :

Merci pour la clarification ! Puisque les modifications doivent être apportées au champ raw (contenu original de la publication), nous pouvons modifier le script pour qu’il fonctionne avec le champ raw à la place. Voici comment vous pouvez y parvenir :

Commande Rails mise à jour pour le champ raw

  1. Modifier et exécuter le script :
    Voici le script mis à jour pour traiter et remplacer les balises [URL]...[/URL] dans le champ raw des publications :

    # Trouver toutes les publications dont le champ raw inclut la balise [URL]
    Post.where("raw LIKE ?", "%[URL=%[/URL]%").find_each do |post|
      updated_raw = post.raw.gsub(/\[URL=.*?\](.*?)\[\/URL\]/, '\1')
      
      if updated_raw != post.raw
        # Mettre à jour le contenu raw
        post.update!(raw: updated_raw, cooked: nil)
    
        # Déclencher le rebaking pour régénérer le contenu cooked
        post.rebake!
    
        puts "Publication mise à jour id : #{post.id}"
      end
    end
    
  2. Explication des changements :

    • raw au lieu de cooked : Le champ raw contient le contenu original de la publication, donc l’opération gsub est appliquée au texte raw.
    • Réinitialisation de cooked : La définition de cooked à nil garantit que la publication sera correctement rebakée (traitée).
    • rebake! : Cela déclenche le processus de rebaking, qui régénère la version cooked (rendue en HTML) de la publication à partir du contenu raw mis à jour.
  3. Tester le Gsub pour le contenu Raw :
    Testez la substitution d’expression régulière sur une seule publication pour vous assurer qu’elle se comporte correctement :

    test_post = Post.first # Remplacez par un ID de publication approprié pour le test
    puts test_post.raw.gsub(/\[URL=.*?\](.*?)\[\/URL\]/, '\1')
    
  4. Exécuter la mise à jour en masse :
    Une fois que vous avez confirmé que cela fonctionne comme prévu, vous pouvez exécuter le script pour traiter toutes les publications contenant les balises [URL].

  5. Surveiller et vérifier :
    Surveillez la sortie du script. Pour chaque publication mise à jour, son id sera affiché dans la console. Une fois terminé, vérifiez quelques publications sur le site pour vous assurer que les modifications apparaissent correctement.


Rappel de sauvegarde :
Avant d’exécuter le script, assurez-vous d’avoir une sauvegarde complète de la base de données, en particulier lorsque vous travaillez avec des mises à jour en masse.

Si vous avez des questions supplémentaires ou si vous rencontrez des problèmes, n’hésitez pas à demander !

Et j’aime le fait qu’il utilise PostRevisor pour que si quelque chose se passe mal, vous ayez un enregistrement de la modification.

1 « J'aime »

Ahhhh… Je vais jeter un œil à ça !!! Merci beaucoup !!!

1 « J'aime »

Vous voudrez certainement le tester sur quelques publications avant de le déployer - et aussi voir combien de publications il va corriger et qui recevra des notifications pour toutes ces publications (il y a quelque chose comme bypass_bump ou similaire qui évite les notifications, je pense).

1 « J'aime »