J’écris un script Python qui doit rechercher sur mon forum et vérifier si un lien externe existe dans le contenu de mes fils de discussion.
Le problème est le suivant : j’ai vérifié manuellement, il trouve certains résultats de messages contenant le lien et d’autres non. Même si le lien est dans le message.
Sans savoir exactement comment vous effectuez la recherche, il est difficile de deviner ce qui se passe.
Si on me confiait cette tâche à implémenter, je créerais probablement une requête Data Explorer qui rechercherait tous les messages contenant le lien, qu’il soit brut ou cuit.
Je suis toujours en train de le tester. Il semble que je ne puisse pas rechercher un lien long entier (maximum 101 caractères). Je dois donc le raccourcir un peu s’il est plus long. Faites-moi savoir si je suis autorisé à publier un exemple de lien et si c’est le comportement attendu.
Discourse garde une trace de tous les liens à l’intérieur des publications.
Pour votre cas d’utilisation, j’utiliserais ces données.
Pour autant que je sache, il n’y a pas d’API pour accéder à ces liens.
En implémenter une via un plugin ne devrait pas être difficile.
J’utilise cette automatisation, elle fonctionne très bien, tant que le lien ne dépasse pas 100 caractères. S’il le dépasse, il est renvoyé comme inexistant, même s’il existe un sujet avec ce lien.
async def search_discourse_topic(session, link):
headers = {"Api-Key": USER_API_KEY, "Api-Username": USER_ID}
cleaned_link = clean_url(link) # Nettoie l'URL fourni pour assurer la cohérence
try:
log(f"Recherche du sujet avec le lien : {cleaned_link}") # Journalisation au début de la recherche
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"Aucun sujet trouvé pour le lien : {cleaned_link}") # Journalisation si aucun résultat n'est trouvé
for topic in topics:
if cleaned_link in topic.get("blurb", ""): # Vérifie si le lien apparaît dans la description du sujet
log(f"Sujet existant trouvé avec le lien : {cleaned_link}") # Journalisation si un sujet correspondant est trouvé
return topic["id"]
except Exception as e:
log(f"Erreur lors de la recherche du sujet avec le lien : {e}")
return None