首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

使用 Bluemix 提供的 IoT 和 GPS 服务提高您的健康水平(3)

使用 Bluemix 提供的 IoT 和 GPS 服务提高您的健康水平(3)

获取步长数据前面您已经在 Node.js 中构建了基本应用程序框架并将其绑定到了服务,而且了解了如何访问凭据来使用服务 API。下一步是在 Get Moar Steps        应用程序中做一些有趣的事情:显示一个用户的 Fitbit 数据。
登录页面(来自您的 Node.js 应用程序的默认 GET / 响应)请求用户的凭据并提供一个用于注册 Fitbit 的 Wearable Fitness        服务的链接:
登录页面中的表单控件验证您有用户名和密码的条目。它们还从客户端浏览器查询本地时间-时区信息。该组数据(通过 HTTP POST)被发送到应用程序中的 POST          /iot 路径。
此时,您拥有了对 Wearable Fitness API 进行 REST 调用并获取回一些 Fitbit 数据所需的所有细节。请注意,Bluemix 中的每个服务在 Bluemix        仪表板内都有一个文档参考链接,具体而言是 API 文档参考链接。您已经完成了任务,然后决定想要从 Wearable Fitness API 的          /iot/doc?id= 端点查询 Fitbit 活动的 “今日” 文档。
“今日” 的提及应很明显地指出,您为何从登录页面表单传入客户端浏览器的时区。根据代码的托管位置,服务器的当前时间和日期的观念可能不同于 Fitbit        在用的时间和日期。通过使用从客户端浏览器查询的数据,应用程序至少可以基于用户的当前位置向他们展示恰当的日子。(仍然存在的一个漏洞是,Fitbit        设备自身有一个时区集,如果用户当前不在与设备相同的时区,而且未将其设置为自动更新或手动更新它,结果可能就不匹配。但在本例中,为简单起见,我暂时不管这个漏洞。)
您可以在 DevOps Services Web IDE 中查看完整的代码(参见        routes/iot.js),包括所有日期解析和计算的处理。继续看示例后续部分,以下是基于服务凭据、最终用户 ID 和密码、文档名称和要查询的日期构建 REST        调用的简短视图。请注意,我将 REST 调用/响应功能标准化为一个名为 restcall.js 的独立模块:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
function queryFitbitData(username, password, datestr, callbackFn) {

    var restcall = require('../restcall');
    var url = require('url');

    //Because the Bluemix service detail includes a URL with the /iot endpoint already
    //postfixed to the "url", we use the Node.js url module to break it back down so
    //we can have the host portion for our options JSON object below
    var iotURLObj = url.parse(iotprops.url);
    var host = iotURLObj.host;
    var authStr = username+":"+password;
    var endpoint = "/iot/doc?id=fb_activity_"+datestr+"&appId="+iotprops.appId;

    var options = {
      host: host,
      path: endpoint,
      method: "GET",
      auth: authStr
    };

    console.log("URL: "+host+" / Endpoint: "+endpoint);

    //send the request to the IoT API
    restcall.get(options, true, callbackFn);
}




禁止任何 API 服务中断的回调函数将由来自 Wearable Fitness API 的 JSON 响应触发,包括当天的 Fitbit 设备统计信息。提供的信息比您可在        Fitbit 网站上访问的信息要多得多,包括各活动级别所用的时间(和距离)的更详尽分析,这些活动级别包括久坐不动、相当活跃、极其活跃。
以下是您调用 Wearable Fitness /iot/doc API 时返回的具有代表性的一部分 JSON 数据:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
"summary": {
    "distances": [
      {
        "distance": 5.56,
        "activity": "total"
      },
      {
        "distance": 5.56,
        "activity": "tracker"
      },
      {
        "distance": 23.01,
        "activity": "loggedActivities"
      },
      {
        "distance": 2.44,
        "activity": "veryActive"
      },
      {
        "distance": 2.17,
        "activity": "moderatelyActive"
      },
      {
        "distance": 0.94,
        "activity": "lightlyActive"
      },
      {
        "distance": 0,
        "activity": "sedentaryActive"
      },
      {
        "distance": 23.01,
        "activity": "Cycling"
      }
    ],
    "sedentaryMinutes": 733,
    "lightlyActiveMinutes": 113,
    "caloriesOut": 3120,
    "caloriesBMR": 1836,
    "marginalCalories": 1107,
    "fairlyActiveMinutes": 77,
    "veryActiveMinutes": 49,
    "activityCalories": 1489,
    "steps": 8404,
    "activeScore": -1
  },
  "iot_source": "fitbit",
  "goals": {
    "activeMinutes": 30,
    "distance": 8.05,
    "caloriesOut": 2925,
    "steps": 10000
  }




API        以公里为单位返回距离。如果要在您的应用程序中显示任何距离数据(使用英里或任何其他单位),则必须执行单位换算。请注意,应用程序既向您提供各活动级别所用的分钟数,也向您提供在那些活动级别的跑动距离(单位:千米)。
返回列表