popey
(Alan Pope)
1
我已经搜索并阅读了如何有效搜索内容,但没有找到答案。
我在一个 Discourse 论坛上担任版主(无权访问后端)。有人发布了许多主题,其中的图片链接到了第三方托管提供商(在本例中是 Google Docs)。他们已经离开了公司,所有这些图片链接现在都已失效。
我可以(也已经)手动浏览他们的一些帖子,查找并修复(感谢互联网档案馆)损坏的图片。但这很费力。我想获取包含这些损坏图片 URL 的所有主题列表,以便我们集体修复它们,将图片重新上传到网站。
我当然可以使用搜索来查找 with:images #tutorials,但我无法在图片 URL 中搜索(例如)googleusercontent。在没有 API 或后端 rake 访问权限的情况下,这是否可行?
2 个赞
pfaffman
(Jay Pfaffman)
2
管理员可以创建一个数据浏览器查询来查找这些帖子。
但是,如果管理员不希望发生这种情况,他们会打开“下载图像到本地”选项。这是他们自己造成的问题,并不是版主的职责。
3 个赞
Canapin
(Coin-coin le Canapin)
3
那是不是意味着你也无法安装数据浏览器?那将是解决此问题的工具。
图片在帖子中是如何格式化的?它们只显示纯 URL,使用 [img]、<img>、……?
仅举例说明您的问题。帖子可能包含损坏的图片 URL,例如 https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNaW4QQ43EQ-8qqQPntDP7so6Cg19PVSLN9bXv3ZhQqHZtomb8CGY3XArx3GIaZ04d0p9K3V-buaf73-M5dpq2wPuvnjsapStHdTkTVoPj2q9RAmcdczmE12HYz57PNOdVuft1/s1600-h/eastern_coastal_pcn_ap.jpg
帖子包含 URL,
但它返回的内容类似
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNaW4QQ43EQ-8qqQPntDP7so6Cg19PVSLN9bXv3ZhQqHZtomb8CGY3XArx3GIaZ04d0p9K3V-buaf73-M5dpq2wPuvnjsapStHdTkTVoPj2q9RAmcdczmE12HYz57PNOdVuft1/s1600-h/eastern_coastal_pcn_ap.jpg" target="_blank" rel="noopener" class="onebox">
<img src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNaW4QQ43EQ-8qqQPntDP7so6Cg19PVSLN9bXv3ZhQqHZtomb8CGY3XArx3GIaZ04d0p9K3V-buaf73-M5dpq2wPuvnjsapStHdTkTVoPj2q9RAmcdczmE12HYz57PNOdVuft1/s1600-h/eastern_coastal_pcn_ap.jpg" width="" height="" loading="lazy">
</a>
其中不包含任何可搜索的字符串。
发生这种情况了吗?
3 个赞
popey
(Alan Pope)
4
可以,我无法安装插件。
它们使用标准的 markdown  格式化,其中 googleusercontent 是 URL 的一部分。例如:

如果我搜索 googleusercontent,则不会返回任何结果。但我可以找到包含图片的帖子,这些帖子的 URL 包含文本 googleusercontent。我不知道这是一个错误,还是 discourse 不搜索 markdown 格式的图片链接 URL 的功能。
1 个赞
Canapin
(Coin-coin le Canapin)
5
我相信 Discourse 的搜索是在处理后的帖子(包含 HTML)上执行的。
搜索会忽略 HTML 标签,而 IMG 标签不包含文本,因此无法返回您要查找的内容。
为什么您不能使用 API?
您可以创建一个本地脚本,该脚本会触发对用户包含图片的帖子的搜索查询,遍历结果(足够慢以避免达到速率限制,并且您还可以查询原始帖子内容(如果需要)),并输出包含您要查找的子字符串的帖子。
也许有一个更简单的解决方案,但如果别无选择,我会选择这个。这相当容易做到。
pfaffman
(Jay Pfaffman)
6
因为管理员不给她 API 密钥?
因为她不是程序员?
这似乎是管理员制造的一个问题,并且他/她没有兴趣解决。
1 个赞
Canapin
(Coin-coin le Canapin)
7
是的,我的意思是,除非我弄错了,否则我建议的 API 搜索和帖子端点不需要密钥?
当然,这最好需要基本的编程知识,即使 AI 可能会输出一个很好的基础脚本。
提到的问题肯定不是在没有管理员访问权限的情况下理想地解决的。
2 个赞
popey
(Alan Pope)
8
我没有申请 API 密钥(官僚主义),而且我不知道需要密钥才能执行我所认为的“简单”搜索查询。我不知道它不会查看内容中的 HTML 标签。所以这就解释清楚了,谢谢你。
这不是管理员造成的问题。这只是一个管理员和内容创建者直到有人离开公司,并且该账户的 Google Docs 访问权限被关闭,导致图片消失/损坏之前都不知道的情况。
我同意我可以申请 API 密钥,或者在本地编写一些东西来抓取网站并找到有问题的帖子。我会做其中一件事。
感谢您的回复。
2 个赞
Canapin
(Coin-coin le Canapin)
9
您不需要 API 密钥即可进行搜索。
我不确定拥有 API 密钥是否能帮助您更轻松地解决问题。
这是一个
示例 Python 脚本,它会循环遍历我在 meta 上的帖子(每 3 秒一个帖子),并返回那些在原始内容中包含子字符串 upload:// 的帖子:
import requests
import time
def fetch_posts(page):
url = f"https://meta.discourse.org/search.json?q=%40cocoquark&page={page}"
response = requests.get(url)
return response.json()
def fetch_post_content(post_id):
url = f"https://meta.discourse.org/posts/{post_id}/raw"
response = requests.get(url)
return response.text
def process_posts():
page = 1
while True:
print(f"page {page}")
data = fetch_posts(page)
for post in data['posts']:
content = fetch_post_content(post['id'])
if "upload://" in content:
print("https://meta.discourse.org/posts/" + str(post['id']))
time.sleep(3)
if len(data['posts']) < 50:
print("No more results.")
break
page += 1
if __name__ == "__main__":
process_posts()
输出
page 1
https://meta.discourse.org/posts/1682015
https://meta.discourse.org/posts/1677389
https://meta.discourse.org/posts/1679834
https://meta.discourse.org/posts/1678673
https://meta.discourse.org/posts/1679833
https://meta.discourse.org/posts/1678629
https://meta.discourse.org/posts/1678229
https://meta.discourse.org/posts/1676531
https://meta.discourse.org/posts/1674982
https://meta.discourse.org/posts/1670250
https://meta.discourse.org/posts/1674421
https://meta.discourse.org/posts/1671959
https://meta.discourse.org/posts/1674355
https://meta.discourse.org/posts/1673357
https://meta.discourse.org/posts/1669322
https://meta.discourse.org/posts/1665519
page 2
https://meta.discourse.org/posts/1674153
https://meta.discourse.org/posts/1670613
https://meta.discourse.org/posts/1666606
https://meta.discourse.org/posts/1674992
https://meta.discourse.org/posts/1672811
https://meta.discourse.org/posts/1672050
https://meta.discourse.org/posts/1686260
https://meta.discourse.org/posts/1684497
https://meta.discourse.org/posts/1680692
https://meta.discourse.org/posts/1675012
page 3
No more results.
2 个赞
popey
(Alan Pope)
10
太棒了,谢谢 @Canapin!
我真的很喜欢 Python 
在您的帮助下,我现在已经识别出所有带有损坏图片的帖子。
非常感谢。
3 个赞
pfaffman
(Jay Pfaffman)
11
你不需要 API 密钥就可以进行简单的搜索,但我看不出“使用 API”进行简单搜索有什么意义。
也许我误解了这个问题。听起来像是如果 download remote images to local(将远程图片下载到本地)开启就不会发生的问题,而它默认是开启的。但也有可能是出于某种官僚原因被关闭了,而管理员这么做了。我认为,没有数据浏览器插件或访问 Rails,解决你的问题将是极其困难的。
哥们!你太棒了!
3 个赞
system
(system)
关闭
12
This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.