안녕하세요,
저는 포럼을 검색하여 포럼 스레드 내용에 외부 링크가 존재하는지 확인해야 하는 Python 스크립트를 작성하고 있습니다.
문제는 다음과 같습니다. 수동으로 확인해 보니 해당 링크가 포함된 게시물 중 일부는 검색 결과가 나오고 일부는 나오지 않습니다. 그런데 링크는 게시물에 분명히 포함되어 있습니다.
이것이 예상되는 현상일까요?
안녕하세요,
저는 포럼을 검색하여 포럼 스레드 내용에 외부 링크가 존재하는지 확인해야 하는 Python 스크립트를 작성하고 있습니다.
문제는 다음과 같습니다. 수동으로 확인해 보니 해당 링크가 포함된 게시물 중 일부는 검색 결과가 나오고 일부는 나오지 않습니다. 그런데 링크는 게시물에 분명히 포함되어 있습니다.
이것이 예상되는 현상일까요?
무엇을 찾고 계신가요? 생것을 찾으신 건가요, 아니면 익힌 것을요?
원본(raw)입니다. 예시:
그리고 원 스레드(OP thread)에서 원박스(onebox)로 표시됩니다. 같은 도메인인데 확장자가 다른 경우엔 동작하기도 하고, 그렇지 않은 경우도 있습니다.
정확히 어떤 방식으로 검색하고 있는지 알기 때문에, 어떤 일이 일어나고 있는지 추측하기는 어렵습니다.
제가 이 작업을 구현해야 한다면, 원본(raw)이나 렌더링된(cooked) 콘텐츠에 해당 링크가 포함된 모든 게시물을 검색하는 Data Explorer 쿼리를 작성할 가능성이 높습니다.
지금은 사이트 내에서만 일반 검색이 가능합니다. 다음과 같은 형태입니다:

제 포럼에서는 링크 하나만 포함된 주제를 만들었는데, 그 링크로 검색해도 여전히 해당 주제를 찾을 수 없습니다.
여기서 테스트를 해보지 않았는데, 링크 게시가 허용되는지 확실하지 않아서 그렇습니다.
아직 테스트 중입니다. 긴 링크 전체(최대 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