从 API 创建 LinkedNotebook
Creating LinkedNotebooks from API
我正在使用 Evernote api 尝试从我们的网络应用程序中制作 linked 笔记本。
我们使用的是evernote-sdk-js版本的API。
我们可以从 API 创建共享笔记本。我们还能够创建链接笔记本并接收有效响应。问题是 linked 笔记本不工作。笔记本在 ListLinkedNotebook api 调用中返回,但当我尝试授权它时收到错误消息。
Error { identifier: 'SharedNotebook.id', key: 'xxxx' }
据我了解,所有者不再共享该笔记本。这不是真的,因为所有者帐户仍然在 'share' window.
中显示待处理的请求
逻辑流程如下:
1) 用户输入他们希望与其共享笔记本的人的电子邮件地址。向我们的服务器发出创建 ShareNotebook 的请求。
我们像这样创建一个共享笔记本:(来自所有者帐户)
var notebook = new Evernote.SharedNotebook();
notebook.notebookGuid = guid;
notebook.email = email;
notebook.privilege = Evernote.SharedNotebookPrivilegeLevel.FULL_ACCESS;
var userclient = new Evernote.Client({token: token, sandbox: sandbox});
var notestore = userclient.getNoteStore();
notestore.createSharedNotebook(userclient.token, notebook, function(err, results){
callback(err, results);
});
示例响应如下:
{
allowPreview:null
email:"...@gmail.com"
id:12345
notebookGuid:"d2fa3cbe-...."
notebookModifiable:false
privilege:4
recipientSettings:null
requireLogin:null
serviceCreated:1469079222000
serviceUpdated:1469079222000
shareKey:"xxxx-sxxx"
userId:999xxxxx
username:null
}
2) 由于 Evernote 不会根据 API 请求发送电子邮件,我们手动向用户发送 link 以激活共享笔记本。
创建 LinkedNotebook 的代码:(来自共享用户帐户)
var notebook = new Evernote.LinkedNotebook;
notebook.shareName = options.shareName;
notebook.username = options.username;
notebook.shardId = options.shardId;
notebook.shareKey = options.shareKey;
var userclient = new Evernote.Client({token: token, sandbox: sandbox});
var notestore = userclient.getNoteStore();
notestore.createLinkedNotebook(userclient.token, notebook, function(err, results){
callback(err, results);
});
以及示例响应:
{
shareName: 'Notebook Name',
username: '...',
shardId: 'sxxx',
shareKey: 'xxxx-sxxx',
uri: null,
guid: '4f8df3c2-...',
updateSequenceNum: 630,
noteStoreUrl: 'https://www.evernote.com/shard/sxxx/notestore',
webApiUrlPrefix: 'https://www.evernote.com/shard/sxxx/',
stack: null,
businessId: null
}
有没有人幸运地从 API 创建了链接笔记本? createLinkedNotebook API 调用似乎无法正常工作。谢谢你的帮助。
tl;博士,抱歉,您现在不能做您想做的事情。
所以这里少了一些东西,你无能为力。
第一部分是共享笔记本必须 "claimed" 由用户(收件人)分配给用户。在声明之前,指向 SharedNotebook 的 LinkedNotebook 实际上不会让您访问基础笔记本 - authenticateToSharedNotebook 将失败。
第二部分是 shareKey 本身。我们将您在 SharedNotebook 上看到的结构成员 shareKey
重命名为 globalId
,在 LinkedNotebook 上重命名为 sharedNotebookGlobalId
- 我们目前正在更新我们的开发人员文档,然后我们将更新 sdk。要 "claim" 共享笔记本,接收者需要使用 shareKey 调用 authenticateToSharedNotebook
,而不是 globalId。问题是我们没有公开生成真实 shareKey 的方法,因此第三方客户端无法生成它并加入共享笔记本。一旦 被 认领,您可以使用 globalId 调用 authenticateToSharedNotebook 以获取对笔记本的访问权限。
我们添加了一个 shareNotebook
方法,可以在 API 调用中发送电子邮件。该电子邮件包含一个 link 供用户单击,其中包含 shareKey 并允许声明 SharedNotebook,但目前不在 SDK 中或记录在案。我们希望通过这一轮文档更新来解决这个问题。
我正在使用 Evernote api 尝试从我们的网络应用程序中制作 linked 笔记本。
我们使用的是evernote-sdk-js版本的API。
我们可以从 API 创建共享笔记本。我们还能够创建链接笔记本并接收有效响应。问题是 linked 笔记本不工作。笔记本在 ListLinkedNotebook api 调用中返回,但当我尝试授权它时收到错误消息。
Error { identifier: 'SharedNotebook.id', key: 'xxxx' }
据我了解,所有者不再共享该笔记本。这不是真的,因为所有者帐户仍然在 'share' window.
中显示待处理的请求逻辑流程如下:
1) 用户输入他们希望与其共享笔记本的人的电子邮件地址。向我们的服务器发出创建 ShareNotebook 的请求。
我们像这样创建一个共享笔记本:(来自所有者帐户)
var notebook = new Evernote.SharedNotebook();
notebook.notebookGuid = guid;
notebook.email = email;
notebook.privilege = Evernote.SharedNotebookPrivilegeLevel.FULL_ACCESS;
var userclient = new Evernote.Client({token: token, sandbox: sandbox});
var notestore = userclient.getNoteStore();
notestore.createSharedNotebook(userclient.token, notebook, function(err, results){
callback(err, results);
});
示例响应如下:
{
allowPreview:null
email:"...@gmail.com"
id:12345
notebookGuid:"d2fa3cbe-...."
notebookModifiable:false
privilege:4
recipientSettings:null
requireLogin:null
serviceCreated:1469079222000
serviceUpdated:1469079222000
shareKey:"xxxx-sxxx"
userId:999xxxxx
username:null
}
2) 由于 Evernote 不会根据 API 请求发送电子邮件,我们手动向用户发送 link 以激活共享笔记本。
创建 LinkedNotebook 的代码:(来自共享用户帐户)
var notebook = new Evernote.LinkedNotebook;
notebook.shareName = options.shareName;
notebook.username = options.username;
notebook.shardId = options.shardId;
notebook.shareKey = options.shareKey;
var userclient = new Evernote.Client({token: token, sandbox: sandbox});
var notestore = userclient.getNoteStore();
notestore.createLinkedNotebook(userclient.token, notebook, function(err, results){
callback(err, results);
});
以及示例响应:
{
shareName: 'Notebook Name',
username: '...',
shardId: 'sxxx',
shareKey: 'xxxx-sxxx',
uri: null,
guid: '4f8df3c2-...',
updateSequenceNum: 630,
noteStoreUrl: 'https://www.evernote.com/shard/sxxx/notestore',
webApiUrlPrefix: 'https://www.evernote.com/shard/sxxx/',
stack: null,
businessId: null
}
有没有人幸运地从 API 创建了链接笔记本? createLinkedNotebook API 调用似乎无法正常工作。谢谢你的帮助。
tl;博士,抱歉,您现在不能做您想做的事情。
所以这里少了一些东西,你无能为力。
第一部分是共享笔记本必须 "claimed" 由用户(收件人)分配给用户。在声明之前,指向 SharedNotebook 的 LinkedNotebook 实际上不会让您访问基础笔记本 - authenticateToSharedNotebook 将失败。
第二部分是 shareKey 本身。我们将您在 SharedNotebook 上看到的结构成员 shareKey
重命名为 globalId
,在 LinkedNotebook 上重命名为 sharedNotebookGlobalId
- 我们目前正在更新我们的开发人员文档,然后我们将更新 sdk。要 "claim" 共享笔记本,接收者需要使用 shareKey 调用 authenticateToSharedNotebook
,而不是 globalId。问题是我们没有公开生成真实 shareKey 的方法,因此第三方客户端无法生成它并加入共享笔记本。一旦 被 认领,您可以使用 globalId 调用 authenticateToSharedNotebook 以获取对笔记本的访问权限。
我们添加了一个 shareNotebook
方法,可以在 API 调用中发送电子邮件。该电子邮件包含一个 link 供用户单击,其中包含 shareKey 并允许声明 SharedNotebook,但目前不在 SDK 中或记录在案。我们希望通过这一轮文档更新来解决这个问题。