Buscar por enlace

Hola,

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?

¿Qué buscas? ¿Crudo o cocido?

El crudo. Por ejemplo:

Y está “oneboxed” en el hilo del op. A veces funciona con el mismo dominio pero con una terminación diferente, a veces no.

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.

2 Me gusta

por ahora es solo una búsqueda normal, del lado del sitio, como esta:

En mi foro, acabo de crear un tema con 1 enlace, y todavía no puedo encontrar el tema buscando el enlace.

No lo he probado aquí, ya que no estoy seguro de si está permitido publicar enlaces o no.

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.

2 Me gusta

Gracias por tu respuesta

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
1 me gusta