如何通过Python与AppleScript获取Notes App中的话题标签?
解决Notes App格式化话题标签的识别问题
原代码只能匹配未格式化的纯文本标签,对黄色的格式化标签返回空数组,核心原因是:Notes的body属性返回的是纯文本内容,而格式化标签属于富文本元素,系统在提取纯文本时没有保留可匹配的标签文本,或者标签的底层存储形式和纯文本不同。
下面提供两种可靠的解决方法:
方法1:匹配富文本内容
Notes的content属性包含笔记完整的HTML富文本结构,格式化标签会以带样式的HTML元素存在,但依然保留标签的文本内容(比如#work)。修改代码用content替代body即可:
from applescript import AppleScript def get_notes_with_formatted_hashtags(folder, tag): # tag需要带#,比如传入"#work" script = AppleScript('tell application "Notes" to get id of every note in folder "' + folder + '" whose content contains "' + tag + '"') return script.run()
方法2:用原生标签属性筛选(推荐)
如果你的macOS版本在13 Ventura及以上,Notes支持直接通过tags属性管理格式化标签——系统会自动把黄色的格式化标签加入笔记的tags集合。这种方法最准确,不需要处理富文本:
from applescript import AppleScript def get_notes_by_tag(folder, tag): # 这里tag不需要带#,直接传入"work"即可 script = AppleScript('tell application "Notes" to get id of every note in folder "' + folder + '" whose tags contains "' + tag + '"') return script.run()
补充说明
- 原代码用
body contains失效,是因为格式化标签的视觉表现和纯文本一致,但底层存储时带有样式标记,纯文本提取时可能被特殊处理,导致无法匹配。 - 方法2是官方支持的方式,稳定性和准确性都更高,优先推荐使用。
内容的提问来源于stack exchange,提问作者FoundMason
相关产品推荐
相关产品推荐

