作为开发人员,我不禁要访问我的Jawbone对我的大量步骤计数和睡眠习惯数据。有很多数据!因此,我开始研究如何使用Jawbone UP API和Node删除此数据。
>我找到了如何使用Jawbone UP API和节点在网络上使用的示例,但是它们都非常参与其中,并且有很多活动部件以及一些过时的模块(例如Express的较旧版本)。在本文中,我想关注绝对基础知识 - 不必担心将用户数据保存到数据库中,创建帐户或连接社交登录。我们将重点介绍您需要知道的核心内容,以获取节点服务器以使用Jawbone API进行身份验证并返回用户数据。
该演示的所有代码都可以在我们的github repo上提供。
钥匙要点
>使用Jawbone UP API使用Node.js访问诸如步骤计数和睡眠习惯之类的大量用户数据,而无需处理用户数据存储或帐户管理的复杂性。>
首先在Jawbone开发人员网站上设置Jawbone应用程序,以获取必要的凭据,例如客户ID和App Secret,这对于API集成至关重要。
>用Node.js中的OAuth 2.0实现护照模块,以安全地处理用户身份验证和数据检索。
确保通过HTTPS进行与Jawbone UP API进行的所有通信以满足安全协议并避免数据截距。
- >使用Node.js中的EJS模板从Web应用程序上的Jawbone UP API中动态显示已检索的睡眠数据。
- >探索通过从Jawbone UP API集成更多数据类型的更多数据类型,并可能与其他API结合以增强功能。
- >设置Jawbone应用
- >我们需要的第一件事是在我们的Jawbone帐户下设置的新Jawbone应用程序。这是用户将授权访问其数据的应用程序。
>
- 首先登录Jawbone站点的开发人员部分,然后访问https://jawbone.com/up/developer,然后单击左下方的“登录”链接。您将不需要特定的Jawbone开发人员帐户,因为它们可以允许您使用现有的Jawbone帐户登录。
-
>登录后,请访问https://jawbone.com/up/developer/account,或单击“帐户”下左手菜单中的“管理帐户”链接。
>在此页面上,您将联系您的开发人员帐户页面。从这里,单击“创建应用”。
在加载的页面上>您将被提示输入应用程序的详细信息:>
- >名称 - 您的应用程序的名称,我输入了“ jawbone up node demo”。
- 描述 - 这是一个简短的描述,将在用户的UP应用程序库中出现。
长描述 - 这是在应用程序画廊的应用程序的详细页面上出现的。- >
徽标 - 上传您的应用程序徽标。如果您收到有关“选择”的错误(我知道很奇怪,但是对于少数跟随并收到信息的人来说是有意义的),那么可能是您的徽标图像太大了。- >
URL - 您的应用程序主页- >
授权URL - 您的登录页面的URL。出于我们的测试目的,请在https:// localhost中输入:5000/login/jawbone。- >
> oauth重定向uris - 允许您的应用程序重定向到用户身份验证后的URL。在我们的演示中,我们将输入https:// localhost:5000。
-
>单击以创建应用程序后,您将使用应用程序列表将您定向到页面。您新创建的应用看起来与我的外观相似:
请注意“客户端ID”和“ App Secret” - 这些是您需要连接到Jawbone API的方法。
启动我们的节点应用
>我将在一个名为server.js的文件中包含所有我们的节点服务器代码。我们首先需要服务器的必要NPM模块。
>
首先,我们设置了一个基本的Express App。
然后,我们需要EJS(嵌入式JavaScript),这使我们能够将JavaScript插入我们的HTML模板中。我们将使用它在我们返回的HTML中显示JavaScript变量。
为了能够使用Jawbone API进行身份验证并将其重定向回我们的应用程序,Jawbone要求我们将其重定向到HTTPS上的页面。为此,我们必须包括https。
<span>var express = require(‘express’),
</span> app <span>= express(),</span>
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
接下来,我们包括FS,它允许我们读取文件系统。我们需要在服务器证书文件中读取以启用HTTPS。>
ejs <span>= require('ejs'),</span>
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
>我们还需要身体偏好器才能使我们能够处理JSON请求:
https <span>= require('https'),</span>
登录后复制
登录后复制
登录后复制
登录后复制
jawbone UP API使用OAuth 2.0协议进行身份验证。基本上,这意味着要通过用户登录其Jawbone帐户并允许我们访问其数据,我们需要仔细研究此协议。幸运的是,NPM的护照模块包含一个称为Passport-Oauth的模块,该模块支持这一点。我们将Passport与Oauth 2.0一起在应用程序中设置好:>
然后,我们有一个自我解释变量,该变量存储了我们将要运行的端口。>
fs <span>= require('fs'),</span>
登录后复制
登录后复制
登录后复制
登录后复制
接下来,我们将在Passport和JawboneAuth中存储身份验证所需的所有值。这是您在注册应用时提前注意的“客户端ID”和“ App Secret”值的时刻。。
<span>var express = require(‘express’),
</span> app <span>= express(),</span>
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
这是这些价值的含义和/或它们来自何处的概述:>
clientId - 这是您的Jawbone应用程序列出的“客户端ID”。
- 客户端 - 这是下面的“应用程序秘密”值。>>
授权库 - 这是UP OAuth 2.0身份验证页面的位置,将用户重定向到。
- Tokenurl - 这是Jawbone UP API中的URL,我们必须调用HTTPS,以请求访问令牌。这个令牌是我们需要将其包含在给Jawbone UP API的电话中,以证明我们有权提出这些数据请求。在Jawbone UP API中,此令牌可以持续一年,因此您可以将其存储在数据库中,并将用户连接到其Jawbone帐户一年,然后才需要重新验证它们。我们不会在本教程中考虑存储用户,但是如果您想进一步推动它,请记住。
>。
- > callbackurl - Jawbone在我们网站上的URL将用户成功地将用户带回他们成功地访问其数据后。对我们来说,这是显示睡眠数据的页面。
-
>我们要定义的最后一个变量是我们的ssloptions,其中包含我们需要提供给服务器的所有详细信息,以便我们使用HTTPS运行此服务器。在解释我们如何设置https时,我将在本文稍后详细介绍所有这些。- >
然后,我们包含一些定义一些基本节点应用功能的行,这些app功能将为节点开发人员熟悉:
> BodyParser - 允许我们解析JSON对象。>
>静态文件夹 - 定义了我们的静态文件(如映像)在服务器上的位置(在我们的情况下, /public文件夹)。>
EJS - 分配EJS模块为我们的模板引擎。
视图文件夹 - 定义了我们的EJS视图文件将在服务器上的位置(在我们的情况下, /视图文件夹)。ejs <span>= require('ejs'),</span>
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
>
- 为了在Express中初始化Passport,我们运行以下行:>
注意,如果我们想持续登录会话,请在护照中设置更多。在这种情况下,我们需要设置会议。但是,对于本教程,我们将重点关注从Jawbone UP API获取数据的初始阶段,而不必担心登录会话。- >
设置我们的获取请求-
为了将用户引导到jawbone UP API的登录屏幕,我们需要在服务器上分配一个URL,该URL将重定向到Jawbone登录屏幕。为此,下面的代码分配了 /登录 /jawbone的URL。在获得此URL的请求时,我们致电Passport.Authorize()启动我们的Jawbone UP UP授权页面:
<span>var express = require(‘express’),
</span> app <span>= express(),</span>
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
>如上所述,我们有一系列我们要求的特定权限 - [basic_read','sleep_read']。在我们的情况下,我们要求提供基本的用户数据和睡眠数据。如果您想要求访问步骤数,用餐等等,则可以向该阵列添加其他许可请求。您可以在Jawbone UP开发人员身份验证文档页面上查看可用的内容及其提供的访问。
>另外,如果在Jawbone UP身份验证屏幕中进行身份验证失败,它将将我们重定向回主页。在护照模块中也可能设置Scunstallect,但是我发现了Jawbone UP API,不需要,因为我们将在此代码中进一步定义JawboneStrategy中的回调URL。
然后,我们设置了我们的睡眠数据将出现的Get请求。这是我们将告诉API将我们重定向到访问用户数据的位置。在此示例中,它是 /sleepdata:>
>我们在此处具有相同的Passport.authorize()函数,只是为了检查用户到达此页面时是否已登录。如果是这样,我们运行res.render('userData',req.account);它传递了jawbone UP API返回userData.ejs模板的数据(我们将尽快设置)。如果未登录,它们将被指向jawbone UP身份验证屏幕。
然后,我们设置一个URL以允许用户在 /注销处注销,该网站将用户重定向到主页一旦登录:>
ejs <span>= require('ejs'),</span>
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
>最后,对于我们的路由,如果有人试图访问主页,我们将其设置为加载index.ejs模板:
使用护照连接到jawbone up apihttps <span>= require('https'),</span>
登录后复制
登录后复制
登录后复制
登录后复制
>最大的代码部分也是最重要的 - 建立护照“策略”来告诉Passport如何处理请求以授权使用'Jawbone'。看起来像这样:
fs <span>= require('fs'),</span>
登录后复制
登录后复制
登录后复制
登录后复制
>让我们介绍所有这些代码正在做的事情。
>
首先,我们从我们在文件开头定义的JawboneAuth对象设置了我们的clientID,clientsecret,授权库,tokenurl和callbackurl。这是使用新的JawboneStrategy()。
bodyParser <span>= require('body-parser'),</span>
登录后复制
登录后复制
登录后复制
接下来,我们将拥有处理此数据的回调函数。我们在此回调函数中使用令牌和完成值。令牌是Jawbone UP API访问令牌,我们需要将其与API的任何呼叫一起包括在内,以证明我们已对其进行了身份验证。完成的是将我们的数据返回到应用程序的回调函数。>
>我们将访问令牌以及前面定义的客户端ID和秘密传递到选项对象中的jawbone-up模块:>
<span>var express = require(‘express’),
</span> app <span>= express(),</span>
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
Jawbone-UP模块是节点模块,它使我们访问Jawbone UP API端点。这些是我们对API返回用户数据的呼叫(例如获取https://jawbone.com/nudge/api/v.1.1/users/@me/sleeps)这些在诸如up.moves.get()和up.sleeps.get()之类的函数中。在我们的示例中,我们将使用up.sleeps.get()获取睡眠数据。
>
在UP.Sleeps.get()中,我们有两个变量,分别是错误和身体。如果从API接收数据时存在错误,则将其返回在ERR变量中,因此我们在回调开始时对此进行测试。>
>否则,我们将数据返回到身体变量中的JSON字符串中。车身变量将包含一个看起来像这样的值的json字符串:>
ejs <span>= require('ejs'),</span>
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
我们想要的一切都在数据中。 我们使用json.parse(body)将上面的值解析到JavaScript对象中,并将数据键中的值分配给一个称为JawboneData的变量:>
然后,我们有一个用于循环的循环,可以通过数据中的每个项目,并格式化我们的日期和睡眠时间,然后再将它们返回我们的模板以显示。
https <span>= require('https'),</span>
登录后复制
登录后复制
登录后复制
登录后复制
在这里,我们在日期中阅读,将其转换为字符串,然后将我们自己分开。它作为20150408的价值返回,因此我们将前四位数字归为一年,在那个月之后的两个数字,而最后两个人则是一天。然后,我们安排它,以便它将是DD/mm/yyyy,如果您希望以美国日期格式格式化,则可以切换一个月:>
fs <span>= require('fs'),</span>
登录后复制
登录后复制
登录后复制
登录后复制
jawbone api返回一个相对良好格式的睡眠持续时间值,就像这样的标题:“对于9h 43m”。我们可以使用它,但要删除“ for”部分,例如:>
然后,我们将数据返回到我们的护照的回调功能,该回调功能将呈现我们的userData.ejs。为此,我们将JawboneData变量返回到完成的功能。还有一个控制台。log只是为了显示显示jawbone up数据以显示以下显示:>>>>
bodyParser <span>= require('body-parser'),</span>
登录后复制
登录后复制
登录后复制
使用https
正如我之前提到的,为了使用Jawbone UP API,我们需要使用HTTPS运行服务器,因为Jawbone的服务要求双方运行HTTPS。如果未设置为https的callbackurl,当您尝试登录时,您将收到“无效的重定向”错误。
passport <span>= require('passport'),
</span><span>JawboneStrategy = require('passport-oauth').<span>OAuth2Strategy</span>,</span>
登录后复制
为了使我们的示例工作,我们将使用自签名的证书。如果您在实时网站上进行此操作,则需要从有效的证书授权书中获得适当的证书。
>在server.js中,我们定义了两个SSL选项:>
port <span>= 5000,</span>
登录后复制
这些是我们两个与身份验证相关的文件的服务器上的文件位置:>
- 键 - 这是我们服务器的私钥
>
- 证书 - 这是我们的自我签名证书
>
>为我们的服务器生成一个私钥
为了生成一个私钥,我们需要使用OpenSSL工具包。 MAC OSX和Linux用户应该已预装。对于Windows用户,您可以安装Cygwin,在“选择软件包”屏幕上搜索“ OpenSSL”,然后选择出现的软件包。
>我们可以通过打开终端,导航到服务器的文件夹并运行以下命令来生成该私钥:>
这将生成一个专用服务器密钥,准备使用称为server.key。
<span>var express = require(‘express’),
</span> app <span>= express(),</span>
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
生成证书签名请求(CSR)
然后,我们需要生成CSR。这通常会被发送给证书授权,但在我们的情况下,我们将自己签署以进行测试目的。
>要使用上面创建的私钥生成CSR,请运行以下命令:>
>您将获得一个问题列表以回答,回答这些问题,您将收到CSR作为一个名为server.csr。
的文件。
使用我们的服务器私钥
生成签名的证书
ejs <span>= require('ejs'),</span>
登录后复制
登录后复制
登录后复制
登录后复制
登录后复制
>最后,要生成一个没有证书授权的自签名证书,我们运行以下命令,以生成一年有效的证书:
该命令应该已经生成了一个server.crt文件 - 这是您的证书。
删除我们的证书请求
对于那些喜欢保持整洁和自我签名证书的人,我们可以删除server.csr。
https <span>= require('https'),</span>
登录后复制
登录后复制
登录后复制
登录后复制
我们是https就绪
>使用我们的私钥和证书准备并在我们的节点文件中定义,我们的服务器可以作为HTTPS运行。以下代码使用https和我们的ssloptions启动了服务器:>
我们的EJS文件
该应用程序的HTML都在.ejs文件中,因此我们可以在需要时在其中包含JavaScript变量。这些文件都在 /视图中。 index.ejs非常简单,只包含一个标题,说明和登录按钮,该按钮将转到 /登录 /jawbone:
> userdata.ejs是操作所在的地方。我们可以关注的主要位置是我们的桌子:
对于EJ的新手,我们将JavaScript嵌入标签中。
我们将项目传递给UserData模板,我们通过使用for for so to to s o:。
然后,使用和将每个日期和标题插入我们的HTML。
fs <span>= require('fs'),</span>
登录后复制
登录后复制
登录后复制
登录后复制
我们的应用程序在行动
>要运行应用程序,前往您的终端并运行:>
>运行它,请访问http:// localhost:5000,您会看到我们的初始页面:bodyParser <span>= require('body-parser'),</span>
登录后复制
登录后复制
登录后复制
如果我们单击“登录”按钮,我们将被带到http:// localhost:5000/login/jawbone,这将引导我们进入Jawbone UP Authentication Page。该页面将提示我们获取Jawbone登录详细信息。输入这些详细信息后,或者您已经登录了Jawbone站点,您将被指示到验证页面,要求访问用户数据。单击“同意”:
>当我们单击同意时,我们应该将其定向到http:// localhost:5000/sleepdata页面,带有我们的睡眠数据表:

>,如果我们单击“注销”按钮,它应该登录我们并将我们重定向回主页。
结论
>完成了我们连接到Jawbone UP API并将数据返回到节点服务器的基础的概述。>
>从这里开始的下一步可能包括设置数据库以存储数据以备将来使用,为应用程序创建用户帐户,扩展您从UP API中获取的数据量,更改其显示的方式(也许添加了一些漂亮的图!)等等。将这些数据与许多其他API结合在一起,并且某些真正整洁的应用程序的可能性很大!>
其他有用的资源
节点 - jawbone-up模块的文档
jawbone开发人员文档
PASSPORT的文档-
带有用户帐户和mongodb
- 的UP和节点演示
- 经常询问有关将jawbone UP API与node.js >什么是Jawbone UP API,它是如何工作的?
- > jawbone UP API是Jawbone提供的一组编程接口,允许开发人员与Jawbone up数据进行交互。它可以从Jawbone UP平台中提取数据,其中包括用户的活动,睡眠,餐和其他与健康相关的数据。 API使用RESTFUL的呼叫和响应在JSON中格式化。
>如何将Jawbone UP API连接到Node.js?
将JAWBONE UP API与Node.js连接,您需要首先在Jawbone的开发人员网站上注册您的申请,以获取客户ID和客户端的秘密。然后,您可以在node.js应用程序中使用“ jawbone-up” npm软件包。该软件包提供了一种简单的方法来验证和向jawbone up api提出请求。
>由于jawbone停止了服务,您可能想考虑使用Jawbone UP API的替代方法?诸如Fitbit API,Google Fit API或Apple HealthKit之类的替代方案。这些API还提供了访问用户的健康和健身数据的访问权限,并提供了广泛的文档来帮助开发人员。
> Jawbone及其服务发生了什么?该公司已过渡到称为Jawbone Health Hub的医疗订阅服务。但是,不再支持Jawbone UP应用程序和API。可用的。使用此API的任何应用都将不再按预期运行。建议切换到替代API以访问健康和健身数据。
>>如何从Jawbone UP API迁移到Fitbit API?
>从Jawbone UP API迁移到Fitbit API涉及几步。首先,您需要在Fitbit的开发人员网站上注册您的应用程序。然后,您可以使用Fitbit API访问用户的健康和健身数据。 FITBIT API提供了与Jawbone UP API相似的功能,包括访问活动,睡眠和餐数据。>
什么是node.js,为什么它用于与APIS连接? Node.js是基于Chrome的V8 JavaScript引擎的JavaScript运行时。它用于构建可扩展网络应用程序。 Node.js是非阻滞,它使其高效且轻巧,非常适合数据密集型实时应用程序。由于其效率和易用性,通常用于与API连接。>
>在使用node.js? 连接到带有节点的API时,我该如何处理错误.js,您可以使用“错误”事件处理错误。每当请求期间发生错误时,就会发出此事件。您可以聆听此事件并适当处理错误,例如记录错误或重试请求。>
我可以使用Fitness Tracker API访问哪些数据?访问一系列健康和健身数据。这包括活动数据(如台阶,距离和燃烧的卡路里),睡眠数据(例如睡眠时间和睡眠质量)以及进餐数据(例如食物摄入和营养信息)。可用的确切数据取决于特定的API和用户授予的权限。>
>在使用健身跟踪器API时如何确保用户数据的隐私和安全性? API,重要的是要遵循数据隐私和安全性的最佳实践。这包括在访问数据之前,使用安全连接(HTTP)在所有请求中获得用户同意,安全地存储用户数据,并仅请求您的应用程序所需的最小数据。以上是使用Node.js连接到Jawbone UP API的详细内容。更多信息请关注PHP中文网其他相关文章!