evernote api search + nodejs: 在两个笔记本中获取搜索结果
evernote api search + nodejs: get search results in two notebooks
印象笔记的搜索语法似乎不允许多笔记本,但我还是想获取"notebook 1"或"notebook 2".
中所有包含'somesearch'的笔记
我可以在一个笔记本中获得一个搜索:
var token = 'xxxxXXX';
const Evernote = require('evernote');
const nFilter = new Evernote.NoteStore.NoteFilter({
words: 'somesearch notebook:"notebook 1"',
ascending: false
});
const rSpec = {};
rSpec.includeTitle = true;
var client = new Evernote.Client({token: token, sandbox: false});
var noteStore = client.getNoteStore();
noteStore.findNotesMetadata(nFilter, 0, 50, rSpec).then(function(notesMetadataList) {
console.log("Found " + notesMetadataList.notes.length + " notes.");
console.log();
console.log("Here are their titles: ");
var titles = [];
for (var i =0;i<notesMetadataList.notes.length;i++) {
titles[i]=notesMetadataList.notes[i].title;
console.log(titles[i]);
}
}).catch(function(err){
console.log('Error:',err);
});
但我不知道如何在 "notebook 2" 上进行第二次搜索,并将它们的标题附加到变量 titles
...顺便说一句,我对 [=25 很陌生=] 编程...
此致,
免责声明:未经测试
简而言之,您需要遍历您的笔记本,然后在报告前汇总结果。我编辑了您的代码,留下了一些指针注释。
// always put your imports first
const Evernote = require('evernote');
// default to const
const token = 'xxxxXXX';
const client = new Evernote.Client({token: token, sandbox: false});
const noteStore = client.getNoteStore();
// async await makes things cleaner
async function showTitles (noteBooks) {
const queries = [];
const rSpec = { includeTitle: true };
// the of form of the for loop avoids i++
for (const noteBook of noteBooks) {
const nFilter = new Evernote.NoteStore.NoteFilter({
words: `somesearch notebook:"${noteBook}"`,
ascending: false
});
queries.push(noteStore.findNotesMetadata(nFilter, 0, 50, rSpec))
}
// run in parallel
const results = await Promise.all(queries);
let found = 0;
let titles = [];
for (const result of results) {
found += result.notes.length;
titles = titles.concat(results.notes.map(n => n.title));
}
console.log(`Found ${found} notes.
Here are their titles:
${titles.join('\n')}`);
}
showTitles(['notebook 1', 'notebook 2']).catch(function(err){
console.log('Error:',err);
});
印象笔记的搜索语法似乎不允许多笔记本,但我还是想获取"notebook 1"或"notebook 2".
中所有包含'somesearch'的笔记我可以在一个笔记本中获得一个搜索:
var token = 'xxxxXXX';
const Evernote = require('evernote');
const nFilter = new Evernote.NoteStore.NoteFilter({
words: 'somesearch notebook:"notebook 1"',
ascending: false
});
const rSpec = {};
rSpec.includeTitle = true;
var client = new Evernote.Client({token: token, sandbox: false});
var noteStore = client.getNoteStore();
noteStore.findNotesMetadata(nFilter, 0, 50, rSpec).then(function(notesMetadataList) {
console.log("Found " + notesMetadataList.notes.length + " notes.");
console.log();
console.log("Here are their titles: ");
var titles = [];
for (var i =0;i<notesMetadataList.notes.length;i++) {
titles[i]=notesMetadataList.notes[i].title;
console.log(titles[i]);
}
}).catch(function(err){
console.log('Error:',err);
});
但我不知道如何在 "notebook 2" 上进行第二次搜索,并将它们的标题附加到变量 titles
...顺便说一句,我对 [=25 很陌生=] 编程...
此致,
免责声明:未经测试
简而言之,您需要遍历您的笔记本,然后在报告前汇总结果。我编辑了您的代码,留下了一些指针注释。
// always put your imports first
const Evernote = require('evernote');
// default to const
const token = 'xxxxXXX';
const client = new Evernote.Client({token: token, sandbox: false});
const noteStore = client.getNoteStore();
// async await makes things cleaner
async function showTitles (noteBooks) {
const queries = [];
const rSpec = { includeTitle: true };
// the of form of the for loop avoids i++
for (const noteBook of noteBooks) {
const nFilter = new Evernote.NoteStore.NoteFilter({
words: `somesearch notebook:"${noteBook}"`,
ascending: false
});
queries.push(noteStore.findNotesMetadata(nFilter, 0, 50, rSpec))
}
// run in parallel
const results = await Promise.all(queries);
let found = 0;
let titles = [];
for (const result of results) {
found += result.notes.length;
titles = titles.concat(results.notes.map(n => n.title));
}
console.log(`Found ${found} notes.
Here are their titles:
${titles.join('\n')}`);
}
showTitles(['notebook 1', 'notebook 2']).catch(function(err){
console.log('Error:',err);
});