Error al publicar un tema

Intenté publicar un tema con la API y falló con este mensaje de error:
{‘action’: ‘create_post’, ‘errors’: [‘Body is too short (minimum is 1 character)’, ‘Body seems unclear, is it a complete sentence?’]}

  • el mensaje a publicar tiene alrededor de 25K, una lista de noticias
    puedo publicarlo manualmente sin error.
    pero cuando lo publico con la API, falla
    el tamaño de publicación predeterminado es 35K (?), ya lo aumenté (en la configuración) para permitir este mensaje más largo.
  • si publico una oración corta con el código a continuación, funciona bien.

cambié body min entropy a 0, tampoco ayudó.

busqué en el foro, no encontré una solución,
alguna idea/sugerencia, gracias…

aquí está el código python

import requests

# Encabezados de autenticación
headers = {
    "Api-Key": '***',
    "Api-Username": 'newsbot',
}

lines = "algunas noticias, alrededor de 25K"

# Datos del tema
topic_data = {
    "title": "últimas noticias",
    "raw": lines,
    "category": 28,
}

# Enviar una solicitud POST para crear el tema
response = requests.post('https://www.mydomain.com/posts.json', json=topic_data, headers=headers)

# Comprobar si la solicitud fue exitosa
if response.status_code == 200:
    print("¡Tema creado exitosamente!")
    topic_id = response.json().get("id")
    print(f"ID del tema: {topic_id}")
else:
    print(response.json())
    print(f"No se pudo crear el tema. Código de estado: {response.status_code}")

por cierto, el contenido a publicar es una lista de noticias como esta

[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>título de la noticia</b></summary>
contenido de la noticia contenido de la noticia contenido de la noticia contenido de la noticia
contenido de la noticia contenido de la noticia contenido de la noticia contenido de la noticia contenido de la noticia
contenido de la noticia contenido de la noticia contenido de la noticia contenido de la noticia contenido de la noticia
contenido de la noticia contenido de la noticia contenido de la noticia contenido de la noticia contenido
esto es largo para una noticia

[La Fuente de Noticias 2023-10-16T21:16:45Z](https://www.newssource.com/live/anews)

Intenta añadir \"skip_validations\": true a topic_data. (Hay casos en los que true necesita ir entre comillas, pero no creo que sea el caso con Python).

El parámetro skip_validations hará que Discourse omita la realización de validaciones contra la configuración del sitio como min topic title length y body min entropy.

3 Me gusta

gracias @simon

probé

"skip_validations": True

suprimió el error, creó un tema, pero está vacío, hmm…
sospecho que tal vez la sintaxis html en el contenido de mi publicación necesita ser codificada?

1 me gusta

Suposición aleatoria… ¿Quizás establecer Content-Type como application/json?

intentado en la cabecera o en el cuerpo (topic_data), todavía crea una nueva publicación de tema vacía.

Probé tu script de Python (sin especificar el tipo de contenido) en mi instancia y funcionó perfectamente:

1 me gusta

Tengo que preguntar, pero ¿tu código funciona con un texto corto? ¿Comprobaste que realmente pasas contenido no vacío en la API?

1 me gusta

Sí, funciona para contenido corto, pero no para el largo (adjunto), 29848 caracteres, no debido a la longitud, ¿sospechas que algún carácter especial?

¡Gracias por tu ayuda!
test.zip (12.1 KB)

1 me gusta

gracias @Arkshine
sí, mencionado en las publicaciones anteriores…

1 me gusta

Lo probé con tu texto y funciona:

¿Encerraste tu cadena entre triples comillas (ya sea ''' o \"\"\") para evitar problemas de escape?

¿Cómo cargas el contenido de tu publicación en tu script de Python (supongo que tomas tu contenido de una fuente externa)?

1 me gusta

Lo mismo de mi lado; no tengo ningún problema con tu contenido. Supongo que hay algo mal en cómo recuperas/cargas los datos. :thinking:

1 me gusta

hmm… gracias por intentarlo… interesante…
Cargué el contenido de las noticias de un archivo así…

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

obtuvo el contenido del archivo correctamente, hmm…

¿Intentaste pasar encoding="utf8" en open()? Eso podría ayudar.

2 Me gusta

Sí, algo no va bien al cargar el contenido del archivo… gracias… falsa alarma… :slight_smile:

1 me gusta

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