Impossible de mettre à jour le corps d'un sujet via l'API

J’ai suivi la documentation et, cependant, cela ne met à jour que le titre du sujet, sans mettre à jour le corps.

Mon code (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: "nouveau corps (ne s'applique pas)"
  }

  const response = await fetch(url, {
    method: 'PUT',
    headers: {
      "Api-Key": Discourse_API_Key,
      "Api-Username": "system",
      "Content-Type": "application/json",
    },
    body: JSON.stringify(payload)
  });

}

juste une supposition d’après le code, mais peut-être est-ce parce que vous utilisez topic_id au lieu de post_id ? parce que le premier message est le sujet dans Discourse, plus ou moins ?

3 « J'aime »

@Lilly a raison.

Un sujet est défini par des attributs comme le titre, la catégorie, les tags, etc.

Mais le contenu appartient à un message.

Si vous voulez mettre à jour le titre et le contenu, vous avez besoin de 2 requêtes.

  1. PUT sur le sujet

  2. PUT sur le premier message. Vous pouvez trouver l’ID du message dans le code HTML de la page. Cherchez l’attribut data-post-id dans <article>.
    Exemple :

    <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">
    
3 « J'aime »

Wow, tu as raison, ça fonctionne :sparkling_heart:

Et j’ai trouvé comment récupérer l’ID du premier message d’un sujet en utilisant l’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;
}

Merci à toi et à @Lilly :innocent:

3 « J'aime »

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.