Markdown, BBCode ed Emoji non vengono visualizzati nel post dell'API

Sto utilizzando l’API di Discourse per aggiornare un post tramite PUT; gli aggiornamenti vengono apportati, ma vengono analizzati solo i tag HTML accettati. Markdown, BBCode ed emoji non vengono renderizzati correttamente. Sto passando la richiesta PUT con un content type di application/json perché è effettivamente un payload JSON ed è l’unico content type che sembra essere accettato per la richiesta PUT, nonostante la documentazione dica che era una delle tre opzioni.

Qualcuno ha idea del perché il motore di rendering non analizza le cose quando gli aggiornamenti vengono apportati tramite API?

1 Mi Piace

Controllerei i log e vedrei anche cosa è finito nel campo markdown grezzo.

3 Mi Piace

Non vedo errori nei log e il payload grezzo è esattamente quello che sto specificando nella richiesta cURL che esegue la PUT. Quando recupero la vista JSON dell’argomento, vedo questo:

	<p><img src="https://global.discourse-cdn.com/standard10/uploads/wysterialane/original/1X/284fb6069edededf16b0830d468eaf03bc261616.webp" alt="mother of god shades GIF" data-base62-sha1="5KBSuBIpIj3xlACzeZINBKw7wEu" width="262" height="200" class="animated"></p><br>Perché non funziona? :face_with_symbols_over_mouth: <br>

La gif al suo interno era qualcosa che ho inserito nell’OP e il motore di rendering l’ha tradotta in HTML e tutto va bene. Quando aggiungo il pezzo <br>Perché non funziona? :face_with_symbols_over_mouth: <br> tramite l’API, il testo grezzo viene pubblicato ma il motore di rendering non fa nulla. È un comportamento previsto? Immagino che una soluzione alternativa sia che il mio servizio formuli il payload HTML completo e lo passi, il che è un po’ schifoso.

Vale la pena notare anche che ho un servizio separato che pubblica su un thread di chat live tramite webhook in entrata e le emoji vengono visualizzate correttamente nel riquadro della chat. Questo sembra essere specifico dell’API dei post.

Emoji e HTML

Penso che il problema che stai riscontrando con gli shortcode delle emoji racchiusi in tag HTML sia il comportamento previsto. Può essere riprodotto in un post creato all’interno dell’editor di post di Discourse. Ad esempio, :face_with_symbols_over_mouth: verrà renderizzato come :face_with_symbols_over_mouth: all’interno di questo paragrafo.

Se utilizzo i tag p per creare un paragrafo invece di fare affidamento sul motore markdown per farlo, lo shortcode non verrà renderizzato. Ad esempio:

<p>Questa frase contiene uno shortcode emoji :face_with_symbols_over_mouth:</p>

Questa frase contiene uno shortcode emoji :face_with_symbols_over_mouth:

Markdown

Il problema con la pubblicazione di markdown tramite API sembra risolvibile, ma potrebbe essere complicato da gestire. Utilizzando curl dal terminale, qualcosa di simile dovrebbe funzionare:

m="### questo è un titolo
                                                                                                                                                           
Questo è un paragrafo molto breve con un po' di _enfasi_ su una parola.

Questo è un altro paragrafo con un emoji :slight_smile:

- questo
- è
- un
- elenco
- non ordinato

Seguito da un altro paragrafo.

1) e
2) un
3) elenco
4) ordinato"

curl -X POST "http://localhost:4200/posts.json" -H "Api-Key: $api_key" -H "Api-Username: simon" -F "title=Markdown test one" -F "category=6" -F "skip_validations=true" -F "raw=$m"

Il parametro skip_validations nella richiesta precedente è presente solo per evitare errori come “corpo troppo corto” o “titolo duplicato” durante i test. Ignora molte impostazioni del sito (lunghezza minima del post, entropia minima del corpo, lunghezza minima del titolo dell’argomento, ecc.)

Non sono sicuro del problema con BBCode. I tag BBCode che stai cercando di renderizzare funzionano quando vengono aggiunti all’editor di post del tuo sito Discourse?

1 Mi Piace