Suche nach Link

Hallo,

Ich schreibe ein Python-Skript, das in meinem Forum suchen und prüfen muss, ob ein externer Link im Inhalt meiner Forum-Threads vorhanden ist.
Das Problem ist: Ich habe manuell geprüft, es findet einige Ergebnisse von Beiträgen, die den Link enthalten, und andere nicht. Obwohl der Link im Beitrag vorhanden ist.
Wäre das etwas zu erwarten?

Wonach suchst du? Das Rohe oder das Gekochte?

Der Rohinhalt. Z.B.

Und es wird im Eröffnungsthread als Onebox dargestellt. Manchmal funktioniert es mit derselben Domain, aber anderem Ende, manchmal nicht.

Ohne genau zu wissen, wie Sie suchen, ist es schwer zu erraten, was vor sich geht.

Wenn ich diese Aufgabe zur Implementierung erhalten würde, würde ich wahrscheinlich eine Data Explorer-Abfrage erstellen, die nach allen Beiträgen mit dem Link im Rohformat oder im gekochten Format sucht.

2 „Gefällt mir“

vorerst ist es nur eine normale Suche, auf der Website, wie diese:

In meinem Forum habe ich gerade ein Thema mit 1 Link erstellt und kann das Thema immer noch nicht finden, wenn ich nach dem Link suche.

Ich habe es hier noch nicht getestet, da ich mir nicht sicher bin, ob das Posten von Links erlaubt ist oder nicht.

Ich teste es noch. Es scheint, dass ich keinen ganzen langen Link (maximal 101 Zeichen) suchen kann. Ich muss ihn also etwas kürzen, wenn er länger ist. Lassen Sie mich wissen, ob ich einen Beispiel-Link posten darf und ob dies das erwartete Verhalten ist.

Discourse verfolgt jeden Link innerhalb von Beiträgen.
Für Ihren Anwendungsfall würde ich diese Daten verwenden.
Soweit ich weiß, gibt es keine API, um auf diese Links zuzugreifen.
Die Implementierung einer solchen über ein Plugin sollte nicht schwer sein.

2 „Gefällt mir“

Danke für deine Antwort

Ich benutze diese Automatisierung. Sie funktioniert sehr gut, solange der Link nicht 100 Zeichen überschreitet. Wenn er das tut, wird er als nicht existent zurückgegeben, obwohl es ein Thema mit diesem Link gibt.

async def search_discourse_topic(session, link):
    headers = {"Api-Key": USER_API_KEY, "Api-Username": USER_ID}
    cleaned_link = clean_url(link)  # Bereinigt die angegebene URL, um Konsistenz zu gewährleisten
    try:
        log(f"Searching for topic with link: {cleaned_link}")  # Protokolliert den Beginn der Suche
        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}")  # Protokolliert, wenn keine Ergebnisse gefunden werden
            for topic in topics:
                if cleaned_link in topic.get("blurb", ""):  # Prüft, ob der Link in der Topic-Beschreibung vorkommt
                    log(f"Found existing topic with link: {cleaned_link}")  # Protokolliert, wenn ein passendes Thema gefunden wird
                    return topic["id"]
    except Exception as e:
        log(f"Error searching for topic with link: {e}")
    return None
1 „Gefällt mir“