360 Secure SkillHub
360 安全技能中心

yinxiang-notes

通过 Python 脚本调用印象笔记(中国版)API,实现笔记本与标签列表、笔记创建/更新/删除/搜索、废纸篓查看与清空,并将笔记增量同步为 Markdown(含附件与网页裁剪)到本地 Obsidian 库。需配置 Developer Token 与 NoteStore 地址,并安装 evernote3、thrift、html2text。

suepradun
suepradun
热度 60.42
最近更新 2026-05-18 11:13:01
分类:知识依赖:代码执行 / 第三方 API / 读写文件应用场景:笔记整理 / 工作流 / 文件转换

安装技能

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

执行命令安装此 skill: npx secure-skills-cli add yinxiang-notes
Metadata
name
yinxiang-notes
description
印象笔记(中国版)集成 skill。使用 Developer Token 在印象笔记中创建、整理和搜索笔记。支持笔记本列表、创建笔记、更新笔记内容/标签、移动笔记到废纸篓、查看/清空废纸篓、搜索内容、增量同步到 Obsidian vault。适用于使用 app.yinxiang.com 的用户。

印象笔记集成

快速开始

前置条件

  1. Developer Token:从 https://app.yinxiang.com/api/DeveloperToken.action 获取
  2. Python 环境:需要 Python 3.7+
  3. SDK 安装:
    pip install evernote3 thrift html2text
    

配置

在 .env 文件中设置:

EVERNOTE_TOKEN=S=s16:U=xxx:E=xxx:C=xxx:P=xxx:A=en-devtoken:V=2:H=xxx
EVERNOTE_NOTESTORE_URL=https://app.yinxiang.com/shard/s16/notestore

核心功能

1. 获取笔记本列表

python skills/yinxiang-notes/scripts/list_notebooks.py
python skills/yinxiang-notes/scripts/list_notebooks.py --verbose  # 显示每个笔记本的笔记数量

2. 获取标签列表

python skills/yinxiang-notes/scripts/list_tags.py

3. 创建笔记

python skills/yinxiang-notes/scripts/create_note.py --title "标题" --content "<en-note>内容</en-note>"
# 指定笔记本
python skills/yinxiang-notes/scripts/create_note.py --title "标题" --content "<en-note>内容</en-note>" --notebook "笔记本名"
# 添加标签
python skills/yinxiang-notes/scripts/create_note.py --title "标题" --content "<en-note>内容</en-note>" --tags "标签1,标签2"

ENML 格式说明:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE en-note SYSTEM "http://xml.evernote.com/pub/enml2.dtd">
<en-note>
    笔记内容...
    <en-todo checked="false">待办事项</en-todo>
</en-note>

4. 更新笔记

# 更新标题
python skills/yinxiang-notes/scripts/update_note.py --guid "笔记GUID" --title "新标题"
# 更新内容
python skills/yinxiang-notes/scripts/update_note.py --guid "笔记GUID" --content "<en-note>新内容</en-note>"
# 添加标签
python skills/yinxiang-notes/scripts/update_note.py --guid "笔记GUID" --add-tags "标签1,标签2"
# 移除标签
python skills/yinxiang-notes/scripts/update_note.py --guid "笔记GUID" --remove-tags "标签3"
# 组合操作
python skills/yinxiang-notes/scripts/update_note.py --guid "笔记GUID" --title "新标题" --add-tags "标签1"

5. 删除笔记(移至废纸篓)

# 预览(不实际删除)
python skills/yinxiang-notes/scripts/delete_note.py --guid "笔记GUID"
# 确认删除(移至废纸篓,可在客户端恢复)
python skills/yinxiang-notes/scripts/delete_note.py --guid "笔记GUID" --confirm

删除行为说明:

  • delete_note.py 使用 deleteNote API,将笔记移至废纸篓,可在印象笔记客户端中恢复
  • 清空废纸篓后笔记才永久删除(见下方"清空废纸篓")

6. 搜索笔记

python skills/yinxiang-notes/scripts/search_notes.py "关键词"
python skills/yinxiang-notes/scripts/search_notes.py "标题:关键词"
python skills/yinxiang-notes/scripts/search_notes.py "any:关键词1 关键词2"

搜索语法:

  • 关键词 — 在标题和正文中搜索
  • 标题:关键词 — 仅搜索标题
  • 创建时间:2024-01-01 — 按创建时间筛选
  • any:关键词1 关键词2 — 匹配任一关键词

7. 同步到 Obsidian(增量同步)

将印象笔记增量同步到本地 Obsidian vault,保持笔记本层级结构。

目标 vault:C:\Users\adun\Documents\印象笔记同步

# 同步全部笔记本
python skills/yinxiang-notes/scripts/sync_to_obsidian.py

# 只同步指定笔记本
python skills/yinxiang-notes/scripts/sync_to_obsidian.py --notebook "笔记本名"
python skills/yinxiang-notes/scripts/sync_to_obsidian.py -n "笔记本名"

同步规则:

笔记类型 判断条件 处理方式
📎 附件笔记 资源有 fileName+扩展名 enml_to_markdown + 附件 section
🖼 内嵌图片笔记 有 en-media 但无 fileName html2text 转 Markdown + 附件 section
📝 纯文本笔记 无大量 HTML 标签和 en-media 直接转为 Markdown
📄 网页裁剪(短) HTML ≥3个标签且 < 200KB html2text 转为 Markdown
🔗 网页裁剪(长) HTML ≥3个标签且 ≥ 200KB 且纯 HTML(无用户手写内容) 存 HTML 进 _clips/

附件存储:每个笔记本有独立的附件和裁剪目录

印象笔记同步/
├── 笔记本A/
│   ├── 笔记.md
│   ├── _attachments/   ← 该笔记本附件(hash 去重)
│   └── _clips/         ← 该笔记本 HTML 裁剪(≥5KB)
├── 笔记本B/
│   ├── 笔记.md
│   ├── _attachments/
│   └── _clips/
└── .obsidian/

同步后笔记的 frontmatter:

---
title: 笔记标题
created: 2026-03-19 10:30:00
updated: 2026-03-19 14:22:00
source: Evernote
source_guid: xxx-xxx-xxx
notebook: 笔记本名
type: webclip  # 仅网页裁剪(≥200KB)和内嵌图片笔记有此字段
---

特性:

  • 增量同步:仅同步新增和变化的笔记
  • 断点续传:遇到 API 频率限制自动保存进度
  • 每次最多同步 50 条,避免触发限流
  • 支持命令行参数控制同步行为(--notebook 指定笔记本)
  • 使用 html2text 库进行 HTML 转 Markdown 转换

8. 查看废纸篓

python skills/yinxiang-notes/scripts/list_trash.py

9. 清空废纸篓(永久删除)

python skills/yinxiang-notes/scripts/empty_trash.py

⚠️ 警告:此操作会永久删除废纸篓中的所有笔记,无法恢复!

完整脚本列表

脚本 功能
list_notebooks.py 获取笔记本列表(支持 --verbose 显示笔记数)
list_tags.py 获取标签列表
create_note.py 创建笔记
update_note.py 更新笔记(标题/内容/标签)
delete_note.py 删除笔记(移至废纸篓)
search_notes.py 搜索笔记
sync_to_obsidian.py 增量同步印象笔记到 Obsidian vault
list_trash.py 查看废纸篓中的笔记
empty_trash.py 清空废纸篓(永久删除)

API 端点

环境 NoteStore URL
生产环境 https://app.yinxiang.com/shard/s16/notestore
沙盒环境 https://sandbox.yinxiang.com/shard/s1/notestore

错误处理

错误码 说明 解决方案
EDAMUserException (errorCode=2) Token 无效或过期 重新申请 Developer Token
EDAMNotFoundException 资源不存在 检查笔记 GUID 或笔记本名
EDAMSystemException (errorCode=19) API 频率限制 等待限流窗口后重试,脚本会自动处理

注意事项

  • Token 仅显示一次,请妥善保存
  • API 频率限制:Evernote API 有每小时调用次数限制,同步脚本内置限流保护(每次获取笔记间隔 1 秒),避免触发限制
  • 删除:调用 deleteNote 移至废纸篓;调用 expungeNote 或清空废纸篓会永久删除
  • 网页裁剪(≥200KB):Obsidian 中点击笔记内的嵌入链接查看原始 HTML,建议安装 HTML Reader 插件以获得更好渲染效果