360 Secure SkillHub
360 安全技能中心

apple-notes-writer

通过 Python 脚本调用 AppleScript,将 HTML 或 Markdown 转成 Apple 备忘录支持的格式,支持创建/更新笔记、指定或创建文件夹、读取与列出笔记,并处理特殊字符;仅限 macOS 和已安装 Apple Notes.app 的环境。

johnmuin
johnmuin
热度 43.22
最近更新 2026-05-18 11:26:04
分类:知识依赖:代码执行 / 读写文件应用场景:笔记整理 / 文件转换 / 工作流 / 会议纪要

安装技能

复制下面的话术发给你的 Agent,它会通过 secure-skills 检索并安装该技能。

执行命令安装此 skill: npx secure-skills-cli add apple-notes-writer
Metadata
name
apple-notes-writer
description
完美格式写入Apple备忘录。支持HTML格式、Markdown转换、多文件夹管理、自动转义特殊字符。

Apple Notes Writer

将内容以完美格式写入Apple备忘录(macOS only)。

功能特性

  • ✅ HTML格式支持 - 标题、列表、粗体、斜体等丰富格式
  • ✅ Markdown转换 - 自动将Markdown转为Apple Notes支持的HTML
  • ✅ 特殊字符转义 - 自动处理引号、反斜杠等棘手字符
  • ✅ 文件夹管理 - 支持创建文件夹、指定目标文件夹
  • ✅ 更新模式 - 可选择更新同名笔记或创建新笔记

使用方法

方式一:直接调用Python脚本

# 写入HTML格式内容
python scripts/apple_notes.py write \
    --title "我的笔记" \
    --content "<div><h1>标题</h1><p>内容</p></div>"

# 从Markdown文件写入
python scripts/apple_notes.py write \
    --title "Markdown笔记" \
    --file content.md \
    --markdown

# 写入指定文件夹
python scripts/apple_notes.py write \
    --title "工作笔记" \
    --content "<div><p>内容</p></div>" \
    --folder "工作"

# 更新已存在的笔记
python scripts/apple_notes.py write \
    --title "我的笔记" \
    --content "<div><p>新内容</p></div>" \
    --update

# 读取笔记内容
python scripts/apple_notes.py read --title "我的笔记"

# 列出文件夹中的所有笔记
python scripts/apple_notes.py list --folder "工作"

# 创建新文件夹
python scripts/apple_notes.py create-folder --title "新项目"

方式二:在Python代码中使用

from scripts.apple_notes import AppleNotesWriter, markdown_to_html

# 创建写入器
writer = AppleNotesWriter(account="iCloud")

# 写入HTML内容
html_content = """<div>
<h1>会议记录</h1>
<p>时间:2024年3月28日</p>
<ul>
    <li>讨论项目进度</li>
    <li>确定下周计划</li>
</ul>
</div>"""

result = writer.write(
    title="会议记录",
    content=html_content,
    folder="工作",
    update_existing=True
)
print(result)  # SUCCESS: Note created/updated - 会议记录

# Markdown转HTML后写入
markdown_text = """
# 学习笔记

## 重点内容

- **第一点**:非常重要
- *第二点*:次要内容

### 总结
这是总结段落。
"""

html = markdown_to_html(markdown_text)
writer.write(title="学习笔记", content=html)

支持的HTML标签

Apple Notes原生支持以下HTML标签:

标签 效果
<h1> <h2> <h3> 大标题、中标题、小标题
<p> 段落
<br> 换行
<ul> <li> 无序列表(圆点)
<ol> <li> 有序列表(数字)
<b> <strong> 粗体
<i> <em> 斜体
<u> 下划线
<div> 容器(必须包裹内容)

HTML格式规范

✅ 正确示例

<div>
<h1>大标题</h1>
<p>这是一个段落,包含<b>粗体文字</b>和<i>斜体文字</i>。</p>
<ul>
    <li>列表项1</li>
    <li>列表项2</li>
</ul>
</div>

❌ 错误示例

<!-- 错误:没有外层div包裹 -->
<h1>标题</h1>
<p>内容</p>

<!-- 错误:使用不支持的标签 -->
<div>
<code>代码块</code>  <!-- code标签不支持 -->
<img src="...">    <!-- img标签不支持 -->
</div>

<!-- 错误:未闭合的标签 -->
<div>
<p>内容
</div>

Markdown转换规则

使用 markdown_to_html() 函数转换:

Markdown 转换结果
# 标题 <h1>标题</h1>
## 标题 <h2>标题</h2>
### 标题 <h3>标题</h3>
**粗体** <b>粗体</b>
*斜体* <i>斜体</i>
- 列表项 <ul><li>列表项</li></ul>
1. 列表项 <ol><li>列表项</li></ol>
空行 <br>

特殊字符与符号

自动转义的字符

脚本自动处理以下特殊字符:

字符 处理方式
\ 转义为 \\
" 转义为 \"
' 无需转义
\n 转为 <br>
< > HTML转义(Markdown模式)

推荐使用的特殊符号

Apple Notes完美支持以下Unicode符号:

符号 用途 示例
✓ 完成/正确 <li>✓ 已完成</li>
✗ 失败/错误 <li>✗ 失败</li>
⚠️ 警告/注意 <p>⚠️ 重要提醒</p>
☐ 待办复选框 <li>☐ 待办事项</li>
● 列表圆点 (<ul>自动显示)
→ 箭头/流程 <p>步骤1 → 步骤2</p>
📌 标记重点 <p>📌 核心结论</p>
💡 提示/想法 <p>💡 建议</p>

触发词

当用户提到以下内容时,使用此技能:

触发词 场景
"记笔记到备忘录" 创建新笔记
"写入Apple Notes" 创建/更新笔记
"创建备忘录" 创建新笔记
"更新备忘录" 更新现有笔记
"记录到备忘录" 创建新笔记
"保存到Apple备忘录" 创建新笔记
"添加到备忘录" 追加内容
"写入备忘录" 创建新笔记

工作流程

  1. 确认需求 - 了解笔记主题、目标文件夹
  2. 准备内容 - 用HTML格式组织内容,或使用Markdown转换
  3. 转义字符 - 使用内置函数处理特殊字符
  4. 执行写入 - 运行AppleScript创建/更新笔记
  5. 验证结果 - 确认内容正确写入
  6. 反馈用户 - 报告完成情况和笔记位置

高级用法

更新现有笔记

通过笔记ID更新已有笔记:

# 获取笔记ID后更新
note_id = "x-coredata://.../ICNote/p20"

script = f'''
tell application "Notes"
    set targetNote to note id "{note_id}"
    set body of targetNote to "{escaped_content}"
end tell
'''

subprocess.run(['osascript', '-e', script])

验证写入结果

verify_script = f'''
tell application "Notes"
    set targetNote to note id "{note_id}"
    return body of targetNote
end tell
'''
result = subprocess.run(['osascript', '-e', verify_script], 
                     capture_output=True, text=True)
print(result.stdout)  # 打印笔记内容验证

完整示例

示例1:记录会议纪要

from scripts.apple_notes import AppleNotesWriter

writer = AppleNotesWriter()

content = """<div>
<h1>产品评审会议纪要</h1>
<p><b>时间:</b>2024年3月28日 14:00</p>
<p><b>参会人:</b>张三、李四、王五</p>

<h2>讨论事项</h2>
<ul>
    <li>确认Q2产品路线图</li>
    <li>讨论新功能优先级</li>
    <li>确定下周迭代计划</li>
</ul>

<h2>待办事项</h2>
<ul>
    <li><b>张三</b>:完成需求文档(3月30日前)</li>
    <li><b>李四</b>:准备技术方案(4月1日前)</li>
</ul>

<p>---</p>
<p><i>记录时间:2024-03-28 16:30</i></p>
</div>"""

writer.write(
    title="产品评审会议纪要-20240328",
    content=content,
    folder="工作",
    update_existing=True
)

示例2:从Markdown文件批量导入

import os
from scripts.apple_notes import AppleNotesWriter, markdown_to_html

writer = AppleNotesWriter()
notes_dir = "/path/to/notes"

for filename in os.listdir(notes_dir):
    if filename.endswith('.md'):
        with open(os.path.join(notes_dir, filename), 'r') as f:
            markdown_content = f.read()
        
        html_content = markdown_to_html(markdown_content)
        title = filename.replace('.md', '')
        
        writer.write(
            title=title,
            content=html_content,
            folder="导入的笔记"
        )
        print(f"已导入: {title}")

注意事项

  1. 仅支持macOS - 依赖AppleScript,Windows/Linux不可用
  2. iCloud账户 - 默认使用iCloud账户,可修改account参数
  3. 文件夹必须存在 - 写入前确保目标文件夹已创建
  4. HTML标签限制 - 不支持<code>、<img>、<table>等复杂标签
  5. 内容长度限制 - 单条笔记建议不超过10MB

故障排查

问题:笔记创建成功但格式错乱

原因:HTML标签未闭合或不支持 解决:检查所有标签是否正确闭合,只使用支持的标签

问题:特殊字符显示异常

原因:引号或反斜杠未正确转义 解决:使用脚本内置的转义函数,不要手动转义

问题:找不到文件夹

原因:文件夹不存在或名称错误 解决:先用create-folder创建文件夹,或检查文件夹名称

问题:AppleScript执行失败

原因:权限问题或Apple Notes未运行 解决:确保Apple Notes已安装并至少运行过一次,检查自动化权限

依赖

  • macOS 10.14+
  • Python 3.7+
  • Apple Notes.app

许可证

MIT License