Pesquisar por link

Olá,

Estou escrevendo um script Python que precisa pesquisar no meu fórum e verificar se um link externo existe no conteúdo dos meus tópicos de fórum.
O problema é: verifiquei manualmente, ele encontra alguns resultados de posts contendo o link e outros não. Mesmo que o link esteja no post.
Isso seria algo esperado?

O que você está procurando? Cru ou cozido?

O original. Ex:

E é exibido em uma caixa no tópico original. Às vezes funciona com o mesmo domínio, mas com um final diferente, às vezes não.

Sem saber exatamente como você está pesquisando, é difícil adivinhar o que está acontecendo.

Se eu recebesse essa tarefa para implementar, provavelmente faria uma consulta no Explorador de Dados que pesquisasse por qualquer postagem com o link em formato bruto ou processado.

2 curtidas

por enquanto é apenas uma busca normal, no lado do site, assim:

No meu fórum, acabei de criar um tópico com 1 link, e ainda não consigo encontrar o tópico pesquisando pelo link.

Ainda não testei aqui, pois não tenho certeza se é permitido postar links ou não.

Ainda estou testando. Parece que não consigo pesquisar um link longo inteiro (máximo de 101 caracteres). Portanto, preciso cortá-lo um pouco se for mais longo. Me avisem se posso postar um link de exemplo e se é o comportamento esperado.

O Discourse rastreia qualquer link dentro das postagens.
Para o seu caso de uso, eu usaria esses dados.
Pelo que sei, não há API para acessar esses links.
Implementar um via plugin não deve ser difícil.

2 curtidas

Obrigado pela sua resposta

Estou usando esta automação, ela funciona muito bem, desde que o link não ultrapasse 100 caracteres. Se ultrapassar, ele retorna como inexistente, mesmo que exista um tópico com esse link.

async def search_discourse_topic(session, link):
    headers = {"Api-Key": USER_API_KEY, "Api-Username": USER_ID}
    cleaned_link = clean_url(link)  # Limpa o URL fornecido para garantir consistência
    try:
        log(f"Searching for topic with link: {cleaned_link}")  # Log quando inicia a pesquisa
        async with session.get(f"{DISCOURSE_API_URL}/search.json", headers=headers, params={"q": cleaned_link}) as response:
            search_results = await response.json()
            topics = search_results.get("topics", [])
            if not topics:
                log(f"No topics found for link: {cleaned_link}")  # Log se não encontrar resultados
            for topic in topics:
                if cleaned_link in topic.get("blurb", ""):  # Checa se o link aparece na descrição do tópico
                    log(f"Found existing topic with link: {cleaned_link}")  # Log se um tópico correspondente for encontrado
                    return topic["id"]
    except Exception as e:
        log(f"Error searching for topic with link: {e}")
    return None
1 curtida