Без точного понимания того, как именно вы выполняете поиск, сложно предположить, что происходит.
Если бы мне предстояло реализовать эту задачу, я бы, вероятно, создал запрос в Data Explorer для поиска любых сообщений, содержащих ссылку в необработанном или обработанном виде.
Я всё ещё тестирую. Похоже, я не могу искать по всей длинной ссылке (максимум 101 символ). Поэтому мне нужно немного укоротить её, если она длиннее. Дайте знать, могу ли я опубликовать пример ссылки и является ли это ожидаемым поведением.
Discourse отслеживает любые ссылки внутри сообщений.
Для вашего случая я бы использовал эти данные.
Насколько мне известно, API для доступа к этим ссылкам отсутствует.
Реализация такого API через плагин не должна быть сложной.
Я использую эту автоматизацию, и она работает отлично, пока ссылка не превышает 100 символов. Если она длиннее, система возвращает ошибку «не существует», хотя тема с такой ссылкой есть.
async def search_discourse_topic(session, link):
headers = {"Api-Key": USER_API_KEY, "Api-Username": USER_ID}
cleaned_link = clean_url(link) # Очищает предоставленный URL для обеспечения согласованности
try:
log(f"Поиск темы со ссылкой: {cleaned_link}") # Логирует начало поиска
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"Темы по ссылке не найдены: {cleaned_link}") # Логирует отсутствие результатов
for topic in topics:
if cleaned_link in topic.get("blurb", ""): # Проверяет, содержится ли ссылка в описании темы
log(f"Найдена существующая тема со ссылкой: {cleaned_link}") # Логирует найденную соответствующую тему
return topic["id"]
except Exception as e:
log(f"Ошибка при поиске темы по ссылке: {e}")
return None