Récupération des images onebox en local

Bonjour à tous,

J’ai créé un plugin qui étend la fonctionnalité onebox pour un site web très utilisé par les membres de mon forum.

Ce onebox affiche également une image provenant dudit site. Existe-t-il un moyen de stocker l’image localement afin que le onebox ne se brise pas lorsque l’image change sur le site source ?

J’ai remarqué qu’une telle fonctionnalité est disponible sur le forum, mais je ne parviens pas à trouver comment y accéder dans le plugin que j’ai créé.

Merci beaucoup par avance ! :smiley:


PS : Voici le dépôt GitHub du plugin que j’ai créé. Tout retour sur mon code serait grandement apprécié.

(C’est la première fois que je code en Ruby, venant d’un arrière-plan backend NodeJS).

1 « J'aime »

Onebox et Discourse gèrent cela nativement, sans aucun plugin supplémentaire.

Il vous suffit de vous assurer que le site web cible génère les balises meta og appropriées. Si une modification est nécessaire, c’est du côté du site web cible qu’il faut l’apporter, et non dans Discourse, pour que cela fonctionne.

Par exemple :

Le site de la BBC génère ces balises meta pour chaque page. Discourse et Onebox récupèrent les éléments site_name, image, description et title pour générer la onebox.

Assurez-vous simplement que votre site web cible suit cette norme, et vous n’aurez rien d’autre à faire.

Cela a du sens, car ainsi votre site sera également pris en charge pour toutes les prévisualisations sur d’autres plateformes, comme Facebook.

Je suppose que vous avez le contrôle ou une influence sur ce site web, bien que ce soit peut-être une hypothèse audacieuse !

Si cela n’est pas possible, vous devrez créer un moteur personnalisé dans Onebox capable de reconnaître l’unicité de ce site web et d’en extraire les métadonnées appropriées. La bibliothèque Nokogiri est l’outil adapté pour cette tâche.

1 « J'aime »

Ce n’est pas le cas :sweat_smile:

Malheureusement, non :confused: Et en plus, je souhaite personnaliser un peu l’affichage de la onebox. Ce ne serait pas possible si j’utilisais le moteur par défaut.

Mais…
J’ai déjà développé l’extension onebox. Elle gère tout le travail de récupération et fonctionne bien !

La question est : Comment puis-je m’assurer que l’image récupérée sera stockée localement ? Je suppose que je dois écrire un peu de code supplémentaire dans le plugin.

Quelques pistes à explorer :

Le Cooked Post Processor met une tâche en file d’attente pour effectuer cette opération, voir :

Le code des tâches se trouve ici : discourse/app/jobs/regular/pull_hotlinked_images.rb at e98c7b15d6ce864f1b5e83b6881700eaa808bdd1 · discourse/discourse · GitHub

Si vous avez réussi à rétablir les images hotlinkées dans le message, que les images répondent aux critères et que les paramètres garantissent le téléchargement des images externes, cela devrait fonctionner.

image

Critères ici : discourse/lib/cooked_post_processor.rb at e98c7b15d6ce864f1b5e83b6881700eaa808bdd1 · discourse/discourse · GitHub

Si cela ne fonctionne pas encore mais que vous affichez correctement les images externes dans la onebox, mon intuition est que les images ne remplissent pas les critères requis pour être téléchargées.

2 « J'aime »