新手使用Evernote JavaScript SDK提取笔记邮箱数组,求后续操作指引
用Evernote JavaScript SDK提取笔记中的邮箱列表(Node.js实现)
嘿,恭喜你已经搞定了API密钥和SDK安装这两个关键前置步骤!接下来咱们一步步把提取邮箱的功能落地,流程其实很清晰:
1. 获取开发者令牌(测试阶段快速认证)
因为你用的是测试API密钥,直接用开发者令牌比走完整OAuth流程更高效,不用处理回调这些麻烦事:
- 登录Evernote开发者控制台,进入沙箱环境(Sandbox)
- 在你的应用详情页里找到「Developer Token」,点击生成并复制这个令牌
然后在代码里初始化Evernote客户端:
const Evernote = require('evernote'); // 配置信息 const config = { token: '你的开发者令牌', sandbox: true, // 测试环境必须设为true }; // 初始化客户端与笔记存储对象 const client = new Evernote.Client(config); const noteStore = client.getNoteStore();
2. 获取目标笔记列表
接下来要拿到你保存网页的那些笔记。可以先获取默认笔记本,再拉取该笔记本下的所有笔记:
async function getTargetNotes() { // 获取用户的默认笔记本 const defaultNotebook = await noteStore.getDefaultNotebook(); // 构建笔记筛选条件(这里取该笔记本下的所有笔记,也可按标题/创建时间过滤) const filter = new Evernote.NoteFilter({ notebookGuid: defaultNotebook.guid }); const spec = new Evernote.NotesMetadataResultSpec({ includeTitle: true }); // 拉取笔记元数据(先拿列表,后续再单独取内容) const notesMetadata = await noteStore.findNotesMetadata(filter, 0, 100, spec); return notesMetadata.notes; }
注意:
findNotesMetadata的第三个参数是最大返回数量,测试阶段设100足够,如果你笔记更多可以做分页处理。
3. 提取笔记内容中的邮箱
Evernote的笔记内容是ENML格式(类似HTML的标记语言),所以先把ENML转成纯文本,再用正则匹配邮箱:
// 处理ENML,提取纯文本 function enmlToPlainText(enml) { // 去掉所有ENML/HTML标签,保留纯文本 return enml.replace(/<[^>]+>/g, '').trim(); } // 匹配邮箱的正则表达式 const emailRegex = /[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/g; async function extractEmailsFromSingleNote(noteGuid) { // 获取完整笔记内容(参数控制只拉取必要字段) const note = await noteStore.getNote(noteGuid, true, false, false, false); const plainText = enmlToPlainText(note.content); // 匹配所有邮箱,无匹配则返回空数组 const emails = plainText.match(emailRegex) || []; return emails; }
4. 整合流程,收集所有邮箱并去重
最后把所有步骤串起来,收集所有笔记里的邮箱,再去重得到最终数组:
async function main() { try { const notes = await getTargetNotes(); let allEmails = []; // 遍历每个笔记提取邮箱 for (const note of notes) { const emails = await extractEmailsFromSingleNote(note.guid); allEmails = [...allEmails, ...emails]; } // 去重处理,得到唯一邮箱数组 const uniqueEmails = [...new Set(allEmails)]; console.log('最终提取到的邮箱列表:', uniqueEmails); } catch (error) { console.error('执行出错:', error.message); } } // 启动主流程 main();
一些实用提醒
- 沙箱环境的笔记是独立于你真实Evernote账号的,若要提取真实账号内容,需把
sandbox设为false,并换成生产环境的API密钥和令牌 - 如果笔记里的网页结构复杂,
enmlToPlainText可能不够完善,你可以用cheerio库解析ENML(先通过npm install cheerio安装,再用它提取文本) - 注意Evernote的API请求频率限制,批量处理时可以加个小延迟避免触发限制
内容的提问来源于stack exchange,提问作者sgko
相关产品推荐
相关产品推荐

