Sto utilizzando una richiesta API a Discourse per creare una categoria, ma nello stesso processo vorrei aggiungere testo o un riferimento URL, ecc., alla descrizione della categoria (o è description_text, dato che sto cercando di capire le proprietà o le differenze).
Si noti inoltre che potrebbe esserci un “bot” che aggiunge contenuti, quindi il modo migliore è:
Creare la categoria (funziona)
Aggiornare la categoria o, più precisamente, aggiungere il link, ma a category.description o category.description_text?
Tuttavia, nell’aggiornamento non ci sono proprietà oltre a name, color e text_color. Esistono altre proprietà che posso inviare? Ad esempio description o forse description_text (e quale delle due)?
Tutto ciò che voglio fare è aggiungere un link slug a un sito correlato alla categoria che sto creando… oppure semplicemente aggiungere alla fine della descrizione della categoria di Discourse “[link][https/example.projectxxx”.
Anche se la documentazione elenca solo quelle 3 proprietà, la maggior parte delle proprietà menzionate nell’oggetto di risposta può essere impostata durante la chiamata di creazione. L’ho scoperto quando ho dovuto scriptare la creazione di un gran numero di categorie con le stesse impostazioni, tranne che per nome e slug.
L’unica proprietà che ho dovuto impostare e con cui ho avuto costantemente problemi sono le autorizzazioni.
Sì, ho notato che le proprietà consentite non corrispondono a quelle definite nella documentazione dell’API.
Tuttavia, per impostare la “description” della categoria, il che è molto confuso poiché la descrizione della categoria non è affatto ciò che viene visualizzato: in realtà, sotto il nome della categoria c’è l’elemento HTML “cooked”, che è vuoto. Quindi, come si fa a impostarlo…
Da quanto ho capito, devo creare un post nella sezione “About il nome della categoria…” e deve essere il primo post in quella categoria. Penso però che ci siano altri criteri, come il campo “cooked” o anche il fatto che abbiamo un Bot che pubblica per primo lì.
Ho provato a modificare le date created_at/updated_at per far apparire il mio post sopra, in modo che la categoria lo acquisisse o utilizzasse come descrizione, ma senza successo! Deve esserci qualcosa che non ho capito riguardo al campo “cooked” e/o alla descrizione della categoria. È molto confuso e non ho trovato alcuna documentazione, ma continuerò a cercare. Se qualcuno ha idee su cosa provare, fatemelo sapere.
C’è un modo per capire la differenza tra description_text e description?
Voglio dire, a parte scoprirlo facendo
magari @alank l’ha scoperto nel frattempo!
Grazie!
Se non è documentato altrove, la ricerca nei file spec del repository discourse risponderà a domande come questa con una comprensione di base di come funzionano i linguaggi di programmazione.
In questo caso, le seguenti righe nello spec della categoria mostrano che description_text deriva da description ed è immediatamente disponibile dopo aver impostato description.
Questo mi dice che description è la stringa grezza per la descrizione e, una volta impostata, viene elaborata e assegnata a description_text. Oppure description_text potrebbe essere calcolato quando vi si accede, ma ne dubito, in ogni caso description è quello da impostare.
Grazie Simon, questo chiarisce la differenza tra entrambi i parametri.
Tuttavia, ho appena provato e nessuno di questi due parametri è effettivamente impostato nella descrizione della categoria (o nel post della categoria Informazioni). Quindi il problema dell’OP rimane.
Aggiungo: vedo nel file categories.json che questi parametri di descrizione sono ciò che voglio, ma in qualche modo non riesco a impostarli tramite l’API!
Se non sono documentati per il payload della richiesta POST, non puoi fare affidamento sulla possibilità di impostarli in quel modo, anche se dovesse funzionare.
Sospetto che la cosa da fare sia guardare il topic_url nella risposta dopo aver creato la categoria, quindi ottenere un singolo topic utilizzando l’ID da quell’URL. Guarda il post_stream nella risposta che ha un array di post, immagino che avrà un elemento.
Ottieni l’ID di quel post e quindi aggiorna un singolo post per aggiungere la tua descrizione. Ciò dovrebbe attivare l’aggiornamento della descrizione della categoria allo stesso modo della modifica del post in Discourse, stessa regola della prima riga.
Stavo per pubblicare, è esattamente quello che ho fatto
## crea categoria
ret_cat = client.create_category(name, color = color, **kwargs)
## ottieni il primo id del post
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']
## modifica il primo post
ret_post = client.update_post(first_post_id, cat["about_msg"],"set up")