2017-11-17 5 views
1

Ich möchte die Google REST-API verwenden, um die Fitnessdaten meines Kontos abzurufen. Dazu gebe ich 2 aufeinanderfolgende Anrufe aus.Google Fit-REST-API - dataStreamId mit Leerraumfehlern

  1. GET https://www.googleapis.com/fitness/v1/users/me/dataSources. Dies gibt eine Liste aller verfügbaren dataSources wie in [1] zurück.

  2. POST https://www.googleapis.com/fitness/v1/users/me/dataset:aggregate. Ich verwende den Dateityp name und dataStreamId im Anfragetext von [1], um den Anfragetext [2] zu erstellen.

Das Problem: Der zweite Anruf gibt einen Fehler [3], die für alle dataSourceIds Leerzeichen enthalten, obwohl sie genau so in der ersten Anfrage zurückgegeben wurden. Im Codebeispiel gibt es Whitespace, da die DataSourceId das Telefonmodell "Nexus 5" enthält. Wenn kein Leerzeichen vorhanden ist, wird die Anforderung fehlerfrei ausgeführt.

Ich habe bereits versucht, den Raum durch etwas anderes ("% 20" oder "_" oder "+") zu ersetzen, aber nichts half. Ist das ein Fehler in der API oder mache ich etwas grundsätzlich falsch?

Vielen Dank im Voraus!

Bearbeiten 1: btw Ich benutze Googles oauth-Spielplatz mit allen Fitnessbereichen ausgewählt. https://developers.google.com/oauthplayground/

Bearbeiten 2: In Codebeispiel [2] habe ich den falschen DataTypeName verwendet. War "activity_confidence", sollte aber "com.google.activity.samples" lauten.

[1] GET Antwort

{ 
     "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 Körper

{ 
     "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-Fehlermeldung

{ 
     "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" 
     } 
    } 

Antwort

0

Sie versuchen Haben Sie nicht wie ein Escape-Zeichen mit ' \ '?

würde Ihre Datenstrom ID wie

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