Я использую API-запрос к Discourse для создания категории, но в рамках того же процесса хотел бы добавить текст или ссылку и т.д. в описание категории (или это description_text, как я пытаюсь понять свойства и различия).
Обратите также внимание, что к этому может подключаться «робот», поэтому лучший способ…
создать категорию (работает)
обновить категорию или, скорее, добавить ссылку, но в category.description или category.description_text?
Однако в обновлении нет свойств, кроме name, color, text_color. Есть ли другие свойства, которые я могу отправить? Например, description или, возможно, description_text (и какие именно)?
Моя единственная цель — добавить ссылку-слаг на сайт, связанный с создаваемой категорией… или просто добавить в конец описания категории Discourse: “[ссылка][https://example.projectxxx”.
Хотя в документации перечислены только эти 3 свойства, большинство свойств, упомянутых в объекте ответа, можно задать при вызове создания. Я обнаружил это, когда мне нужно было скриптом создать большое количество категорий с одинаковыми настройками, за исключением имени и славов.
Единственное свойство, которое мне нужно было установить, и с которым у меня постоянно возникали проблемы, — это права доступа.
Да, я заметил, что разрешённые свойства не соответствуют тем, что указаны в документации API.
Однако, чтобы установить «описание» категории (что очень запутывает, так как описание категории вовсе не то, что отображается), обратите внимание: под названием категории находится HTML-элемент «cooked», который пуст. Как его заполнить?
Насколько я понял, нужно создать пост в разделе «О категории --название категории–…», и он должен быть первым в этой категории. Но, думаю, есть и другие критерии, например, содержимое элемента «cooked» или тот факт, что там первым публикует бот.
Я пробовал менять даты created_at/updated_at, чтобы мой пост появился выше, и чтобы категория взяла это описание, но безрезультатно. Должно быть что-то, чего я не понимаю в элементе «cooked» и/или описании категории. Очень запутанно, и я не нашёл никакой документации, но буду искать дальше. Если у кого-то есть идеи, что можно попробовать, пожалуйста, дайте знать.
Привет, возвращаюсь к этой старой теме..
Есть ли способ понять, в чём разница между description_text и description?
Я имею в виду, кроме того, чтобы выяснить это методом проб и ошибок
может, @alank уже разобрался!
Спасибо!
Если это не задокументировано в другом месте, поиск по файлам спецификаций в репозитории Discourse с базовым пониманием того, как работают языки программирования, даст ответ на подобные вопросы.
В данном случае следующие строки в спецификации категории показывают, что description_text выводится из description и становится доступным сразу после установки description.
Это говорит о том, что description — это исходная строка описания, и при её установке она обрабатывается и присваивается переменной description_text. Либо description_text вычисляется при обращении к нему, но я сомневаюсь в этом. В любом случае, устанавливать нужно именно description.
Спасибо, Саймон, теперь разница между обоими параметрами ясна.
Однако я только что проверил, и ни один из этих двух параметров фактически не установлен в описании категории (или в сообщении «О категории»). Таким образом, проблема, описанная автором оригинального сообщения, остаётся.
Дополнение: Я вижу в файле categories.json, что эти параметры описания именно такие, как мне нужно, но каким-то образом я не могу установить их через API!
Если они не задокументированы для полезной нагрузки запроса POST, вы не можете полагаться на возможность устанавливать их таким образом, даже если это случайно сработало.
Я предполагаю, что нужно посмотреть на topic_url в ответе после создания категории, а затем получить одну тему, используя идентификатор из этого URL. Посмотрите на post_stream в ответе, который содержит массив постов; я полагаю, что в нём будет один элемент.
Получите идентификатор этого поста, а затем обновите один пост, чтобы добавить ваше описание. Это должно привести к обновлению описания категории так же, как при редактировании поста в Discourse, с тем же правилом первой строки.
Я как раз собирался написать, что сделал именно это
## создать категорию
ret_cat = client.create_category(name, color=color, **kwargs)
## получить ID первого сообщения
cat_id = ret_cat["category"]["id"]
print("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"], "настройка")