Поиск по ссылке

Привет,

Я пишу скрипт на Python, который должен искать в моём форуме и проверять, есть ли внешняя ссылка в содержимом тем форума.

Проблема в следующем: я проверил вручную, и скрипт находит некоторые посты, содержащие ссылку, но пропускает другие, хотя ссылка в посте присутствует.

Может ли такое поведение быть ожидаемым?

Что вы ищете? Сырое или приготовленное?

Исходный. Например:

И он отображается в одном блоке в первом сообщении темы. Иногда это работает для того же домена, но с другим окончанием, а иногда нет.

Без точного понимания того, как именно вы выполняете поиск, сложно предположить, что происходит.

Если бы мне предстояло реализовать эту задачу, я бы, вероятно, создал запрос в 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