Я следовал документации , однако обновляется только заголовок темы, а тело темы не меняется.
Мой код (Javascript):
async function updateDiscourseTopic(topic_id) {
const Discourse_API_Key = "Discourse_API_Key";
const url = `https://discourse.mysite.com/t/-/${topic_id}.json`;
const payload = {
title: 'session_1',
raw: "новое тело (не применяется)"
}
const response = await fetch(url, {
method: 'PUT',
headers: {
"Api-Key": Discourse_API_Key,
"Api-Username": "system",
"Content-Type": "application/json",
},
body: JSON.stringify(payload)
});
}
Lilly
(Lillian )
11.Май.2023 13:01:55
2
Просто предположение, основанное на просмотре кода, но, возможно, это связано с тем, что вы используете topic_id вместо post_id? Ведь в Discourse первый пост — это, по сути, тема.
Canapin
(Coin-coin le Canapin)
11.Май.2023 15:31:52
3
@Lilly права.
Тема определяется такими атрибутами, как заголовок, категория, теги и т. д.
Но контент принадлежит сообщению .
Если вы хотите обновить заголовок и контент, вам потребуется 2 запроса.
PUT для темы
PUT для первого сообщения. ID сообщения можно найти в HTML-коде страницы. Ищите атрибут data-post-id в теге <article>.
Пример:
<article id="post_2" aria-label="post #2 by @Lilly" role="region" data-post-id="1288311" data-
topic-id="264640" data-user-id="127856" class="boxed onscreen-post">
Вау, вы правы, это работает
К тому же я разобрался, как получить ID первого сообщения в теме с помощью API Discourse:
async function getFirstPostIdFromOnetopic(topic_id) {
const Discourse_API_Key = "Discourse_API_Key";
const url = `https://discourse.mysite.com/t/${topic_id}/posts.json`;
const response = await fetch(url, {
method: 'GET',
headers: {
"Api-Key": Discourse_API_Key,
"Api-Username": "system",
"Content-Type": "application/json",
}
});
const data = await response.json();
const firstPostId = data.post_stream.posts[0].id;
return firstPostId;
}
Спасибо вам и @Lilly