# 如何迭代所有主题以将它们导出为Markdown？

**URL:** <https://meta.discourse.org/t/how-to-iterate-over-all-the-topics-in-order-to-export-them-as-markdown/220180>\
**Category:** Support\
**Created:** [2022年三月6日 02:02 UTC](https://meta.discourse.org/t/how-to-iterate-over-all-the-topics-in-order-to-export-them-as-markdown/220180 "2022-03-06T02:02:14Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![jbrains](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jbrains/32/208183_2.png) [@jbrains](https://meta.discourse.org/u/jbrains)\
**Post date:** [2022年三月6日 02:02 UTC](https://meta.discourse.org/t/how-to-iterate-over-all-the-topics-in-order-to-export-them-as-markdown/220180/1 "2022-03-06T02:02:14Z")

</div>

大家好。我正在为 Discourse 站点寻找内容存档的选项。我找到了关于创建和提供 WARC 的帖子，这给了我一些可以参考的东西，但我真的很想将所有主题/帖子/等等导出为 Markdown。

我读了这篇：[Export topic as markdown](https://meta.discourse.org/t/export-topic-as-markdown/152185)

现在我想知道如何遍历所有主题 URL，以便将其转换为 `/raw/` URL 并将所有主题帖子导出为 Markdown。有没有一种简单的方法可以获取站点上所有主题 URL 的列表？我需要打开 Rails 控制台吗？是否有单个 Ruby 类可以枚举所有主题 URL？或者其他方法？

非常感谢。

---

<div class="post-metadata">

**Author:** ![jbrains](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jbrains/32/208183_2.png) [@jbrains](https://meta.discourse.org/u/jbrains)\
**Post date:** [2022年三月6日 02:39 UTC](https://meta.discourse.org/t/how-to-iterate-over-all-the-topics-in-order-to-export-them-as-markdown/220180/2 "2022-03-06T02:39:15Z")

</div>

我到了那里，但我仍然很想听听更简单的路径。

1. 使用 Discourse 管理员下载站点的备份。
2. 在备份文件中找到 PostgreSQL 数据库转储，然后将其恢复到本地数据库。
3. `select id from topics`，然后将其粘贴到文件中。
4. 使用 `sed` 或其任何类似工具将主题 ID 转换为 `https://my-discourse-site/raw/<topic ID>`
5. `for...; do wget $url; done`

---

<div class="post-metadata">

**Author:** ![RGJ](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/rgj/32/523185_2.png) [@RGJ](https://meta.discourse.org/u/RGJ)\
**Post date:** [2022年三月6日 04:05 UTC](https://meta.discourse.org/t/how-to-iterate-over-all-the-topics-in-order-to-export-them-as-markdown/220180/3 "2022-03-06T04:05:21Z")

</div>

> [@jbrains](#):
>
> - 使用 Discourse 管理员下载站点备份。
> - 在备份文件中找到 PostgreSQL 数据库转储，然后将其恢复到本地数据库。
> - `select id from topics`，然后将其粘贴到文件中。

1. 检索类别 JSON，例如 `https://meta.discourse.org/c/support.json`（它会重定向到 `https://meta.discourse.org/c/support/6.json`）
2. 从该 JSON 中的 `topic_list.topics` 数组获取第一批主题 ID。
3. 检索 `topic_list.more_topics_url` 并转到 #2

---

<div class="post-metadata">

**Author:** ![jbrains](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jbrains/32/208183_2.png) [@jbrains](https://meta.discourse.org/u/jbrains)\
**Post date:** [2022年三月8日 21:43 UTC](https://meta.discourse.org/t/how-to-iterate-over-all-the-topics-in-order-to-export-them-as-markdown/220180/4 "2022-03-08T21:43:42Z")

</div>

> [@RGJ](#):
>
> - 获取分类 JSON，例如 `https://meta.discourse.org/c/support.json`（它会重定向到 `https://meta.discourse.org/c/support/6.json`）
> - 从该 JSON 的 `topic_list.topics` 数组中获取第一批主题 ID。
> - 获取 `topic_list.more_topics_url` 并转到 #2

感谢您的帮助。然后我该如何遍历这些分类？

---

<div class="post-metadata">

**Author:** ![RGJ](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/rgj/32/523185_2.png) [@RGJ](https://meta.discourse.org/u/RGJ)\
**Post date:** [2022年三月8日 23:07 UTC](https://meta.discourse.org/t/how-to-iterate-over-all-the-topics-in-order-to-export-them-as-markdown/220180/5 "2022-03-08T23:07:33Z")

</div>

> [@jbrains](#):
>
> 遍历分类？

请求 `/site.json` 并遍历 `categories` 数组。
