Не удалось создать тему

Попытка создать тему через API завершилась ошибкой с таким сообщением:
{‘action’: ‘create_post’, ‘errors’: [‘Тело слишком короткое (минимум 1 символ)’, ‘Тело кажется неясным, является ли это полным предложением?’]}

  • Сообщение для публикации содержит около 25 тысяч символов и представляет собой список новостей.
    Вручную опубликовать его можно без ошибок.
    Однако при публикации через API возникает ошибка.
    Размер поста по умолчанию составляет 35 тысяч (?), я уже увеличил его (в настройках), чтобы разрешить такую длинную публикацию.
  • Если отправить короткое предложение с использованием кода ниже, всё работает нормально.

Изменил body min entropy на 0, но это тоже не помогло.

Я искал решение на форуме, но ничего не нашёл.
Есть ли какие-то идеи или предложения? Спасибо…

Вот код на Python:

import requests

# Заголовки аутентификации
headers = {
    "Api-Key": '***',
    "Api-Username": 'newsbot',
}

lines = "некоторые новости, около 25K"

# Данные темы
topic_data = {
    "title":"последние новости",
    "raw": lines,
    "category": 28,  
}

# Отправка POST-запроса для создания темы
response = requests.post('https://www.mydomain.com/posts.json', json=topic_data, headers=headers)

# Проверка успешности запроса
if response.status_code == 200:
    print("Тема успешно создана!")
    topic_id = response.json().get("id")
    print(f"ID темы: {topic_id}")
else:
    print(response.json())
    print(f"Не удалось создать тему. Код состояния: {response.status_code}")

Кстати, содержимое для публикации представляет собой список новостей, например:

[grid]
![](https://static01.nyt.com/images/2023/10/16/multimedia/animage.jpg)
![](https://content.api.news/v3/images/bin/image.jpg)
[/grid]

<details><summary><b>заголовок новости</b></summary>
содержание новости содержание новости содержание новости содержание новости 
содержание новости содержание новости содержание новости содержание новости содержание новости 
содержание новости содержание новости содержание новости содержание новости содержание новости
содержание новости содержание новости содержание новости содержание новости
около такой длины для одной новости

[Новый источник 2023-10-16T21:16:45Z](https://www.newssource.com/live/anews)

Попробуйте добавить "skip_validations": true в topic_data. (В некоторых случаях true нужно заключать в кавычки, но, думаю, в Python это не требуется.)

Параметр skip_validations заставит Discourse пропустить проверки, связанные с настройками сайта, такими как min topic title length и body min entropy.

Спасибо @simon

Попробовал

"skip_validations": True

Это подавило ошибку, тема была создана, но она пустая, хм…
Подозреваю, что, возможно, синтаксис HTML в содержимом моего поста нужно экранировать?

Случайное предположение… Может, установить Content-Type как application/json?

Попробовал в заголовке или теле (topic_data), но всё равно создаётся новый пустой пост в теме.

Я опробовал ваш скрипт на Python (без указания content-type) на своём экземпляре, и он сработал идеально:

Мне нужно задать этот вопрос: работает ли ваш код с коротким текстом? Вы проверяли, что в API действительно передаётся непустое содержимое?

Да, это работает для короткого контента, но не для длинного (прикреплен), 29848 символов. Проблема не в длине, возможно, в каком-то специальном символе?

Спасибо за помощь!
test.zip (12.1 КБ)

Спасибо @Arkshine
Да, упоминалось в постах выше…

Я попробовал с вашим текстом, и всё работает:

Вы заключили свою строку в тройные кавычки (либо ''', либо """), чтобы избежать проблем с экранированием?

Как вы загружаете содержимое поста в свой скрипт на Python (предполагаю, что вы берёте содержимое из внешнего источника)?

У меня тоже всё в порядке; у меня нет проблем с вашим контентом. Думаю, проблема в том, как вы получаете/загружаете данные. :thinking:

Хм… спасибо за попытку… интересно…
Я загрузил содержимое новостей из файла вот так…

with open(sys.argv[1]) as f:
    lines = [line for line in f]
 
print(lines)
print(len(lines))

Содержимое файла загрузилось правильно, хм…

Вы пробовали передать encoding="utf8" в open()? Это может помочь.

Да, что-то не так с загрузкой содержимого файла…
Спасибо… Ложная тревога… :slight_smile: