Recupero immagini onebox localmente

Ciao a tutti,

Ho creato un plugin che estende la funzionalità onebox per un sito web molto utilizzato dagli utenti del mio forum.

Questo onebox mostra anche un’immagine dal suddetto sito. Esiste un modo per salvare l’immagine in locale in modo che l’onebox non si rompa quando l’immagine cambia sul sito sorgente?

Ho visto che una funzione del genere è disponibile sul forum, ma non riesco a trovare il modo di accedervi nel plugin che ho creato.

Grazie mille in anticipo! :smiley:


PS: Qui trovate il repository GitHub del plugin che ho creato. Qualsiasi feedback sul mio codice sarebbe molto apprezzato.

(È la prima volta che scrivo codice in Ruby, provenendo da un background di backend NodeJS).

Onebox e Discourse lo gestiscono nativamente, senza bisogno di plugin aggiuntivi.

Devi solo assicurarti che il sito web di destinazione generi i corretti tag meta og. Se è necessario apportare modifiche, queste vanno fatte sul sito web di destinazione, non su Discourse, affinché tutto funzioni correttamente.

Ad esempio:

Il sito della BBC genera questi tag meta per ogni pagina. Discourse e Onebox recuperano site_name, image, description e title per generare l’onebox.

Assicurati semplicemente che il tuo sito web di destinazione segua questo standard e non dovresti dover fare altro.

Ha senso farlo perché in questo modo il tuo sito sarà pronto per tutte le anteprime anche su altre piattaforme, ad esempio Facebook.

Suppongo che tu abbia il controllo o un certo grado di influenza su questo sito, anche se potrebbe essere un’assunzione azzardata!

Se non è possibile, dovrai creare un motore personalizzato in Onebox in grado di riconoscere le caratteristiche uniche di quel sito e analizzarlo per estrarre i metadati appropriati. La libreria Nokogiri è lo strumento adatto per questo compito.

Non lo fa :sweat_smile:

Purtroppo no :confused: Inoltre, vorrei personalizzare un po’ la visualizzazione onebox. Questo non sarebbe possibile se utilizzassi il motore predefinito.

Ma…
Ho già sviluppato l’estensione onebox. Gestisce tutto il lavoro di recupero e funziona bene!

La domanda è: Come posso essere sicuro che l’immagine recuperata venga archiviata localmente? Immagino di dover scrivere del codice aggiuntivo nel plugin.

Alcune strade da esplorare:

Il Cooked Post Processor mette in coda un lavoro per farlo, vedi:

Il codice dei job si trova qui: discourse/app/jobs/regular/pull_hotlinked_images.rb at e98c7b15d6ce864f1b5e83b6881700eaa808bdd1 · discourse/discourse · GitHub

Se sei riuscito a riportare le immagini hotlinkate nel post, le immagini soddisfano i criteri e le impostazioni garantiscono che le immagini esterne vengano caricate, questa procedura dovrebbe funzionare.

image

Criteri qui: discourse/lib/cooked_post_processor.rb at e98c7b15d6ce864f1b5e83b6881700eaa808bdd1 · discourse/discourse · GitHub

Se ciò non funziona ancora ma riesci a visualizzare correttamente le immagini esterne nella onebox, il mio sospetto è che le immagini non soddisfino i criteri per essere caricate.