印象笔记
v1.0.0印象笔记 API 技能,用于管理用户的印象笔记。支持搜索笔记、浏览笔记本、获取笔记内容、新建笔记和追加内容。 当用户提到印象笔记、Evernote、笔记、备忘录、记事、知识库,或者想要查找、阅读、创建、编辑笔记内容时,使用此 技能。 即使用户没有明确说"笔记",只要意图涉及个人文档的存取(如"帮我记一下"、"我之前写过一个关于XX的东西"、"把这段内容保存下来"),也应触发此 技能。
运行时依赖
安装命令
点击复制技能文档
evernote-note
通过印象笔记 API 管理用户个人笔记,支持读取(搜索、列表、获取内容)和写入(新建、追加)。
完整的数据结构和接口参数详见 references/API.md。
设置up 选择认证方式
印象笔记支持两种认证方式,推荐使用开发者令牌(更简单):
方式 适用场景 复杂度 说明 开发者令牌(推荐) 个人使用、测试脚本 ⭐ 简单 直接使用,无需申请,只能访问自己的账户 API Key + OAuth 面向多用户的第三方应用 ⭐⭐⭐ 复杂 需申请,支持多用户和高级功能 方式一:开发者令牌(推荐)
获取印象笔记开发者令牌:
国内版访问:https://应用.yinxiang.com/API/Developer令牌.action 国际版访问:https://www.evernote.com/API/Developer令牌.action 点击"创建 a developer 令牌"生成令牌 复制生成的 令牌(格式类似 S=s1:U=8f219:E=154308dc976:C=14cd8dc9cd8:P=1cd:A=en-dev令牌:V=2:H=1e4d28c7982faf6222ecf55df3a2e84b)
配置环境变量:
# 国内版用户(默认) 导出 EVERNOTE_令牌="your_developer_令牌" 导出 EVERNOTE_HOST="应用.yinxiang.com"
# 国际版用户(如使用的是国际版印象笔记) 导出 EVERNOTE_令牌="your_developer_令牌" 导出 EVERNOTE_HOST="www.evernote.com"
建议将上述 导出 语句写入 ~/.zshrc 或 ~/.bashrc,避免每次重开终端失效。
方式二:API Key + OAuth(可选)
如果需要开发面向多用户的第三方应用,需要:
申请 API Key:
访问 https://dev.yinxiang.com/support/(需登录印象笔记账户) 填写应用信息(名称、描述、权限等) 等待审核(通常 1-5 个工作日) 收到邮件后获取 Consumer Key 和 Consumer Secret
实现 OAuth 流程:
参考 OAuth 认证文档 使用印象笔记 Python SDK 的 OAuth 功能
注意:当前 技能 只支持开发者令牌方式。如需使用 OAuth,需要修改 技能 代码实现完整的 OAuth 流程。
安装 Python 依赖
首次使用前安装 Python 依赖:
pip3 安装 evernote2 oauth2
凭证预检
每次调用 API 前,先确认凭证可用。如果环境变量未设置,停止操作并提示用户按 设置up 步骤配置。
if [ -z "$EVERNOTE_令牌" ]; then echo "缺少印象笔记凭证,请按 设置up 步骤配置环境变量 EVERNOTE_令牌" exit 1 fi
# 检查 Python 依赖 python3 -c "导入 evernote2" 2>/dev/null || { echo "缺少 Python 依赖,请运行: pip3 安装 evernote2 oauth2" exit 1 }
Python 初始化模板
所有操作前都需要初始化 Evernote命令行工具ent:
导入 sys sys.path.insert(0, '/Users/I501579/库/Python/3.9/lib/python/site-packages')
导入 os from evernote2.API.命令行工具ent 导入 Evernote命令行工具ent 导入 evernote2.edam.notestore.ttypes as NoteStoreTypes 导入 evernote2.edam.type.ttypes as Types
# 从环境变量读取配置 developer_令牌 = os.environ.获取('EVERNOTE_令牌') 服务_host = os.environ.获取('EVERNOTE_HOST', '应用.yinxiang.com')
# 连接印象笔记 命令行工具ent = Evernote命令行工具ent(令牌=developer_令牌, 服务_host=服务_host) note_store = 命令行工具ent.获取_note_store()
注意:根据实际 Python 环境调整 sys.path.insert 的路径,可通过 pip3 show evernote2 查看 Location。
辅助函数 导入 re
def enml_to_text(enml): """将 ENML 转换为纯文本""" text = re.sub(r']+>', '', enml) text = re.sub(r'<\?xml[^>]+\?>', '', enml) text = re.sub(r'<[^>]+>', '\n', enml) text = re.sub(r'\n+', '\n', text) return text.strip()
def text_to_enml(text):
"""将纯文本转换为 ENML 格式"""
text = text.replace('&', '&')
text = text.replace('<', '<')
text = text.replace('>', '>')
text = text.replace('\n', '
')
enml = f'''
{text}'''
return enml
接口决策表 用户意图 调用 API 关键参数 搜索/查找笔记 findNotesMetadata() Note过滤器.words 查看笔记本列表 列出Notebooks() - 浏览某笔记本里的笔记 findNotesMetadata() Note过滤器.notebook图形界面d 读取笔记正文 获取NoteContent() note_图形界面d 新建一篇笔记 创建Note() Note.title + Note.content(ENML) 往已有笔记追加内容 更新Note() 先 获取Note() 获取,再 更新Note() 保存 常用工作流 查找并阅读笔记
先搜索获取 note_图形界面d,再用 获取NoteContent() 读取正文:
# 1. 按标题搜索 过滤器 = NoteStoreTypes.Note过滤器() 过滤器.words = 'intitle:"会议纪要"' 结果 = note_store.findNotesMetadata(developer_令牌, 过滤器, 0, 20, NoteStoreTypes.NotesMetadata结果Spec(includeTitle=True))
# 2. 读取正文 note_图形界面d = 结果.notes[0].图形界面d content = note_store.获取NoteContent(developer_令牌, note_图形界面d) text = enml_to_text(content)
浏览笔记本里的笔记
先拉笔记本列表获取 notebook图形界面d,再拉该笔记本下的笔记:
# 1. 列出笔记本 notebooks = note_store.列出Notebooks()
# 2. 拉取指定笔记本的笔记 过滤器 = NoteStoreTypes.Note过滤器() 过滤器.notebook图形界面d = notebooks[0].图形界面d # 选择第一个笔记本 结果 = note_store.findNotesMetadata(developer_令牌, 过滤器, 0, 20, NoteStoreTypes.NotesMetadata结果Spec(includeTitle=True))
新建笔记 # 新建到默认位置 note = Types.Note() note.title = "笔记标题" note.content = text_to_enml("笔记内容") 创建d = note_store.创建Note(developer_令牌, note)
# 新建到指定笔记本 note = Types.Note() note.title = "笔记标题" note.content = text_to_enml("笔记内容") note.notebook图形界面d = "笔记本_图形界面D" 创建d = note_store.创建Note(developer_令牌, note)
追加内容到已有笔记 # 获取笔记 note = note_store.获取Note(developer_令牌, note_图形界面d, True, False, False, False)
# 追加内容
note.content = note.content + "
" + text_to_enml("追加的内容")
note_store.更新Note(developer_令牌, note)
按关键词全文搜索 过滤器 = NoteStoreTypes.Note过滤器() 过滤器.words = '成功Factors' 结果 = note_store.findNotesMetadata(developer_令牌, 过滤器, 0, 20, NoteStoreTypes.NotesMetadata结果Spec(includeTitle=True))
搜索语法
印象笔记支持丰富的搜索语法,可通过 Note过滤器.words 设置:
语法 说明 示例 关键词 全文搜索 成功Factors intitle:关键词 标题包含 intitle:"项目管理" -关键词 排除关键词 项目 -会议 关键词A OR 关键词B 或条件 成功Factors OR Workday notebook:"笔记本名" 在指定笔记本 notebook:"工作" 创建d:yyyyMMdd 创建日期 创建d:20260301 更新d:day-7 最近7天更新 更新d:day-7 tag:标签名 包含标签 tag:重要 核心响应字段
搜索结果(NoteMetadata):
图形界面d: 笔记 图形界面D title: 标题 更新d: 更新时间戳(毫秒) not