1

我想使用 Google 的 REST API 来获取我帐户的健身数据。为此,我发出 2 个后续呼叫。

  1. 获取https://www.googleapis.com/fitness/v1/users/me/dataSources。这将返回所有可用数据源的列表,如 [1] 中所示。

  2. 发布https://www.googleapis.com/fitness/v1/users/me/dataset:aggregate。我使用来自 [1] 的请求正文中的 dataType 名称和 dataStreamId 来构建请求正文 [2]。

问题:第二次调用为所有包含空格的 dataSourceId 返回错误 [3],尽管它们在第一次请求中完全以这种方式返回。在代码示例中有空格,因为 dataSourceId 包含手机型号“Nexus 5”。如果没有空格,则请求成功且没有错误。

我已经尝试用其他东西(“%20”或“_”或“+”)替换空格,但没有任何帮助。这是 API 中的错误还是我在做一些根本错误的事情?

提前致谢!

编辑 1:顺便说一句,我正在使用谷歌的 oauth-playground 并选择了所有的健身范围。 https://developers.google.com/oauthplayground/

编辑 2:在代码示例 [2] 中,我使用了错误的 dataTypeName。是“activity_confidence”,但应该是“com.google.activity.samples”。

[1] 获取响应

    {
      "dataSource": [
        {
          "application": {
            "packageName": "com.google.android.gms"
          },
          "dataQualityStandard": [
          ],
          "dataStreamId": "derived:com.google.activity.samples:com.google.android.gms:LGE:Nexus 5:c80045fc:detailed",
          "dataStreamName": "detailed",
          "dataType": {
            "field": [
              {
                "format": "map",
                "name": "activity_confidence"
              }
            ],
            "name": "com.google.activity.samples"
          },
          "device": {...},
          "type": "derived"
        },
        ...
      ]
    }

[2] POST 正文

    {
      "aggregateBy": [
        {
          "dataSourceId": "derived:com.google.activity.samples:com.google.android.gms:LGE:Nexus 5:c80045fc:detailed",
          "dataTypeName": "com.google.activity.samples"
        }
      ],
      "endTimeMillis": 1511132400000,
      "startTimeMillis": 1510268400000
    }

[3] POST 错误信息

    {
      "error": {
        "code": 400,
        "errors": [
          {
            "domain": "global",
            "message": "datasource not found: derived:com.google.activity.samples:com.google.android.gms:LGE:Nexus 5:c80045fc:detailed",
            "reason": "invalidArgument"
          }
        ],
        "message": "datasource not found: derived:com.google.activity.samples:com.google.android.gms:LGE:Nexus 5:c80045fc:detailed"
      }
    }
4

1 回答 1

0

您是否尝试使用像“\”这样的转义字符?

您的数据流 ID 看起来像

derived:com.google.activity.samples:com.google.android.gms:LGE:Nexus\ 5:c80045fc:detailed
于 2018-02-19T09:29:11.207 回答