从 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 中或记录在案。我们希望通过这一轮文档更新来解决这个问题。