API経由でカテゴリ設定を更新できません

こんにちは。CSV入力を利用してカテゴリを作成するツールを開発しています。カテゴリ作成時に親子関係を確立することには成功しましたが、カテゴリ設定の適用で問題が発生しており、常に失敗しています。新しいカテゴリ作成後に(以下にリストされているような)カテゴリ設定を適用する方法について、何かアドバイスをいただけないでしょうか。設定適用前に最大40秒の遅延を追加してみましたが、それでも機能しません。

また、カテゴリの説明を更新したいです :: update_about_post(category_id, description) # 説明のみ更新します。

さらに、カテゴリに2つの追加カスタムフィールドを追加したいのですが、どのように追加すればよいでしょうか。

カテゴリ設定を更新する関数

def update_category_settings(category_id):
time.sleep(5) # カテゴリが完全に作成されたことを確認してから設定を適用するために遅延を追加します

url = f"{DISCOURSE_URL}/categories/{category_id}"
data = {
    "subcategory_list_style": "boxes", # サブカテゴリスタイルを「ボックス」に設定します
    "show_subcategory_list": True, # トピックの上にサブカテゴリリストを表示します
    "allow_solved_on_category": True # 解決済み機能を有効にします
}

response = requests.put(url, json={"category": data}, headers=headers)

if response.status_code == 200:
    print(f"カテゴリID {category_id} のカテゴリ設定が更新されました")
else:
    print(f"カテゴリID {category_id} の設定の更新に失敗しました: {response.status_code}, {response.text}")

どんな入力でもありがたいです。この時点で立ち往生しています…

Pythonでテストしていませんが、ブール値のパラメータにブール値のTrueの代わりに文字列"true"を使用してみる価値はあるでしょう。Discourseは文字列"true""false"をブール値として解釈します。

API呼び出しの一部が機能していると仮定しており、この特定の呼び出しに問題があるだけだと考えられます。そうでない場合はお知らせください。

サイモン、ありがとうございます。まったくその通りです。API呼び出しの一部は機能させることができました。親子関係を持つカテゴリを作成できます。説明の詳細を追加したり、その他のカテゴリ関連の設定を機能させたりすることができないだけです。

ローカルフォーラムのカテゴリ設定をコマンドラインから更新しようとしました。これは機能します。

❯ curl -X PUT "http://localhost:4200/categories/10.json" \
      -H "Api-Key: $api_key" \
      -H "Api-Username: system" \
      -H "Content-Type: multipart/form-data;" \
      -F "show_subcategory_list=true" \
      -F "subcategory_list_style='boxes'" \
      -F "allow_badges=false"

機能しない場合は、True の代わりに \"true\" を試してみてください。

それは予想通りだと思います。説明を追加するには、カテゴリの「about」トピックを編集する必要があります。残念ながら、「about」トピックのURLはカテゴリURL(例:http://localhost:4200/categories/10.json)へのリクエストからは返されないと思います。サイトの categories/json URLからは取得できます。カテゴリの「about」トピックのURLが含まれるフィールドは topic_url と呼ばれます。例:\"topic_url\":\"/t/about-the-general-category/3\"

したがって、私が見ていない簡単な方法がない限り、/categories.json へのリクエストを行い、関心のあるカテゴリの topic_url を取得し、そのトピックの最初の投稿を編集するAPIリクエストを行う必要があります。