3

我希望你不会介意我发布一个问题,因为我不是程序员,需要一个“傻瓜”的解释。虽然我可以使用基本的 JavaScript,但我从未使用过 API。

这就是我想要做的:

我在我的硬盘驱动器上制作了一个 HTML 页面(我最终想将它与 PhoneGap 之类的东西打包到一个移动应用程序中,以便与我的同事分享)。

在我的页面的一部分中,我想填充我在基于 Web 的 Mendeley 参考管理器应用程序中拥有的带注释的引文文件夹的内容。

目前,我正在用一个 JSON 文件填充我的页面(我从 Mendeley 导出并重新格式化 - 只是为了让我的引文格式代码正确 - 这部分很好,看起来很棒)。

但我希望我的页面不是使用以前导出的文件填充,而是在打开我的应用程序时自动下载到我的页面中的 Mendeley 文件夹的最新内容。

我已经研究了 Mendeley api “文档”,查看了书籍,YouTube 教程,搜索了网络 - 所有使用 api 下载我能找到的数据的示例,不要帮助我弄清楚如何使用 Mendeley api。我什至无法从 Mendeley SDK 中的“示例”中理解!

到目前为止,这就是我所能理解的(或者可能是误解!):

  1. 在 Mendeley 注册并获得一个“客户 ID”和一个“秘密”:我已经做到了
  2. 决定我想要什么样的身份验证流程:这将是“隐式流程”,因为我需要直接从浏览器访问 Mendeley。我知道“隐式流”不需要“秘密”,只需要“客户端 ID”。
  3. 使用 Mendeley JavaScript SDK:我使用的是“独立”版本 - 我在我的页面中使用脚本标记来引用它,如 Readme SDK 文件中所述。我还将隐式流所需的代码片段复制并粘贴到名为“oauth-config.js”的文件中,如 SDK 示例文件中所述:oauth-config.implicit-grant.js.dist

但现在呢?

  • 我究竟如何使用 SDK 来获取我的数据?我找不到方向。
  • 假设我可以从 Mendeley 获取我的数据,我处理 JSON 以在我的页面中显示的脚本如何访问响应数据?
4

1 回答 1

1

让我举一个例子来说明如何使用 Mendeley JS API。这是我使用隐式流程登录并检索用户个人库中的所有文档的简约实现。

var sdk = require('@mendeley/api');
var api = sdk({
  authFlow: sdk.Auth.implicitGrantFlow({
    clientId: <YOUR_CLIENT_ID_GOES_HERE>
  })
})

api.documents.list().then(function(docs) {
    console.log('Success!');
    console.log(docs);
}).catch(function(response) {
    console.log('Failed!');
    console.log('Status:', response.status);
});

您可以扩展它以访问 SDK 提供的任何 API。

但是,由于身份验证的工作方式,您需要在您的网站上使用与您在注册​​客户端时在“重定向 URL”中提供的完全相同的 URL 托管此脚本。否则,您将收到一条错误消息Redirection URI does not match the one registered for this application

对于问题的第二部分,我相信您是在问如何检索某个 Mendeley 文件夹中的所有文档(如果我理解不正确,请纠正我)。假设您有一个带有文件夹 id 的文件夹 aaaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee。然后您可以修改上面的示例以检索该文件夹中的所有文档,如下所示:

var sdk = require('@mendeley/api');
var api = sdk({
  authFlow: sdk.Auth.implicitGrantFlow({
    clientId: <YOUR_CLIENT_ID_GOES_HERE>
  })
})

api.documents.list({
    folderId: 'aaaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee'
}).then(function(docIds) {
    console.log('Success!');
    console.log(docIds);
}).catch(function(response) {
    console.log('Failed!');
    console.log('Status:', response.status);
});

在这种情况下,响应将包含文档 ID,因此您需要调用api.documents.retrieve(<DOCUMENT_ID>)API 来获取文档详细信息。

于 2017-07-27T13:51:22.880 回答