用途
本技能用于创建一个最小可运行的 Evernote 示例,帮助开发者开始新的 Evernote 集成、测试环境配置,或学习 Evernote API 的基础使用模式。
主要能力
- 使用 Evernote Cloud API 创建第一条笔记
- 演示 ENML(Evernote Markup Language)格式
- 演示 NoteStore 操作,包括创建笔记、列出笔记本、检索笔记
前置条件
- 已完成 evernote-install-auth 设置
- 拥有有效的访问令牌(沙箱使用 Developer Token,生产环境使用 OAuth access token)
- 开发环境就绪
使用方式
第一步:创建入口文件
初始化一个已认证的 Evernote 客户端。沙箱环境使用 Developer Token,生产环境使用 OAuth 访问令牌。
// hello-evernote.js
const Evernote = require('evernote');
const client = new Evernote.Client({
token: process.env.EVERNOTE_ACCESS_TOKEN,
sandbox: true // false for production
});
第二步:了解 ENML 格式
Evernote 使用 ENML,一种受限的 XHTML 子集。每条笔记必须包含 XML 声明、DOCTYPE 和 <en-note> 根元素。禁止使用的元素包括 <script>、<form>、<iframe>。仅允许内联样式(不允许 class 或 id 属性)。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE en-note SYSTEM "http://xml.evernote.com/pub/enml2.dtd">
<en-note>
<h1>Note Title</h1>
<p>Content goes here</p>
<en-todo checked="false"/> A task item
</en-note>
第三步:创建第一条笔记
构建 ENML 内容并调用 noteStore.createNote()。返回的对象包含 guid、标题和创建时间戳。
async function createHelloWorldNote() {
const noteStore = client.getNoteStore();
const content = `<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE en-note SYSTEM "http://xml.evernote.com/pub/enml2.dtd">
<en-note>
<h1>Hello from Claude Code!</h1>
<p>Created at: ${new Date().toISOString()}</p>
</en-note>`;
const note = new Evernote.Types.Note();
note.title = 'Hello World - Evernote API';
note.content = content;
const createdNote = await noteStore.createNote(note);
console.log('Note GUID:', createdNote.guid);
return createdNote;
}
第四步:列出笔记本并检索笔记
使用 listNotebooks() 枚举笔记本,使用 getNote() 配合布尔标志控制返回的数据(内容、资源、识别、备用数据)。
const noteStore = client.getNoteStore();
// List all notebooks
const notebooks = await noteStore.listNotebooks();
notebooks.forEach(nb => console.log(`- ${nb.name} (${nb.guid})`));
// Retrieve a note with content
const note = await noteStore.getNote(noteGuid, true, false, false, false);
console.log('Title:', note.title);
如需包含 Python SDK、待办列表和组合工作流的完整可运行示例,请参阅 Implementation Guide。
输出
- 包含 Evernote 客户端初始化的可运行代码文件
- 在 Evernote 账户中成功创建的笔记
- 包含笔记 GUID 和确认信息的控制台输出
错误处理
| 错误 | 原因 | 解决方案 |
|---|---|---|
| EDAMUserException: BAD_DATA_FORMAT | ENML 内容无效 | 对照 ENML DTD 校验;确保包含 XML 声明和 DOCTYPE |
| EDAMNotFoundException | 笔记或笔记本未找到 | 检查 GUID 是否正确,笔记是否在回收站中 |
| EDAMSystemException: RATE_LIMIT_REACHED | 请求过多 | 等待 rateLimitDuration 秒后重试 |
| Missing DOCTYPE | ENML 缺少必需的头部 | 在 <en-note> 前添加 <?xml ...?> 和 <!DOCTYPE ...> |
适用场景
- 开始新的 Evernote 集成时快速验证环境
- 测试 Evernote 账户与访问令牌配置
- 学习 Evernote API 的基础模式
限制
- 使用前必须先完成 evernote-install-auth 设置并拥有有效访问令牌
- 内容必须符合 ENML 规范,禁止使用
<script>、<form>、<iframe>等元素,仅允许内联样式 - 受 API 速率限制约束,超出限制需等待后重试
资源
- Creating Notes
- ENML Reference
- Core Concepts
- API Reference
后续步骤
继续进行 evernote-local-dev-loop 以配置开发工作流。
示例
- 沙箱测试:使用 Developer Token 并设置 sandbox: true 创建笔记,验证其出现在 sandbox.evernote.com 的沙箱账户中。
- 生产笔记:切换到 OAuth 访问令牌,设置 sandbox: false,使用 note.notebookGuid 在指定笔记本中创建笔记。