通过链接搜索

您好,

我正在编写一个 Python 脚本,需要搜索我的论坛并在论坛帖子内容中检查是否存在外部链接。
问题是:我手动检查过,它找到了一些包含链接的帖子,但也有一些没有找到,尽管链接就在帖子中。
这种情况是符合预期的吗?

您在搜索什么?生的还是熟的?

原始。例如:

并且它在 op 帖子中被 oneboxed。有时它在同一域但结尾不同时有效,有时则无效。

由于不知道您具体是如何搜索的,因此很难猜测发生了什么。

如果我接到这项任务来实施,我可能会创建一个 Data Explorer 查询,搜索原始或已编码内容中包含该链接的任何帖子。

2 个赞

目前它只是一个普通的站内搜索,如下所示:

在我的论坛上,我刚创建了一个包含 1 个链接的主题,但仍然无法通过搜索链接找到该主题。

我还没有在这里测试过,因为我不确定是否允许发布链接。

我还在测试。似乎我无法搜索一个完整的长链接(最多101个字符)。所以如果它更长,我需要稍微修剪一下。请告诉我是否允许我发布一个示例链接以及这是否是预期行为。

Discourse 会跟踪帖子中的所有链接。
对于您的用例,我将使用这些数据。
据我所知,没有 API 可以访问这些链接。
通过插件实现一个应该不难。

2 个赞

感谢您的回复

我正在使用这个自动化工具,它运行得非常好,只要链接不超过 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"搜索链接为 {cleaned_link} 的主题时出错: {e}")
    return None
1 个赞