【问题标题】:Mendeley API - how to use JavaScript SDK - implicit flow authenticationMendeley API - 如何使用 JavaScript SDK - 隐式流认证
【发布时间】:2017-12-11 10:25:43
【问题描述】:

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

这就是我想做的:

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

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

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

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

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

这是我目前所能理解的(或者可能是误解!):

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

但现在呢?

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

【问题讨论】:

    标签: javascript api mendeley implicit-flow


    【解决方案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(&lt;DOCUMENT_ID&gt;) API 来获取文档详细信息。

    【讨论】:

    • 不幸的是,我不明白它是如何运行的。当您创建变量 api 并设置 AuthFlow 时,浏览器将被重定向到 Mendeley 登录页面并被重定向回来。你应该提取令牌吗?我对api.documents.list 的调用失败了,因为没有令牌。
    猜你喜欢
    • 1970-01-01
    • 2018-05-26
    • 2015-04-22
    • 1970-01-01
    • 1970-01-01
    • 2018-05-03
    • 2023-03-24
    • 2021-01-15
    • 1970-01-01
    相关资源
    最近更新 更多