您好,
我正在编写一个 Python 脚本,需要搜索我的论坛并在论坛帖子内容中检查是否存在外部链接。
问题是:我手动检查过,它找到了一些包含链接的帖子,但也有一些没有找到,尽管链接就在帖子中。
这种情况是符合预期的吗?
您好,
我正在编写一个 Python 脚本,需要搜索我的论坛并在论坛帖子内容中检查是否存在外部链接。
问题是:我手动检查过,它找到了一些包含链接的帖子,但也有一些没有找到,尽管链接就在帖子中。
这种情况是符合预期的吗?
您在搜索什么?生的还是熟的?
原始。例如:
并且它在 op 帖子中被 oneboxed。有时它在同一域但结尾不同时有效,有时则无效。
由于不知道您具体是如何搜索的,因此很难猜测发生了什么。
如果我接到这项任务来实施,我可能会创建一个 Data Explorer 查询,搜索原始或已编码内容中包含该链接的任何帖子。
我还在测试。似乎我无法搜索一个完整的长链接(最多101个字符)。所以如果它更长,我需要稍微修剪一下。请告诉我是否允许我发布一个示例链接以及这是否是预期行为。
Discourse 会跟踪帖子中的所有链接。
对于您的用例,我将使用这些数据。
据我所知,没有 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"搜索链接为 {cleaned_link} 的主题时出错: {e}")
return None