Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

通过 API 创建文档。编辑器的格式有点问题 #4936

Closed
LetTTGACO opened this issue Nov 28, 2023 · 18 comments
Closed

通过 API 创建文档。编辑器的格式有点问题 #4936

LetTTGACO opened this issue Nov 28, 2023 · 18 comments
Labels
kind/support Categorizes issue or PR as a support question.

Comments

@LetTTGACO
Copy link

系统信息

使用的哪种方式运行?

Docker

在线站点地址

No response

发生了什么?

通过 API 创建的文档/apis/api.console.halo.run/v1alpha1/posts/{name}/content,

{
    "snapshotName": "feb8d0bb-4669-4806-8b8d-864fbf8bd678",
    "raw": "Markdown",
    "content":"<h1>Markdown</h1>\n",
    "rawType": "markdown"
}

"rawType"设置为"markdown"貌似不起作用,在访问后台编辑器文档时,并没有格式化为 markdown,实际上好像还是以 HTML 格式渲染的,所以显示的比较乱
如果我将content和raw都保持为一致的 html 格式,编辑器中才会显示的比较正常。
我不明白将"rawType"设置为"markdown"的作用是什么。
根据社区的插件示例,他也是设置为 markdown,但是我实际测试这个字段并没什么用
image

相关日志输出

No response

附加信息

No response

@LetTTGACO
Copy link
Author

社区插件:obsidian-halo
vscode-extension-halo
都是设置为 markdown,但我这么设置没什么用

@ruibaby
Copy link
Member

ruibaby commented Nov 28, 2023

Halo 的默认编辑器是富文本编辑器,rawType 为 html,rawType 的意义在于让 Halo 知道文章应该用什么源格式的编辑器进行编辑。

Halo 本身没有自带 Markdown 编辑器,需要用户自行安装,所有的编辑器插件可以在 https://www.halo.run/store/apps?type=PLUGIN 中找到。

此外,在 rawType 设置为 markdown 且系统中并没有 markdown 类型的编辑器时,进入文章编辑应该会给出提示:

image

所以你这边还能正常打开编辑页面似乎不太正常,如果我遗漏了什么,请指正。

@LetTTGACO
Copy link
Author

我这边没任何警告提示,且能正常编辑文档,我也没安装 markdown 编辑器。

@ruibaby
Copy link
Member

ruibaby commented Nov 29, 2023

我这边没任何警告提示,且能正常编辑文档,我也没安装 markdown 编辑器。

我这边没能复现成功,使用了 VSCode 插件发布文章,然后系统也没有 Markdown 编辑器,这个时候并不会使用默认编辑器。

我建议先安装一个 Markdown 编辑器,看看能否正常选择到这个编辑器。

@LetTTGACO
Copy link
Author

image
我这边稳定复现,而且我怎么才能上传为 markdown 时,默认用 markdown 编辑器打开,进入文章之后,切换不了编辑器了,按钮是灰色的

@ruibaby
Copy link
Member

ruibaby commented Nov 29, 2023

可以提供一下 post 的数据。

@LetTTGACO
Copy link
Author

{"contentType":"json","dataType":"json","headers":{"Authorization":"Bearer pat_eyJraWQiOiJoXDAWDAWDAdDwbGF0ZS1tYW5hZ2UtYXR0YWNobWVudHMiLCJyb2xlLXRlbXBsYXRlLXZpZXctYXR0YWNobWVudHMiLCJyb2xlLXRlbXBsYXRlLW1hbmFnZS1jb25maWdtYXBzIiwicm9sZS10ZW1wbGF0ZS12aWV3LWNvbmZpZ21hcHMiLCJyb2xlLXRlbXBsYXRlLW1hbmFnZS1tZW51cyIsInJvbGUtdGVtcGxhdGUtdmlldy1tZW51cyIsInJvbGUtdGVtcGxhdGUtbWFuYWdlLXBvc3RzIiwicm9sZS10ZW1wbGF0ZS12aWV3LXBvc3RzIiwicm9sZS10ZW1wbGF0ZS1tYW5hZ2Utc25hcHNob3RzIiwicm9sZS10ZW1wbGF0ZS1tYW5hZ2UtdGFncyIsInJvbGUtdGVtcGxhdGUtbWFuYWdlLWNhdGVnb3JpZXMiXSwicGF0X25hbWUiOiJwYXQtMTg3NC1ycXZwRCIsImlzcyI6Imh0dHA6Ly9sb2NhbGhvc3Q6ODA5MC8iLCJpYXQiOjE3MDExNTcyNjUsImp0aSI6ImU5ZjI1YWVhLTY1OGYtYTU1My0xNWIzLTc5MTk0NjQzYWY0YSJ9.eeEevblXiAI8T04Lu53RPnNNDEQctHGbMtxbViumLKLLZmgnc_hsHJdialpT_gpD_H4AfaAgzmT7-1CVlW-canrBl9HxnFpOBe0pdagpNwov2Eb7gs5OWush1XDSc53kAAqwlA5mH_TK4AnMKa768WEJ-Jw1TFgZD__43AA_MdbTOe0eo501r5h8W9_uDSU93gCoetVFXC0ylagNJ9-09noGkhAgudgaEJX18_xOBX18rUv0K9rUjf0idFgMcPFCqTG7Tf17EX2FR1OgADUSrZsmiuOE-ILLb-VD5GbT2hJFfZKHZ2-sIiyfdOZOcJz5xjxT3mHyPp0a4BiEje5o8dYvpI61wnmrqye4KphOMZazGoP0D3jKCV97YGbfI5PL02iwWNM6A-4hAVziqeFUIIaKhdDp-N3r4DPMzOHnhZpJ-xEBzwehAJJTkIYHmkttjCegcwYyFqlFPoN22xqNcuVy6HBjQBBHTc4teRgaEWHBcbioRuGJnl3q3GWz0aBLRaXp3FUxgnNiEkIF39N7740aYt4q6MecmxOUtqOlRGxI2Od2dz3-F-IJQBKUrEslTeItuKciG_OMEla3DSd1xCyf0xTsmYYTcai3YfNAaVPGEcBYIA0p1jXAKnYVBfXVl_0EswIPQTpk5hLhbCoXH4pftNqzwCOCHQ0d8k5-Ixc"},"gzip":true,"timeout":60000,"method":"POST","data":{"post":{"spec":{"title":"Notion示例文章","slug":"f0cf6faf-83c7-4ca1-8b3f-6a232eef4a3b","template":"","cover":"https://www.notion.so/images/page-cover/met_camille_pissarro_1896.jpg","deleted":false,"publish":true,"pinned":false,"allowComment":true,"visible":"PUBLIC","priority":0,"excerpt":{"autoGenerate":true,"raw":""},"categories":["category-mnzhy"],"tags":["tag-jMAkt"],"htmlMetas":[]},"apiVersion":"content.halo.run/v1alpha1","kind":"Post","metadata":{"name":"f0cf6faf-83c7-4ca1-8b3f-6a232eef4a3b","annotations":{"content.halo.run/preferred-editor":"default"}}},"content":{"raw":"\n# Notion-Markdown\n\n\n[Notion示例文章源地址](https://1874.notion.site/Notion-0658ee89cadf4d0e9b6adfbb1d953c70)\n\n\n## 行内样式\n\n\n- **加粗**\n\n\n_斜体_\n\n\n<u>下划线</u>\n\n\n删除线\n\n\n行内代码 `const a = 123`\n\n\n行内公式,在Vitepress会报错,不做演示\n\n\n红色的文字\n\n\n蓝色的文字背景\n\n\n绿色的块背景\n\n\n## Basic block(基本块)\n\n\n## Notion示例文章的子页面\n\nNotion示例文章的子页面\n\n\n| 表格标题 | 备注              |\n| ---- | --------------- |\n| 测试1  | 啊大大             |\n| 测试2  | `const a = 123` |\n\n- 无序列表\n1. 有序列表:事物按规律变化,也有一种不可避免的性质.这种性质就叫做**必然性**\n\t1. 事物的必然性,是事物本身的性质(我们反对宿命论的是其认为这一切是受神明的支配,而不是反对事物发展中存在的不可避免的性质的事实)\n\t\t1. 第三级别列表\n\t\t2. 第三级别列表\n\t2. 其决定于它自己本身发展的情况和周围的条件\n\t\t1. 第三级别列表\n\t\t\t1. 第三级别列表\n<details>\n<summary>折叠块:点击展开【一级】</summary>\n<details>\n<summary>点击展开【二级】</summary>\n<details>\n<summary>点击展开【三级】</summary>\n\n内容文本\n\n\n</details>\n\n\n</details>\n\n\n</details>\n\n\n> 引用块\n\n\n---\n\n\n[link_to_page](f478ef37-c82a-41f1-b7a5-9c195b043831)\n\n\n> 👏 标注文本:**Elog 0.4.0-beta.7 发布了!**  \n> 开放式跨平台博客解决方案,随意组合写作平台和部署平台  \n>   \n> 帮助导航👇  \n> ❓ [Elog能干什么](https://elog.1874.cool/notion/introduce)  \n> 🚀 [快速开始](https://elog.1874.cool/notion/start)\n\n\n## Media(媒体)\n\n\n![cover.JPG](https://image.1874.cool/moon/cover.JPG)\n\n\n[bookmark](https://elog.1874.cool)\n\n\n[46_1677164223.mp4](https://prod-files-secure.s3.us-west-2.amazonaws.com/13a508a2-de5b-47bc-b05f-367d31c13e36/5999649b-7796-46a0-abd4-2e17b7b607ab/46_1677164223.mp4?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20231129%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20231129T044401Z&X-Amz-Expires=3600&X-Amz-Signature=5d8893fb139e61248dcfaf435eaac7535e9295ef74c949c43f6aa0fcbe7afb47&X-Amz-SignedHeaders=host&x-id=GetObject)\n\n\n```python\npwd='123456'\nprint(f\"password={pwd!r}\")\n\n## output:\n#password='123456'\n```\n\n\n[example.txt](https://prod-files-secure.s3.us-west-2.amazonaws.com/13a508a2-de5b-47bc-b05f-367d31c13e36/753c8245-2aea-45de-8a5a-509c105f6236/example.txt?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20231129%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20231129T044401Z&X-Amz-Expires=3600&X-Amz-Signature=9e671ce5e6d037c1575a3b865d1b659400ed2f9f10fd05034b9a537c7e0d91f1&X-Amz-SignedHeaders=host&x-id=GetObject)\n\n\n## DataBase(数据库)\n\n\n数据库\n\n\n## AI block\n\n\nAPI不支持,会报错`Block type ai_block is not supported via the API.`\n\n\n## Advanced block(高级块)\n\n\n$$\nf\\left(\\left[\\frac{1+\\{x, y\\}}{\\left(\\frac{x}{y}+\\frac{y}{x}\\right)(u+1)}+a\\right]^{3 / 2}\\right)\\tag{行标}\n$$\n\n\nNotion示例文章的同步块\n\n\n# 折叠一级标题\n\n\n\t## 折叠二级标题\n\n\n\t\t折叠内容\n\n\n两列分栏(左)\n\n- [ ] 左侧书写\n\n两列分栏(右)\n\n- [ ] 右侧书写\n\n```mermaid\ngraph LR;\nMermaid思维导图-->思维导图\nMermaid思维导图-->研发\n```\n\n\n@Anonymous \n\n\n[Notion-Markdown](https://www.notion.so/f478ef37c82a41f1b7a59c195b043831) \n\n\n2023-04-26 \n\n\n🚀🔥🐸\n\n\n## Embeds(嵌入)\n\n\n嵌入网页\n\n\n[embed](https://elog.1874.cool)\n\n","content":"<h1>Notion-Markdown</h1>\n<p><a href=\"https://1874.notion.site/Notion-0658ee89cadf4d0e9b6adfbb1d953c70\">Notion示例文章源地址</a></p>\n<h2>行内样式</h2>\n<ul>\n<li><strong>加粗</strong></li>\n</ul>\n<p><em>斜体</em></p>\n<p><u>下划线</u></p>\n<p>删除线</p>\n<p>行内代码 <code>const a = 123</code></p>\n<p>行内公式,在Vitepress会报错,不做演示</p>\n<p>红色的文字</p>\n<p>蓝色的文字背景</p>\n<p>绿色的块背景</p>\n<h2>Basic block(基本块)</h2>\n<h2>Notion示例文章的子页面</h2>\n<p>Notion示例文章的子页面</p>\n<table>\n<thead>\n<tr>\n<th>表格标题</th>\n<th>备注</th>\n</tr>\n</thead>\n<tbody><tr>\n<td>测试1</td>\n<td>啊大大</td>\n</tr>\n<tr>\n<td>测试2</td>\n<td><code>const a = 123</code></td>\n</tr>\n</tbody></table>\n<ul>\n<li>无序列表</li>\n</ul>\n<ol>\n<li>有序列表:事物按规律变化,也有一种不可避免的性质.这种性质就叫做<strong>必然性</strong><ol>\n<li>事物的必然性,是事物本身的性质(我们反对宿命论的是其认为这一切是受神明的支配,而不是反对事物发展中存在的不可避免的性质的事实)<ol>\n<li>第三级别列表</li>\n<li>第三级别列表</li>\n</ol>\n</li>\n<li>其决定于它自己本身发展的情况和周围的条件<ol>\n<li>第三级别列表<ol>\n<li>第三级别列表</li>\n</ol>\n</li>\n</ol>\n</li>\n</ol>\n</li>\n</ol>\n<details>\n<summary>折叠块:点击展开【一级】</summary>\n<details>\n<summary>点击展开【二级】</summary>\n<details>\n<summary>点击展开【三级】</summary>\n\n<p>内容文本</p>\n</details>\n\n\n</details>\n\n\n</details>\n\n\n<blockquote>\n<p>引用块</p>\n</blockquote>\n<hr>\n<p><a href=\"f478ef37-c82a-41f1-b7a5-9c195b043831\">link_to_page</a></p>\n<blockquote>\n<p>👏 标注文本:<strong>Elog 0.4.0-beta.7 发布了!</strong><br>开放式跨平台博客解决方案,随意组合写作平台和部署平台  </p>\n<p>帮助导航👇<br>❓ <a href=\"https://elog.1874.cool/notion/introduce\">Elog能干什么</a><br>🚀 <a href=\"https://elog.1874.cool/notion/start\">快速开始</a></p>\n</blockquote>\n<h2>Media(媒体)</h2>\n<p><img src=\"https://image.1874.cool/moon/cover.JPG\" alt=\"cover.JPG\"></p>\n<p><a href=\"https://elog.1874.cool\">bookmark</a></p>\n<p><a href=\"https://prod-files-secure.s3.us-west-2.amazonaws.com/13a508a2-de5b-47bc-b05f-367d31c13e36/5999649b-7796-46a0-abd4-2e17b7b607ab/46_1677164223.mp4?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20231129%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20231129T044401Z&X-Amz-Expires=3600&X-Amz-Signature=5d8893fb139e61248dcfaf435eaac7535e9295ef74c949c43f6aa0fcbe7afb47&X-Amz-SignedHeaders=host&x-id=GetObject\">46_1677164223.mp4</a></p>\n<pre><code class=\"hljs language-python\">pwd=<span class=\"hljs-string\">&#x27;123456&#x27;</span>\n<span class=\"hljs-built_in\">print</span>(<span class=\"hljs-string\">f&quot;password=<span class=\"hljs-subst\">{pwd!r}</span>&quot;</span>)\n\n<span class=\"hljs-comment\">## output:</span>\n<span class=\"hljs-comment\">#password=&#x27;123456&#x27;</span>\n</code></pre><p><a href=\"https://prod-files-secure.s3.us-west-2.amazonaws.com/13a508a2-de5b-47bc-b05f-367d31c13e36/753c8245-2aea-45de-8a5a-509c105f6236/example.txt?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Credential=AKIAT73L2G45HZZMZUHI%2F20231129%2Fus-west-2%2Fs3%2Faws4_request&X-Amz-Date=20231129T044401Z&X-Amz-Expires=3600&X-Amz-Signature=9e671ce5e6d037c1575a3b865d1b659400ed2f9f10fd05034b9a537c7e0d91f1&X-Amz-SignedHeaders=host&x-id=GetObject\">example.txt</a></p>\n<h2>DataBase(数据库)</h2>\n<p>数据库</p>\n<h2>AI block</h2>\n<p>API不支持,会报错<code>Block type ai_block is not supported via the API.</code></p>\n<h2>Advanced block(高级块)</h2>\n<p>$$<br>f\\left(\\left[\\frac{1+{x, y}}{\\left(\\frac{x}{y}+\\frac{y}{x}\\right)(u+1)}+a\\right]^{3 / 2}\\right)\\tag{行标}<br>$$</p>\n<p>Notion示例文章的同步块</p>\n<h1>折叠一级标题</h1>\n<pre><code>## 折叠二级标题\n\n\n    折叠内容\n</code></pre><p>两列分栏(左)</p>\n<ul>\n<li><input disabled=\"\" type=\"checkbox\"> 左侧书写</li>\n</ul>\n<p>两列分栏(右)</p>\n<ul>\n<li><input disabled=\"\" type=\"checkbox\"> 右侧书写</li>\n</ul>\n<pre><code class=\"hljs language-mermaid\">graph LR;\nMermaid思维导图--&gt;思维导图\nMermaid思维导图--&gt;研发\n</code></pre><p>@Anonymous </p>\n<p><a href=\"https://www.notion.so/f478ef37c82a41f1b7a59c195b043831\">Notion-Markdown</a> </p>\n<p>2023-04-26 </p>\n<p>🚀🔥🐸</p>\n<h2>Embeds(嵌入)</h2>\n<p>嵌入网页</p>\n<p><a href=\"https://elog.1874.cool\">embed</a></p>\n","rawType":"markdown"}}}

@LetTTGACO
Copy link
Author

我可能知道了,应该是这里指定的编辑器?
image

@ruibaby
Copy link
Member

ruibaby commented Nov 29, 2023

对,这里的 annotations 是具体的编辑器,因为不同格式也可能有不同的编辑器,所以在用户选择之后会设置一个这样的 annotations,他的优先级最高。如果是通过外部调用 API 创建文章,这个值可以不设置。

@LetTTGACO
Copy link
Author

感谢,可以了,这里能正常显示了,也无法切换到默认编辑器
image

@ruibaby
Copy link
Member

ruibaby commented Nov 29, 2023

不同源格式不能随意切换,目前不支持格式转换。

@LetTTGACO
Copy link
Author

嗯嗯,这个是没问题的。

@LetTTGACO
Copy link
Author

还有个小问题:我在上传完图片附件后,因为我需要将文档中原有的图片路径全部替换掉,所以我需要在上传完就拿到这张图片在 Halo 附件中的路径,看了下只能从metadata.annotations['storage.halo.run/uri']中获取,想问下这个字段storage.halo.run/uri可信吗?会在什么情况下不存在这个路径?
image

在获取附件列表接口中,是存在status.permalink字段来获取路径的,而在上传完返回的信息中没有,这两个字段哪个更可信
image

因为我是想在上传完返回的附件信息中就拿到当前图片的 URL,而不用再查一次列表。

或者说有什么接口可以拿到/upload这个前缀,因为我图片名称是固定的,我也可以自己拼接

@ruibaby
Copy link
Member

ruibaby commented Nov 29, 2023

还有个小问题:我在上传完图片附件后,因为我需要将文档中原有的图片路径全部替换掉,所以我需要在上传完就拿到这张图片在 Halo 附件中的路径,看了下只能从metadata.annotations['storage.halo.run/uri']中获取,想问下这个字段storage.halo.run/uri可信吗?会在什么情况下不存在这个路径?

status.permalink 为准,但因为这个字段是异步算出来的,所以直接调用查询方法可能是拿不到 permalink 的,需要轮询。

此外,不需要使用附件列表的接口,上传接口的返回体应该有 metadata.name,根据这个获取特定的附件即可。

轮询的逻辑可参考:

@LetTTGACO
Copy link
Author

感谢,已解决此问题

@musnows
Copy link

musnows commented Jan 30, 2024

请问API创建文章能指定文章的上传时间(文章发布时间)吗?我看vscode的插件里面有一个publishTime: undefined,,我使用Python将时间转为"%Y-%m-%d %H:%M:%S"格式的字符串传入publishTime字段进行请求,会变成bad requests,删除该字段则可以正常请求。

请问这个字段有效吗?用API上传文章时应该如何指定文章发布时间?

@JohnNiang JohnNiang added the kind/support Categorizes issue or PR as a support question. label Jan 30, 2024
@guqing
Copy link
Member

guqing commented Jan 31, 2024

请问API创建文章能指定文章的上传时间(文章发布时间)吗?我看vscode的插件里面有一个publishTime: undefined,,我使用Python将时间转为"%Y-%m-%d %H:%M:%S"格式的字符串传入publishTime字段进行请求,会变成bad requests,删除该字段则可以正常请求。

请问这个字段有效吗?用API上传文章时应该如何指定文章发布时间?

日期格式不对 参考 "creationTimestamp": "2023-11-28T08:09:39.4255583122"

@musnows
Copy link

musnows commented Jan 31, 2024

请问API创建文章能指定文章的上传时间(文章发布时间)吗?我看vscode的插件里面有一个publishTime: undefined,,我使用Python将时间转为"%Y-%m-%d %H:%M:%S"格式的字符串传入publishTime字段进行请求,会变成bad requests,删除该字段则可以正常请求。
请问这个字段有效吗?用API上传文章时应该如何指定文章发布时间?

日期格式不对 参考 "creationTimestamp": "2023-11-28T08:09:39.4255583122"

感谢大佬提醒。

我参考了posts接口里面传回的文章信息值里面的字段 "publishTime": "2024-01-22T05:12:33.716773059Z",应该使用的是这个格式,九位小数加一个字母Z,现在设置成功了。

image

python格式化代码如下,frontmatter_dict['date']是一个datetime.datetime类型。

microseconds_str = f"{frontmatter_dict['date'].microsecond:0<9}" # 9位,不够的后补0
publish_time = f"{frontmatter_dict['date'].strftime('%Y-%m-%dT%H:%M:%S')}.{microseconds_str}Z"

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
kind/support Categorizes issue or PR as a support question.
Projects
None yet
Development

No branches or pull requests

5 participants