Suporte ao oEmbed onebox para Photobucket

Temos um fórum de fotografia que data de 2004, e o Photobucket é usado por muitos membros… no entanto, as postagens mais antigas com Photobucket, as imagens não estão aparecendo na postagem… (Metrô de NYC - #3 de fotografosonline - Galeria de Fotos - Fotógrafos Online)

Existe algum suporte do Photobucket ou uma maneira de adicionar isso à lista de domínios permitidos para onebox?

O Photobucket não quer que você incorpore essas imagens:

MAS ESPERE!! Se você fizer isso:

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

Você pode obter isso:

Isso não permitirá que o Discourse baixe essas imagens para que você as tenha quando elas não estiverem mais disponíveis no Photobucket, mas as exibirá.

Então, você precisaria ir ao Rails, obter todas as postagens que têm ^https://hosting.photobucket.com e fazer um gsub para substituir essas URLs nuas por ![](the url).

Espere. Quando escrevi isso pela primeira vez, a URL superior não foi renderizada, mas depois parece que o Discourse conseguiu baixá-la! (E funcionou no meu servidor de teste também!)

Talvez você precise apenas refazer as postagens?

Mas não está funcionando no seu site: https://forum.fotografos.online/t/esta-imagem-do-photobucket-sera-renderizada/226420

Você desabilitou o download para o local?

Baixar para local - Eu não saberia disso :confused:

Se você for um administrador, poderá ver

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

Se estiver desativado, ative-o, vá ao tópico que criei, clique na :wrench: e depois na coisa que se traduz para “reconstruir html”

Eu ativei agora mesmo no admin… e fui para a postagem original para reconstruir… mas não funcionou…

Funcionou na sua postagem sim.

Na postagem original, eu apenas adicionei a URL bruta:

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

(o Discourse desabilitou isso, eu acho)

Isso ocorre porque na postagem original eles são codificados como URLs: 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]

Então você realmente queria corrigi-los quando fez a migração, mas ainda é possível executar uma tarefa no rails que os corrigiria.

1 curtida

Eu perguntei em https://ask.discourse.com/ e, após uma tentativa frustrada, obtive o seguinte:

Substituindo Tags [URL] em Posts do Discourse IA

pfaffman:

Tenho um monte de posts que se parecem com isto:

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]

Preciso executar um comando rails para encontrar todos esses posts e, em seguida, usar gsub para substituir os [URL…][/URL] apenas pela URL real para que ele seja renderizado em um one-box.

DiscourseHelper:

Pesquisando

Pesquisando por: Como uso um comando ou código de console Rails para encontrar todos os posts que contêm um formato de string específico como tags [URL] e, em seguida, substituir essas tags apenas pela URL contida no Discourse?

Para encontrar todas as instâncias de [URL]...[/URL] e substituí-las apenas pela URL contida em seus posts do Discourse, você pode fazer isso usando o Rails no console do Discourse. Veja como você pode fazer isso:

Passos:

  1. Acesse o Console Rails:
    Você precisa de acesso SSH ao seu servidor. Execute o seguinte comando para acessar o console Rails do Discourse:

    cd /var/discourse
    ./launcher enter app
    rails c
    
  2. Execute um Comando de Localizar e Substituir:
    Use o seguinte trecho de código para localizar posts que contêm [URL]...[/URL] e substituí-los.

    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 "Post id atualizado: #{post.id}"
      end
    end
    
  3. Teste o Script:
    Antes de substituir o conteúdo em massa, execute a lógica gsub em um único post para garantir que ele se comporte como esperado.

    test_post = Post.first # Substitua por um ID para melhor teste
    puts test_post.cooked.gsub(/\[URL=.*?\](.*?)\[\/URL\]/, '\1')
    
  4. Execute o Script e Monitore:
    Execute o script completo, monitore a saída e corrija quaisquer erros, se necessário.

Notas:

  • Este script usa Regex (\[URL=.*?\](.*?)\[\/URL\]) para corresponder e substituir o padrão especificado. Certifique-se de que o padrão corresponda exatamente às suas necessidades.
  • Ele usa PostRevisor para garantir que as alterações sejam registradas no histórico de edições do post.
  • Certifique-se de testar completamente e fazer backup do seu banco de dados antes de executar quaisquer alterações em massa.

Para orientação adicional, consulte a documentação relacionada em meta.discourse.org. Se você encontrar problemas, sinta-se à vontade para compartilhar detalhes aqui!

pfaffman:

Precisa substituir isso em raw, não em cooked.

DiscourseHelper:

Obrigado pelo esclarecimento! Como as alterações precisam ser feitas no raw (conteúdo original do post), podemos modificar o script para trabalhar com o campo raw em vez disso. Veja como você pode conseguir isso:

Comando Rails Atualizado para o Campo raw

  1. Modifique e Execute o Script:
    Abaixo está o script atualizado para processar e substituir as tags [URL]...[/URL] no campo raw dos posts:

    # Encontra todos os posts onde o raw inclui a 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
        # Atualiza o conteúdo raw
        post.update!(raw: updated_raw, cooked: nil)
    
        # Dispara o rebake para regenerar o conteúdo cooked
        post.rebake!
    
        puts "Post id atualizado: #{post.id}"
      end
    end
    
  2. Explicação das Mudanças:

    • raw em vez de cooked: O campo raw contém o conteúdo original do post, portanto, a operação gsub é aplicada ao texto raw.
    • Redefinir cooked: Definir cooked como nil garante que o post será reprocessado (rebaked) corretamente.
    • rebake!: Isso aciona o processo de rebake, que regenera a versão cooked (renderizada em HTML) do post a partir do conteúdo raw atualizado.
  3. Teste o Gsub para Conteúdo Raw:
    Teste a substituição da expressão regular em um único post para garantir que ela se comporte corretamente:

    test_post = Post.first # Substitua por um ID de post apropriado para teste
    puts test_post.raw.gsub(/\[URL=.*?\](.*?)\[\/URL\]/, '\1')
    
  4. Execute a Atualização em Massa:
    Depois de confirmar que funciona como pretendido, você pode executar o script para processar todos os posts que contêm as tags [URL].

  5. Monitore e Verifique:
    Monitore a saída do script. Para cada post atualizado, seu id será impresso no console. Após a conclusão, verifique alguns posts no site para garantir que as alterações apareçam corretamente.


Lembrete de Backup:
Antes de executar o script, certifique-se de ter um backup completo do banco de dados, especialmente ao trabalhar com atualizações em massa.

Se você tiver perguntas adicionais ou encontrar problemas, sinta-se à vontade para perguntar!

E eu gosto que ele use PostRevisor para que, se algo der errado, você tenha um registro da edição.

1 curtida

Ahhhh… Vou dar uma olhada nisso!!! Muito obrigado!!!

1 curtida

Você definitivamente vai querer testar isso em algumas postagens antes de liberá-lo — e também ver quantas postagens ele vai corrigir e quem receberá notificações sobre todas elas (há algo como bypass_bump ou similar que pula as notificações, eu acho).

1 curtida