링크로 검색

안녕하세요,

저는 포럼을 검색하여 포럼 스레드 내용에 외부 링크가 존재하는지 확인해야 하는 Python 스크립트를 작성하고 있습니다.

문제는 다음과 같습니다. 수동으로 확인해 보니 해당 링크가 포함된 게시물 중 일부는 검색 결과가 나오고 일부는 나오지 않습니다. 그런데 링크는 게시물에 분명히 포함되어 있습니다.

이것이 예상되는 현상일까요?

무엇을 찾고 계신가요? 생것을 찾으신 건가요, 아니면 익힌 것을요?

원본(raw)입니다. 예시:

그리고 원 스레드(OP thread)에서 원박스(onebox)로 표시됩니다. 같은 도메인인데 확장자가 다른 경우엔 동작하기도 하고, 그렇지 않은 경우도 있습니다.

정확히 어떤 방식으로 검색하고 있는지 알기 때문에, 어떤 일이 일어나고 있는지 추측하기는 어렵습니다.

제가 이 작업을 구현해야 한다면, 원본(raw)이나 렌더링된(cooked) 콘텐츠에 해당 링크가 포함된 모든 게시물을 검색하는 Data Explorer 쿼리를 작성할 가능성이 높습니다.

지금은 사이트 내에서만 일반 검색이 가능합니다. 다음과 같은 형태입니다:

모바일 검색 결과 페이지 스크린샷. 검색창, 결과 목록, 결과를 설명하는 텍스트가 표시되어 있습니다. (AI 캡션)

제 포럼에서는 링크 하나만 포함된 주제를 만들었는데, 그 링크로 검색해도 여전히 해당 주제를 찾을 수 없습니다.

여기서 테스트를 해보지 않았는데, 링크 게시가 허용되는지 확실하지 않아서 그렇습니다.

아직 테스트 중입니다. 긴 링크 전체(최대 101자)를 검색할 수 없는 것 같습니다. 따라서 링크가 길면 조금 잘라내야 할 것 같습니다. 샘플 링크를 게시해도 되는지, 그리고 이것이 의도된 동작인지 알려주세요.

Discourse는 게시물 내의 모든 링크를 추적합니다.
귀하의 사용 사례를 위해 이 데이터를 사용하는 것이 좋습니다.
제가 아는 한, 이 링크에 액세스하기 위한 API는 없습니다.
플러그인을 통해 이를 구현하는 것은 어렵지 않을 것입니다.

답변해 주셔서 감사합니다

이 자동화를 사용 중인데, 링크가 100자를 초과하지 않는 한 매우 잘 작동합니다. 하지만 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"Searching for topic with link: {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"No topics found for link: {cleaned_link}")  # 결과가 없으면 로그를 기록합니다
            for topic in topics:
                if cleaned_link in topic.get("blurb", ""):  # 링크가 주제 설명에 포함되어 있는지 확인합니다
                    log(f"Found existing topic with link: {cleaned_link}")  # 일치하는 주제를 찾으면 로그를 기록합니다
                    return topic["id"]
    except Exception as e:
        log(f"Error searching for topic with link: {e}")
    return None