Google Fit REST API - 带有空格的 dataStreamId 导致错误

Posted

技术标签:

【中文标题】Google Fit REST API - 带有空格的 dataStreamId 导致错误【英文标题】:Google Fit REST API - dataStreamId with whitespace results in error 【发布时间】:2018-05-01 09:26:39 【问题描述】:

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

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

    发布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"
      
    

【问题讨论】:

@schnuchel,你有想过这个吗?我也有同样的问题 抱歉,仍然无法弄清楚如何让它工作...... 抱歉,仍然无法弄清楚如何让它工作...... Google Fit 的 API 很差 :( 谷歌难得的错过 【参考方案1】:

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

您的数据流 ID 如下所示

derived:com.google.activity.samples:com.google.android.gms:LGE:Nexus\ 5:c80045fc:detailed

【讨论】:

以上是关于Google Fit REST API - 带有空格的 dataStreamId 导致错误的主要内容,如果未能解决你的问题,请参考以下文章

PHP REST API 查询返回空正文

带有 REST API 的 AsyncTask

如何使用v3 rest api从google驱动器下载文件?

Google Fit API 登录卡在加载时

如何在 php 中使用 Google Fit api 获取步数?

使用 Google Fit api 时的 Google Oauth 2.0 RESULT_CANCELED