Estoy escribiendo un script de Python que necesita buscar en mi foro y comprobar si existe un enlace externo en el contenido de los hilos de mi foro.
El problema es: lo he comprobado manualmente, encuentra algunos resultados de publicaciones que contienen el enlace y otros no. A pesar de que el enlace está en la publicación.
¿Sería esto algo esperado?
Sin saber exactamente cómo estás buscando, es difícil adivinar qué está pasando.
Si me dieran esta tarea para implementar, probablemente haría una consulta de Explorador de datos que buscara cualquier publicación con el enlace en formato sin procesar o cocido.
Todavía lo estoy probando. Parece que no puedo buscar un enlace largo completo (máximo 101 caracteres). Así que necesito recortarlo un poco si es más largo. Avísame si puedo publicar un enlace de ejemplo y si es el comportamiento esperado.
Discourse realiza un seguimiento de cualquier enlace dentro de las publicaciones.
Para tu caso de uso, usaría estos datos.
Hasta donde sé, no hay una API para acceder a estos enlaces.
Implementar una a través de un plugin no debería ser difícil.
Estoy usando esta automatización, funciona muy bien, siempre y cuando el enlace no supere los 100 caracteres. Si lo hace, devuelve como inexistente, a pesar de que existe un tema con ese enlace.
async def search_discourse_topic(session, link):
headers = {"Api-Key": USER_API_KEY, "Api-Username": USER_ID}
cleaned_link = clean_url(link) # Limpia la URL proporcionada para garantizar la coherencia
try:
log(f"Buscando tema con enlace: {cleaned_link}") # Registro al iniciar la búsqueda
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 se encontraron temas para el enlace: {cleaned_link}") # Registro si no se encuentran resultados
for topic in topics:
if cleaned_link in topic.get("blurb", ""): # Comprueba si el enlace aparece en la descripción del tema
log(f"Se encontró un tema existente con el enlace: {cleaned_link}") # Registro si se encuentra un tema coincidente
return topic["id"]
except Exception as e:
log(f"Error al buscar tema con enlace: {e}")
return None