API: カテゴリを作成し、説明に詳細を追加する

Discourse の API リクエストを使用してカテゴリを作成しているのですが、同じ処理の中でカテゴリの説明(あるいは説明テキスト、プロパティの違いを理解しようとしていますが)にテキストや URL への参照などを追加したいと考えています。

なお、この処理に「ロボット」が関与する可能性があるため、最適な方法は以下の通りです。

  1. カテゴリの作成(動作済み)
  2. カテゴリの更新、あるいはより具体的にはリンクの追加。ただし、これは category.description でしょうか、それとも category.description_text でしょうか?

ただし、更新リクエストで指定できるプロパティは namecolortext_color のみであるようです。他に送信可能なプロパティはありますか?例えば descriptiondescription_text はどうでしょうか?

私が行いたいのは、作成しているカテゴリに関連するサイトのスラッグリンクを追加すること、あるいは単に Discourse カテゴリの説明の末尾に「[link][https/example.projectxxx」を追加することだけです。

こんにちは、アンドリューさん。

ドキュメントではそれらの 3 つのプロパティのみがリストされていますが、レスポンスオブジェクトに記載されているほとんどのプロパティは、作成呼び出し時に設定できることがわかりました。これは、名前とスラッグ以外の設定を統一した大量のカテゴリをスクリプトで作成する際に必要になったことで判明しました。

設定する必要があり、一貫して問題が発生したのは、権限のプロパティのみです。

はい、API ドキュメントで定義されているものとは異なるプロパティが許可されていることに気づきました。

しかし、「Category description」を設定する方法は非常に混乱を招きます。カテゴリの説明は表示される内容とは全く異なり、実際にはカテゴリ名の直下には HTML 要素「cooked」があり、それは空です。では、それをどのように設定すればよいのでしょうか…

私の理解では、「About the --category name–…」というタイトルの投稿を作成し、それがそのカテゴリ内の最初の投稿である必要があります。ただし、他にも条件があると考えています。例えば「cooked」の内容や、最初に投稿するボットの存在などです。

投稿が上に表示されるように created_atupdated_at の日付を調整して、カテゴリがその説明を取得・使用するよう試みましたが、成功しませんでした。「cooked」やカテゴリの説明について理解していない何かがきっとあるはずです。非常に混乱しており、ドキュメントも見つかりませんでしたが、引き続き探します。もし試してみるべきアイデアがあれば、ぜひ教えてください。

こんにちは、この古いトピックを掘り起こしています。

description_textdescription の違いを理解する方法はありますか?

:slight_smile: を見つける以外に意味がありますか?

もしかしたら @alank さんがもう見つけたかもしれません!

ありがとうございます!

ドキュメント化されていない場合は、discourse リポジトリの spec ファイルを検索すると、プログラミング言語の基本的な仕組みを理解していれば、このようなことがわかります。

この場合、category spec の次の行は、description_textdescription から派生し、description を設定した直後に利用可能であることを示しています。

これは、description が説明の生の文字列であり、設定されると、調理されて description_text に割り当てられることを意味します。または、description_text はアクセス時に計算される可能性もありますが、その可能性は低いでしょう。いずれにしても、設定すべきは description です。

サイモンさん、ありがとうございます。これで両方のパラメータの違いが明確になりました。

しかし、試してみたところ、これらのパラメータはカテゴリの説明(または「カテゴリについて」の投稿)には実際には設定されていません。したがって、OPの問題は残ったままです。

追記:categories.jsonファイルにこれらの説明パラメータがあることは確認できましたが、API経由で設定する方法がわかりません!

POST リクエストペイロードにドキュメント化されていない場合、たとえそれが機能したとしても、そのように設定できるとは限りません。

行うべきことは、カテゴリ作成後のレスポンスで topic_url を確認し、その URL から取得した ID を使用して 単一トピックを取得 することだと思います。レスポンスの post_stream を確認してください。これは投稿の配列を含んでおり、おそらく 1 つの要素が含まれているはずです。

その投稿の ID を取得し、次に 単一投稿を更新 して説明を追加します。これにより、Discourse で投稿を編集するのと同じようにカテゴリの説明が更新されるはずです。同じ最初の行のルールが適用されます。

投稿しようとしていたところでした、まさにその通りです :slight_smile:

    ## カテゴリを作成
    ret_cat = client.create_category(name, color = color, **kwargs)

    ## 最初の投稿IDを取得 
    cat_id = ret_cat["category"]["id"]
    print("Cat id", cat_id)
    topics = client.category_topics(cat_id)
    first_post_id = client.topic_posts(topics["topic_list"]['topics'][0]["id"])['post_stream']['posts'][0]['id']
    ## 最初の投稿を変更
    ret_post = client.update_post(first_post_id, cat["about_msg"],"set up")