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?
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.
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.
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