Procurando URLs de imagens nos tópicos

Eu pesquisei e li pesquisando conteúdo de forma eficaz, mas não encontrei uma resposta.

Tenho um discourse onde sou moderador (não tenho acesso ao backend). Alguém postou vários tópicos onde as imagens foram vinculadas a um provedor de hospedagem de terceiros (neste caso, Google docs). Eles deixaram a empresa e todos esses links de imagem agora estão quebrados.

Eu posso (e tenho) revisado manualmente alguns de seus posts para encontrar e corrigir (graças ao Internet Archive) imagens quebradas. Mas isso é trabalhoso. Eu gostaria de obter uma lista de todos os tópicos contendo esses URLs de imagem quebrados para que possamos corrigi-los coletivamente, reenviando as imagens para o site.

Eu posso, é claro, usar a pesquisa para encontrar with:images #tutorials, mas não consigo pesquisar dentro dos URLs das imagens por (por exemplo) googleusercontent. Isso é possível, sem acesso à API ou ao backend rake?

2 curtidas

Um administrador poderia criar uma consulta no explorador de dados que encontrasse essas postagens.

Mas se o administrador quisesse que isso não acontecesse, ele teria que ativar o download de imagens para o local. É um problema que eles criaram e não é realmente trabalho de um moderador corrigi-lo.

3 curtidas

Isso significa que você também não pode instalar o explorador de dados? Essa seria a ferramenta de escolha para isso.

Como as imagens são formatadas nas postagens? Elas mostram apenas o URL simples, usam [img], \u003cimg\u003e, ![](url)…?

Apenas para ilustrar seu problema. Uma postagem poderia conter um URL de imagem quebrado, como https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNaW4QQ43EQ-8qqQPntDP7so6Cg19PVSLN9bXv3ZhQqHZtomb8CGY3XArx3GIaZ04d0p9K3V-buaf73-M5dpq2wPuvnjsapStHdTkTVoPj2q9RAmcdczmE12HYz57PNOdVuft1/s1600-h/eastern_coastal_pcn_ap.jpg

A postagem contém o URL,

Mas retorna algo como

<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNaW4QQ43EQ-8qqQPntDP7so6Cg19PVSLN9bXv3ZhQqHZtomb8CGY3XArx3GIaZ04d0p9K3V-buaf73-M5dpq2wPuvnjsapStHdTkTVoPj2q9RAmcdczmE12HYz57PNOdVuft1/s1600-h/eastern_coastal_pcn_ap.jpg" target="_blank" rel="noopener" class="onebox">
    <img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNaW4QQ43EQ-8qqQPntDP7so6Cg19PVSLN9bXv3ZhQqHZtomb8CGY3XArx3GIaZ04d0p9K3V-buaf73-M5dpq2wPuvnjsapStHdTkTVoPj2q9RAmcdczmE12HYz57PNOdVuft1/s1600-h/eastern_coastal_pcn_ap.jpg" width="" height="" loading="lazy">
</a>

O que não contém nenhuma string que possa ser pesquisada.

É isso que acontece?

3 curtidas

Correto, não consigo instalar plugins.

Eles são formatados usando markdown padrão ![](url) onde googleusercontent faz parte da URL. Por exemplo:

![|312x416](https://lh7-rt.googleusercontent.com/docsz/AD_4nXeWkc1cZH8jtNveMhet36oWsLDlUxA-2QadGepx8Uuw1naq6vx5JAd6oyQ2pSmLJkKN97ZnTlV2txMqdNb0QMDCqV0xu-0xOFzePw2hnrNPUNbHoHMWh60KJpP3QkLq2E3Gp0-cKrf3tSWjML8oIQ3I9JQ?key=7YTVKNzk_oQvl95Fd_BKLQ)

Se eu procurar por googleusercontent, nenhum resultado é retornado. No entanto, posso encontrar posts que têm imagens, referenciadas por uma URL contendo o texto googleusercontent. Não sei se isso é um bug ou um recurso que o discourse não pesquisa as URLs de links de imagem formatados em markdown.

1 curtida

Acredito que a pesquisa do Discourse é realizada na postagem processada, que contém HTML.
A pesquisa ignora as tags HTML e as tags IMG não contêm texto, daí a impossibilidade de retornar o que você procura.

Por que você não pode usar a API?
Você poderia criar um script local que aciona uma consulta de pesquisa para as postagens do usuário contendo imagens, itera pelos resultados (lentamente o suficiente para não atingir os limites de taxa e também você pode consultar o conteúdo bruto das postagens se necessário) e gera as postagens contendo a substring que você procura.

Talvez haja uma solução mais simples, mas é assim que eu faria sem outra opção. Bastante simples de fazer.

Porque o administrador não vai dar a ela uma chave de API?

Porque ela não é programadora?

Parece um problema que o administrador criou e não está interessado em resolver.

1 curtida

Sim, quero dizer, uma chave não é necessária para os endpoints de pesquisa e postagem da API necessários para minha sugestão, a menos que eu esteja enganado?

E, claro, idealmente exigiria conhecimento básico de programação, mesmo que as IAs provavelmente possam gerar um bom script base.

O problema mencionado certamente não é ideal para resolver sem acesso de administrador.

2 curtidas

Não solicitei uma chave de API (burocracia) e não sabia que precisaria de uma para fazer o que eu percebia como uma consulta de pesquisa “simples”. Não sabia que não inspeciona as tags HTML no conteúdo. Então, isso está explicado, obrigado.

Não é um problema que os administradores criaram. É apenas uma situação que os administradores e criadores de conteúdo não sabiam até que alguém deixou a empresa e o acesso aos documentos do Google foi desativado para essa conta, fazendo com que as imagens desaparecessem/quebrassem.

Concordo que eu poderia solicitar uma chave de API ou escrever algo localmente para raspar o site e encontrar as postagens ofensivas. Farei uma dessas coisas.

Obrigado pelas respostas. :pray:

2 curtidas

Você não precisa de uma chave de API para fazer pesquisas.

Não tenho certeza se ter uma chave de API poderia ajudá-lo a resolver seu problema com mais facilidade.

Aqui está um script Python de exemplo :robot: que percorre minhas postagens (1 postagem a cada 3 segundos) no meta e retorna aquelas que contêm a substring upload:// no conteúdo bruto:

import requests
import time

def fetch_posts(page):
    url = f"https://meta.discourse.org/search.json?q=%40cocoquark&page={page}"
    response = requests.get(url)
    return response.json()

def fetch_post_content(post_id):
    url = f"https://meta.discourse.org/posts/{post_id}/raw"
    response = requests.get(url)
    return response.text

def process_posts():
    page = 1
    while True:
        print(f"page {page}")
        data = fetch_posts(page)
        
        for post in data['posts']:
            content = fetch_post_content(post['id'])
            if "upload://" in content:
                print("https://meta.discourse.org/posts/" + str(post['id']))
            time.sleep(3)        
        
        if len(data['posts']) < 50:
            print("No more results.")
            break
        
        page += 1

if __name__ == "__main__":
    process_posts()
Output
page 1
https://meta.discourse.org/posts/1682015
https://meta.discourse.org/posts/1677389
https://meta.discourse.org/posts/1679834
https://meta.discourse.org/posts/1678673
https://meta.discourse.org/posts/1679833
https://meta.discourse.org/posts/1678629
https://meta.discourse.org/posts/1678229
https://meta.discourse.org/posts/1676531
https://meta.discourse.org/posts/1674982
https://meta.discourse.org/posts/1670250
https://meta.discourse.org/posts/1674421
https://meta.discourse.org/posts/1671959
https://meta.discourse.org/posts/1674355
https://meta.discourse.org/posts/1673357
https://meta.discourse.org/posts/1669322
https://meta.discourse.org/posts/1665519
page 2
https://meta.discourse.org/posts/1674153
https://meta.discourse.org/posts/1670613
https://meta.discourse.org/posts/1666606
https://meta.discourse.org/posts/1674992
https://meta.discourse.org/posts/1672811
https://meta.discourse.org/posts/1672050
https://meta.discourse.org/posts/1686260
https://meta.discourse.org/posts/1684497
https://meta.discourse.org/posts/1680692
https://meta.discourse.org/posts/1675012
page 3
No more results.
2 curtidas

Maravilhoso, obrigado @Canapin!
Eu adoro um pouco de python :pray:
Agora identifiquei todos os tópicos com imagens quebradas com a sua ajuda.
Muito apreciado.

3 curtidas

Você não precisa de uma chave de API para fazer uma pesquisa simples, mas eu não vejo sentido em “usar a API” para fazer uma pesquisa simples.

Talvez eu tenha entendido mal o problema. Parecia um problema que não teria acontecido se download remote images to local estivesse ativado, e ele está ativado por padrão. Mas também é provável que ele tenha sido desativado por algum motivo burocrático pelo qual o administrador fez isso. Acho que será desnecessariamente difícil resolver seu problema sem o plugin data explorer ou acesso ao Rails.

Cara! Você é demais!

3 curtidas

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.