jucajuca
(Juan Carlos)
1
Hello I am trying to use the API endpoint to delete topics.
I can delete “normal” topics but I ran into the problem that the default topic can not be deleted. The one called “About the ________ category”
{{baseUrl}}/t/{{id}}.json
Here are my questions:
- How can I delete this topic using the API?
- How can I identify that topic using the API so that it is skipped.
Example
url = base_url + "/c/" + slug + "/22.json"
response = requests.request("GET", url, headers=headers, data=payload)
for topic in response.json()["topic_list"]["topics"]:
# Deletes each topic
url = base_url + "/t/topic_id.json".replace("topic_id", str(topic["id"]) )
response = requests.request("DELETE", url, headers=headers, data=payload)
Lilly
2
you can set the category description topics to “unlisted”. i do that to all of mine. i suspect you can identify the unlisted topics via the api?
3 Likes
Canapin
(Coin-coin le Canapin)
3
Can you share why you want to remove these topics? Those are special topics that can’t and aren’t meant to be deleted.
If your goal is to delete all the topics and then delete the category, you can delete the category without deleting the About topic.
When people want to get rid of the About topics somehow, unlisting them as @Lilly suggest is the way to go.
I think these posts don’t have any unique attributes. They are identified as being special topics from the category
table, via the topic_id
column.
You can get them with the /c/{id}/show.json
endpoint: https://docs.discourse.org/#tag/Categories/operation/getCategory.
Look for the topic_url
key.
For example:
https://meta.discourse.org/c/7/show.json
"topic_url": "/t/about-the-dev-category/1026"
A bit more technical info if that interest you.
The deletion protection is here: discourse/lib/guardian/topic_guardian.rb at 7ecaf6295daf8759aa98d00e7035c4dc0f853303 · discourse/discourse · GitHub
And the method used is defined here: discourse/app/models/topic.rb at 7ecaf6295daf8759aa98d00e7035c4dc0f853303 · discourse/discourse · GitHub
2 Likes