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