Supporto oEmbed onebox per Photobucket

Abbiamo un forum di fotografia che risale al 2004 e Photobucket è utilizzato da molti membri… tuttavia i post più vecchi con Photobucket, le immagini non vengono visualizzate nel post… (Metrô de NYC - #3 de fotografosonline - Galeria de Fotos - Fotógrafos Online)

Esiste un supporto Photobucket o un modo per aggiungerlo all’elenco dei domini consentiti per onebox?

Photobucket non vuole che tu incorpori quelle immagini:

MA ASPETTA!! Se fai questo:

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

Puoi ottenere questo:

Questo non permetterà a Discourse di scaricare quelle immagini in modo che tu le abbia quando non saranno più disponibili da photobucket, ma le visualizzerà.

Quindi vorresti andare in rails, ottenere tutti i post che hanno ^https://hosting.photobucket.com, e fare un gsub per sostituire quegli URL spogli con ![](l'url).

Aspetta. Quando ho scritto questo la prima volta, l’URL in alto non veniva visualizzato, ma poi in seguito sembra che Discourse sia riuscito a scaricarlo! (E ha funzionato anche sul mio server di test!)

Forse devi solo rifare il “rebake” dei post?

Ma non funziona sul tuo sito: https://forum.fotografos.online/t/esta-imagem-do-photobucket-sera-renderizada/226420

Hai disabilitato il download in locale?

Scarica in locale - Non lo avrei saputo :confused:

Se sei un amministratore puoi vedere

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

Se è disabilitato, abilitalo, vai all’argomento che ho creato, fai clic su :wrench: e poi sulla cosa che si traduce in “rebuild html”

L’ho abilitato nell’area admin proprio ora… e sono andato al post originale per ricostruire… ma non ha funzionato…

Ha funzionato però sul tuo post.

Nel post originale ho appena aggiunto l’URL grezzo:

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

(Immagino che discourse lo abbia disabilitato)

Questo è perché nel post originale sono codificati come URL: https://forum.fotografos.online/posts/1579128.json

come


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]

Quindi avresti davvero voluto correggerli quando hai fatto la migrazione, ma è ancora possibile eseguire un’attività in rails che li correggerebbe.

1 Mi Piace

Ho chiesto su https://ask.discourse.com/ e dopo un primo tentativo fallito, ho ottenuto questo:

Sostituzione dei tag [URL] nei post di Discourse AI

pfaffman:

Ho un sacco di post che assomigliano a questo:

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]

Devo eseguire un comando rails per trovare tutti quei post e poi usare gsub per sostituire [URL…][/URL] con solo l’URL effettivo in modo che venga visualizzato in un one-box

DiscourseHelper:

Ricerca

Ricerca per: Come posso usare un comando o codice console Rails per trovare tutti i post contenenti un formato di stringa specifico come i tag [URL] e quindi sostituire quei tag con solo l'URL contenuto in Discourse?

Per trovare tutte le istanze di [URL]...[/URL] e sostituirle con solo l’URL contenuto nei tuoi post di Discourse, puoi farlo usando Rails nella console di Discourse. Ecco come puoi fare:

Passaggi:

  1. Accedi alla Console Rails:
    Hai bisogno dell’accesso SSH al tuo server. Esegui il seguente comando per accedere alla console Rails di Discourse:

    cd /var/discourse
    ./launcher enter app
    rails c
    
  2. Esegui un Comando Trova e Sostituisci:
    Usa il seguente snippet di codice per individuare i post contenenti [URL]...[/URL] e sostituirli.

    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 "Aggiornato post id: #{post.id}"
      end
    end
    
  3. Testa lo Script:
    Prima di sostituire il contenuto in blocco, esegui la logica gsub su un singolo post per assicurarti che si comporti come previsto.

    test_post = Post.first # Sostituisci con un ID per un test migliore
    puts test_post.cooked.gsub(/\[URL=.*?\](.*?)\[\/URL\]/, '\1')
    
  4. Esegui lo Script e Monitora:
    Esegui lo script completo, monitora l’output e correggi eventuali errori se necessario.

Note:

  • Questo script utilizza Regex (\[URL=.*?\\](.*?)\\[\\/URL\\]) per trovare e sostituire il modello specificato. Assicurati che il modello corrisponda esattamente alle tue esigenze.
  • Utilizza PostRevisor per garantire che le modifiche vengano registrate nella cronologia delle modifiche del post.
  • Assicurati di testare a fondo e di eseguire il backup del tuo database prima di eseguire qualsiasi modifica in blocco.

Per ulteriore assistenza, consulta la documentazione correlata su meta.discourse.org. Se riscontri problemi, non esitare a condividere i dettagli qui!

pfaffman:

Deve sostituirli in raw, non in cooked

DiscourseHelper:

Grazie per la precisazione! Poiché le modifiche devono essere apportate al campo raw (contenuto originale del post), possiamo modificare lo script per lavorare invece con il campo raw. Ecco come puoi ottenerlo:

Comando Rails Aggiornato per il Campo raw

  1. Modifica ed Esegui lo Script:
    Di seguito è riportato lo script aggiornato per elaborare e sostituire i tag [URL]...[/URL] nel campo raw dei post:

    # Trova tutti i post in cui raw include il tag [URL]
    Post.where("raw LIKE ?", "%[URL=%[/URL]%").find_each do |post|
      updated_raw = post.raw.gsub(/\[URL=.*?\](.*?)\[\/URL\]/, '\1')
      
      if updated_raw != post.raw
        # Aggiorna il contenuto raw
        post.update!(raw: updated_raw, cooked: nil)
    
        # Attiva il rebake per rigenerare il contenuto cotto
        post.rebake!
    
        puts "Aggiornato post id: #{post.id}"
      end
    end
    
  2. Spiegazione delle Modifiche:

    • raw invece di cooked: Il campo raw contiene il contenuto originale del post, quindi l’operazione gsub viene applicata al testo raw.
    • Reset cooked: Impostare cooked su nil garantisce che il post venga correttamente rielaborato (processato).
    • rebake!: Questo attiva il processo di rielaborazione, che rigenera la versione cooked (renderizzata in HTML) del post dal contenuto raw aggiornato.
  3. Testa il Gsub per il Contenuto Raw:
    Testa la sostituzione dell’espressione regolare su un singolo post per assicurarti che si comporti correttamente:

    test_post = Post.first # Sostituisci con un ID di post appropriato per il test
    puts test_post.raw.gsub(/\[URL=.*?\](.*?)\[\/URL\]/, '\1')
    
  4. Esegui l’Aggiornamento in Blocco:
    Una volta confermato che funziona come previsto, puoi eseguire lo script per elaborare tutti i post contenenti i tag [URL].

  5. Monitora e Verifica:
    Monitora l’output dello script. Per ogni post aggiornato, il suo id verrà stampato sulla console. Al termine, controlla alcuni post sul sito per assicurarti che le modifiche vengano visualizzate correttamente.


Promemoria Backup:
Prima di eseguire lo script, assicurati di avere un backup completo del database, specialmente quando lavori con aggiornamenti in blocco.

Se hai ulteriori domande o riscontri problemi, non esitare a chiedere!

E mi piace che utilizzi PostRevisor in modo che se qualcosa va storto, avrai una registrazione della modifica.

1 Mi Piace

Ahhhh… Ci darò un’occhiata!!! Grazie mille!!!

1 Mi Piace

Vuoi assolutamente testarlo su alcuni post prima di rilasciarlo, e anche vedere quanti post risolverà e chi riceverà notifiche per tutti quelli (c’è qualcosa come bypass_bump o simile che salta le notifiche, credo).

1 Mi Piace