Ich verwende die Discourse-API, um einen Beitrag über PUT zu aktualisieren. Die Aktualisierungen werden vorgenommen, aber nur akzeptierte HTML-Tags werden analysiert. Markdown, BBCode und Emojis werden nicht korrekt gerendert. Ich sende die PUT-Anfrage mit einem Content-Type von application/json, da es sich tatsächlich um eine JSON-Nutzlast handelt und der einzige Content-Type zu sein scheint, der für die PUT-Anfrage akzeptiert wird, obwohl die Dokumentation besagt, dass es eine von drei Optionen war.
Hat jemand eine Ahnung, warum die Rendering-Engine Dinge nicht analysiert, wenn Aktualisierungen über die API vorgenommen werden?
Ich sehe keine Fehler in den Protokollen und die Rohdaten sind exakt das, was ich in der cURL-Anfrage angebe, die das PUT durchführt. Wenn ich die JSON-Ansicht des Themas abrufe, sehe ich Folgendes:
`
<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>Warum funktioniert das nicht? :face_with_symbols_over_mouth: <br>`
Das GIF darin war etwas, das ich in die OP eingefügt habe, und die Rendering-Engine hat es in HTML übersetzt und alles ist in Ordnung. Wenn ich den <br>Warum funktioniert das nicht? :face_with_symbols_over_mouth: <br>-Teil über die API hinzufüge, wird der Rohtext gepostet, aber die Rendering-Engine tut nichts damit. Ist das erwartetes Verhalten? Ich schätze, eine Problemumgehung besteht darin, dass mein Dienst die vollständige HTML-Nutzlast formuliert und diese übergibt, was irgendwie schlecht ist.
Es ist auch erwähnenswert, dass ich einen separaten Dienst habe, der über einen eingehenden Webhook in einen Live-Chat-Thread postet und Emojis im Chat-Bereich korrekt gerendert werden. Dies scheint spezifisch für die Posts-API zu sein.
Ich denke, das Problem, auf das Sie mit Emoji-Kurzcodes stoßen, die in HTML-Tags eingeschlossen sind, ist das erwartete Verhalten. Es kann in einem Beitrag reproduziert werden, der im Discourse-Beitragseditor erstellt wurde. Zum Beispiel wird :face_with_symbols_over_mouth: in diesem Absatz als gerendert.
Wenn ich p-Tags verwende, um einen Absatz zu erstellen, anstatt mich auf die Markdown-Engine zu verlassen, wird der Kurzcode nicht gerendert. Zum Beispiel:
<p>Dieser Satz enthält einen Emoji-Kurzcode :face_with_symbols_over_mouth:</p>
Dieser Satz enthält einen Emoji-Kurzcode :face_with_symbols_over_mouth:
Markdown
Das Problem mit dem Posten von Markdown über die API scheint lösbar, aber möglicherweise schwierig zu handhaben zu sein. Mit curl vom Terminal sollte etwas wie das Folgende funktionieren:
m="### Dies ist eine Überschrift
Dies ist ein sehr kurzer Absatz mit einiger _Hervorhebung_ eines Wortes.
Dies ist ein weiterer Absatz mit einem :slight_smile: Emoji
- dies
- ist
- eine
- unsortierte
- Liste
Gefolgt von einem weiteren Absatz.
1) und
2) eine
3) sortierte
4) Liste"
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"
Der Parameter skip_validations in der obigen Anfrage dient nur dazu, Fehler wie “body too short” oder “duplicate title” beim Testen zu vermeiden. Er umgeht eine Reihe von Website-Einstellungen (minimale Beitragslänge, minimale Körperentropie, minimale Themenüberschriftenlänge usw.)
Ich bin mir bezüglich des BBCode-Problems nicht sicher. Funktionieren die BBCode-Tags, die Sie rendern möchten, wenn sie zum Beitragseditor Ihrer Discourse-Website hinzugefügt werden?