使用JS向Google Fit REST Api添加会话和信息

问题描述 投票:0回答:2

因此,我对于将Js与API结合使用还不陌生,但是我在了解Google Fit API的工作原理方面付出了很多努力。我正在尝试通过添加会话和会话强度(中心点)的一些数据来向API添加新的锻炼数据。我可以使会话正确显示,但是在尝试创建数据源并为该会话添加一个点时遇到不断的错误。如果有人可以帮助我修复我的代码以实现此目的,或者可以将我引导到更彻底的类似代码示例,这将不胜感激,因为API文档似乎并未对示例等进行详尽的阐述。

这里是我到目前为止编写的3个api调用,一个用于创建DataSource,一个用于DataPoint,一个用于Session。该会话正常工作,并为正确的活动添加了1个小时的会话,但我无法使任何其他API请求正常工作。

数据源:

``gapi.client.fitness.users.dataSources.create({
             "userId":"me",
             "resource": {
                "application": {
                "name": "LittleWorkouts"
              },
              "dataType": {"field":[{
                "format": "floatPoint",
                "name": "com.google.heart_minutes"
              }],


                "name": "com.google.heart_minutes"
              },
              "device": {
                "manufacturer": "op",
                "model": "6",
                "type": "phone",
                "uid": "1000019",
                "version": "1"
              },
              "type": "raw"
             }
         })
        .then(function(response) {
                // Handle the results here (response.result has the parsed body).
                console.log("Response", response);
              },
              function(err) { console.error("Execute error 1", err); });
``

数据点:

``
    gapi.client.fitness.users.dataSources.datasets.patch({
      "dataSourceId":"raw:com.google.heart_minutes:292824132082:op:6:1000019",
      "userId": "me",
      "datasetId": "1592087806561000000-1592287806561000000",
      "resource": {
  "minStartTimeNs": "1592087806561000000",
  "maxEndTimeNs": "1592287806561000000",
  "dataSourceId": "raw:com.google.heart_minutes:292824132082:op:6:1000019",
  "point": [
    {
      "startTimeNanos": "1592087806561000000",
      "endTimeNanos": "1592287806561000000",
      "value": [
        {
          "fpVal": 89.1
        }
      ],
      "dataTypeName": "com.google.heart_minutes"
    }
  ]
}
    })
        .then(function(response) {
                // Handle the results here (response.result has the parsed body).
                console.log("Response", response);
              },
              function(err) { console.error("Execute error 2", err); });
``

会话:

``gapi.client.fitness.users.sessions.update({
            "userId":"me",
            "sessionId": "someSessionId19",
            "id": "someSessionId19",
            "name": "Awesome Workout19",
            "description": "A very intense workout",
            "startTimeMillis": new Date().getTime() - 3600000,
            "endTimeMillis": new Date().getTime(),
            "version": 1,
            "lastModifiedToken": "exampleToken",
            "application": {
                "detailsUrl": "http://example.com",
                "name": "LittleWorkouts",
                "version": "1.0"
            },
            "activityType": 21,
            "activeTimeMillis": 3600000
            }).then((res) => {console.log(res)});
            console.log('res')
        //request.execute((res) => {console.log(res);console.log('executrd')})


        console.log(auth2.currentUser.get().getBasicProfile().getGivenName());

        var request2 = gapi.client.fitness.users.sessions.list({
            "userId":"me"
        }).then((res) => {console.log(res)})
``

错误消息

{消息:“无法获取数据集的数据源:raw:com.google.heart_minutes:292824132082:op:6:1000019”,域:“ global”,原因:“ invalidArgument”}

javascript google-api google-fit google-api-js-client google-fit-api
2个回答
1
投票

[似乎可能是您试图为数据类型传递错误的字段:如果要使用标准数据类型(例如com.google.heart_minutes),则应传递标准的确切字段数据类型(该字段应称为“强度”);或只是传递数据类型名称,后端就会为您填充它们。

因此,如果您将数据类型更改为

          "dataType": {"name": "com.google.heart_minutes"}

它应该起作用。

然后,您需要使用该请求返回的数据源ID作为数据点。


0
投票

太棒了,因此在注释中获得一些支持之后,我有了一些有效的代码,可以使用3个API调用添加来自先前定义的数据源的数据的新会话。第一个调用是创建一个数据源,只需要运行一次。然后,第二个和第三个将数据点添加到数据集中,并分别为锻炼创建一个新的会话。这是最终的工作代码:

数据源:

/*
         gapi.client.fitness.users.dataSources.create({
             "userId":"me",
             "resource": {
                "application": {
                "name": "LittleWorkouts"
              },
              "dataType": {
                "name": "com.google.heart_minutes"
              },
              "device": {
                "manufacturer": "op",
                "model": "6",
                "type": "phone",
                "uid": "1000020",
                "version": "1"
              },
              "type": "raw"
             }
         })
        .then(function(response) {
                // Handle the results here (response.result has the parsed body).
                console.log("Response", response);
              },
              function(err) { console.error("Execute error 1", err); });
  */

数据和数据集:

gapi.client.fitness.users.dataSources.datasets.patch({
      "dataSourceId":"raw:com.google.heart_minutes:108881196053:op:6:1000020",
      "userId": "me",
      "datasetId": z,
      "resource": {
  "minStartTimeNs": workoutStartTime * 1000000,
  "maxEndTimeNs": workoutEndTime * 1000000,
  "dataSourceId": "raw:com.google.heart_minutes:108881196053:op:6:1000020",
  "point": [
    {
        "originDataSourceId": "raw:com.google.heart_minutes:108881196053:op:6:1000020",
      "value": [
        {
          "fpVal": 8
        }
      ],
      "dataTypeName": "com.google.heart_minutes",
      "endTimeNanos": workoutEndTime * 1000000,
      "startTimeNanos": workoutStartTime * 1000000,
    }
  ]
}
    })
        .then(function(response) {
                // Handle the results here (response.result has the parsed body).
                console.log("Response", response);
              },
              function(err) { console.error("Execute error 2", err); });

会话:

gapi.client.fitness.users.sessions.update({
            "userId":"me",
            "sessionId": id,
            "id": id,
            "name": "Morning Workout",
            "description": "A very intense workout",
            "startTimeMillis": workoutStartTime,
            "endTimeMillis": workoutEndTime,
            "version": 1,
            "lastModifiedToken": "exampleToken",
            "application": {
                "detailsUrl": "http://example.com",
                "name": "LittleWorkouts",
                "version": "1.0"
            },
            "activityType": 21,
            "activeTimeMillis": workoutEndTime - workoutStartTime
            }).then((res) => {console.log(res)});
            console.log('res')
© www.soinside.com 2019 - 2024. All rights reserved.