← Back to skills
extension
Category: Development & EngineeringAPI key requirement unconfirmed

利用MD更新在线页面内容

Use when writing the two Markdown files that drive the ModelScope Studio 创空间「鹈鹕2号 Silicon智能news流」platform — news 稿件 (news/*.md) and 上传入口链接 (link/*.md) — or when 识别创空间文档/文件页地址 to fill in the link. Covers front matter 字段规范、文件命名与期号、时间标签与 published 写法、批量发布时间陷阱、url 协议白名单、link/ 多份配置取最新。触发词:写新闻稿、news MD、link MD、发布新闻、加一期、上传入口、banner 链接、创空间地址、文件页地址。

personAuthor: montherlandhubModelScope

创空间新闻发布台 · MD 写作规范

这个平台只吃两种 Markdown,放在两个互不相通的目录里:

| 目录 | 内容 | 一个文件 | 多份时 | |---|---|---|---| | ms-studio-news\news\ | 新闻稿件 | = 一条新闻 | 全部展示,按时间倒序 | | ms-studio-news\link\ | 上传入口链接配置 | = 一份配置 | 最新的那份生效 |

本文只讲怎么写和写到哪。上传、部署、刷新不在此范围。


1. 写之前:先认位置

项目根目录(绝对路径)

C:\Users\2300G\Downloads\ms-studio-news

两个 MD 各自该写进哪个文件夹(绝对路径)

| 写什么 | 放到哪 | 完整示例 | |---|---|---| | 新闻稿件 | C:\Users\2300G\Downloads\ms-studio-news\news\ | C:\Users\2300G\Downloads\ms-studio-news\news\2026-09-30-十月第4周.md | | 上传入口链接 | C:\Users\2300G\Downloads\ms-studio-news\link\ | C:\Users\2300G\Downloads\ms-studio-news\link\2026-10-08-入口.md |

新建文件时直接用上面的绝对路径,不要依赖当前工作目录。

项目根目录长这样(news/ 和 link/ 之外的都不用碰):

C:\Users\2300G\Downloads\ms-studio-news\
├─ news\          ← 新闻稿件写这里
│  ├─ .gitkeep
│  └─ 2026-09-30-十月第4周.md
├─ link\          ← 链接配置写这里
│  └─ 入口.md
├─ app.py
├─ news_store.py
├─ git_sync.py
├─ selftest.py
├─ requirements.txt      ← 留空,只有注释
├─ ms_deploy.json
├─ README.md
├─ .gitignore
└─ .opencode\skills\ms-studio-news\SKILL.md   ← 本文件
  • 两个目录不能放对方的文件。link/ 里的稿子不会变成新闻,news/ 里的也不会变成横幅。
  • 文件放错目录不会被自动纠正,只会静默不生效。
  • 两个目录的初始占位文件 news/.gitkeep 和 link/入口.md 别删。
  • 应用运行时会写 .runtime/ 和 __pycache__/,那是它自己的,别往里塞稿件。

2. 新闻稿件 · news/*.md

2.1 一个文件就是一条新闻

不支持在一个文件里写多期。 写了 ## 第一期 ## 第二期,只产出一条新闻, 标题取 front matter 的 title,所有分节内容堆进同一条正文。

要发多期就写多个文件。

2.2 文件名必须带期号

✅ 2026-09-30-十月第4周.md
✅ 2026-09-30-十月第4周-终稿.md
❌ 简报.md          ← 极易撞上旧稿

撞名的后果平台来处理,程序拦不住——同名会被覆盖或改名。所以期号是唯一可靠的防撞手段。 2026-09-30-十月第4周.md 这种「日期-期号」格式同时还提供了时间排序的兜底。

2.3 模板

---
title: 十月第 4 周技术简报
summary: 一句话摘要,显示在滚动台上。
source: 内部
published: 2026-09-30T14:30:00+08:00
---

## 正文

支持 **粗体**、`行内代码`、列表、引用、代码块、表格、链接。

- 列表项
- 列表项

> 引用行

```bash
some-command --flag value

### 2.4 front matter 字段

| 字段 | 建议 | 缺省行为 |
|---|---|---|
| `title` | **必填** | 取正文首个 Markdown 标题(`## xxx`),再不行取正文首行 |
| `summary` | 建议填 | 取正文首个非标题段落,截到 110 字 |
| `source` | 否 | 不显示 |
| `published` | **见 2.5** | 见 2.5 |

**解析不出标题的文件会被整条丢弃**——标题是硬要求,不要只靠正文里的标题兜底。

值里含 `:` 或以 `-` `#` `|` 开头时,用英文双引号包起来。

### 2.5 时间标签:什么时候必须写 `published`

取值优先级:

1. front matter 的 `published` / `date`
2. 该文件**最后一次 git 提交时间**
3. 文件 mtime(仅非 git 环境兜底)

**规则一:单篇补发可以不写。** 只发一篇时,git 提交时间就是你写完拖进去的时间,准确。

**规则二:一次补发多篇,必须每篇都写 `published`。**

原因是一次上传 = 一个 commit = **多篇共享同一个提交时间**。全部留空的话,
时间标签会一模一样,排序退化成按文件名(拼音序),显示顺序不是你想要的期号倒序。

```markdown
# 补发三期,时间按实际发布时刻依次往后写
2026-09-30-十月第4周.md   published: 2026-09-30T14:30:00+08:00
2026-09-30-十月第3周.md   published: 2026-09-30T11:00:00+08:00
2026-09-30-十月第2周.md   published: 2026-09-30T09:00:00+08:00

为什么不用文件 mtime:git 检出时会把 mtime 重置成拉取时刻, 用 mtime 的话所有稿件的时间标签会齐刷刷变成「拉取的那一刻」。

一旦写了 published 就不再变。 重复写同一份稿子不会改动它原有的时间。

2.6 正文渲染能力

支持:##–###### 标题、**粗体**、*斜体*、`行内代码`、代码块、 列表(- * +)、> 引用、--- 分隔线、表格、链接(自动加 rel="noopener")。

正文里的标题会自动降 2 级(### 渲染成 <h5>),因为条目标题已经单独显示了, 不降级会重复。

所有文本先转义再渲染,只放行上面这些标签——不会把稿子里的 <script> 当 HTML 执行。

2.7 会被整条丢弃的情况

| 情况 | 原因 | |---|---| | 非 UTF-8 二进制、PNG 等 | 严格解码失败 | | 含 NUL 或控制字符 | 判定为非文本 | | 解析不出标题 | 见 2.4 |

2.8 显示位置

按 published 倒序后,前 NEWS_LATEST_N 条(默认 8)进「最新一期」自动滚动, 其余全部进「历史存档」。每篇都保留,不会被后来的覆盖或顶掉。


3. 上传入口链接 · link/*.md

3.1 模板

---
label: 上传新一期新闻
url: https://modelscope.cn/studios/<用户名>/<空间名>/files
note: 把 .md 拖进 news/ 目录
---

3.2 字段

| 字段 | 必填 | 说明 | |---|---|---| | url | ✅ | 跳转地址。留空则整条横幅失效 | | label | 否 | 主标题,默认「前往上传新新闻」,最长 40 字 | | note | 否 | 副标题,最长 80 字 | | published | 否 | 不写就用 git 提交时间 |

url 也允许直接写在正文第一行(不带 front matter 时)。

3.3 协议白名单

只有 http:// 和 https:// 通过。javascript:、data:、file: 一律拒掉。

写错协议不会静默生效,日志里会记下是哪个文件被拒、为什么。

3.4 多份配置:最新的生效

link/ 下可以有任意多个 .md,挑 published 最大的那份(时间相同按文件名), 其余原样保留当历史,不会被删。

换链接就新建一份,不必改旧的。文件名带日期更清楚:

link/2026-09-30-入口.md
link/2026-10-08-入口.md     ← 这份生效

3.5 清空

url 留空即可。没有有效 url 时横幅变成灰条 + 鹈鹕去饱和,明确不可点, 不会指向任何地方。


4. 识别创空间文档地址

给 url 填地址时用。三种拿法:

① 从浏览器地址栏读(最可靠)

打开创空间 → 点顶部「文件」标签页 → 复制地址栏完整 URL。

以你浏览器里看到的为准。 不同版本平台的路径不一样,不要照抄本文档里的示例。

② 空间主页与 host 直达的区别

| 形态 | 示例 | 能否作跳转目标 | |---|---|---| | Studio 路径 | https://modelscope.cn/studios/<用户名>/<空间名> | ❌ 社区页是 iframe 套壳 | | host 直达 | https://<用户名>-<空间名>.ms.show | ✅ 应用本体 |

owner/name 拼成 owner-name 得到 host 地址,大写会转小写。

③ 从 git remote 推导

容器里 git remote get-url origin 的值:

https://www.modelscope.cn/studios/<用户名>/<空间名>.git

去掉结尾 .git 得空间主页。

程序不会自动把这个地址填进横幅(默认留空,不猜),它只作为你手填时的参考。

挑地址的原则

横幅的用途是「一键跳去上传」,所以直接指向文件页(方法 ①)最省事。 带查询参数或 hash 就原样照抄,不要自己拼路径。


5. 两条硬约束

新闻只增不减。 应用从不改写 news/ 里的任何文件;提交前会检查暂存区, 发现任何删除或重命名就放弃提交。所以历史稿件不会被覆盖、不会被清理。

标题撞车要靠文件名避免。 页脚会检测标题重复并红字告警,但那是事后提醒。 真正的预防手段是 2.2 的期号命名。