2016-04-02 6 views
1

Ich möchte ein Java-Programm mit dem Google Fit REST API schreiben. (Es ist keine Android-App, daher kann ich die Android-API nicht verwenden.)Beispiele für Java Client Bibliothek für Google Fit REST API (nicht Android API!)

Es scheint, als gäbe es eine Java Client library for the REST API - also dachte ich, das wäre einfach.

Ich kann jedoch keine Beispiele/Beispiele finden, die die Verwendung der Client-Bibliothek (nur die javadoc) erklären.

Ich fand Beispiele zur Verwendung der Android-API - z. this. Aber es ist völlig anders, also nutzlos.

Für andere Google APIs, die ich verwendet habe, kommt die Client Library mit Beispielen ... nicht so in diesem Fall.

Irgendwelche Ideen bitte? Vielen Dank.

Antwort

1

Durch zusammen aus den javadoc einige Informationen Ansetzen, die REST-API documentation, und von einigen meiner eigenen Beispielen Nutzung andere Google-API Java-Client-Bibliotheken verwenden, ich in der Lage gewesen, um es mehr oder weniger zu arbeiten. .. Hier sind einige Code-Schnipsel:

import com.google.api.client.googleapis.auth.oauth2.GoogleCredential; 
import com.google.api.services.fitness.Fitness; 
import com.google.api.services.fitness.model.*; 

Holen Sie sich ein GoogleCredential - diese Bibliothek well documented ist ...

GoogleCredential credential = new GoogleCredential.Builder() 
            .setTransport(HTTP_TRANSPORT) 
            .setJsonFactory(JSON_FACTORY) 
            ... 
            .build(); 

Cre aß den Dienst, der die Grundlage für alle Anrufe ist, mit credential gerade erstellt ...

Fitness service = new Fitness.Builder(
          HTTP_TRANSPORT, 
          JSON_FACTORY, 
          credential) 
          .setApplicationName(APPLICATION_NAME) 
          .build(); 

Erstellen Sie eine oder mehrere Datenquellen für Ihre Anwendung/Gerät

DataSource content = new DataSource() 
          .setApplication(YOUR_APPLICATION) 
          .setType(DATA_SOURCE_RAW) 
          .setName(name) 
          .setDataType(dataType); 

Fitness.Users.DataSources.Create request = 
     service.users().dataSources().create("me", content); 

DataSource ds = request.execute(); 

Dies ist ein Beispiel von a dataType, die Sie verwenden müssen, wenn Sie Ihre eigenen erstellen DataSource ... Dies verwendet eine standardmäßige, öffentliche Metrik (in diesem Fall Schritte), die Google ausgesetzt ... siehe this.

private static final String DT_STEPS = "com.google.step_count.delta"; 
private static final DataTypeField FIELD_STEPS = new 
     DataTypeField().setName("steps").setFormat(FORMAT_INTEGER); 
private static final List<DataTypeField> STEPS_FIELDS = Arrays.asList(
                 FIELD_STEPS); 
public static final DataType DATA_TYPE_STEPS = 
          new DataType() 
           .setName(DT_STEPS) 
           .setField(STEPS_FIELDS); 

nun die tatsächlichen Datenpunkte erstellen, diese DataType, mit, dass DataSource - in einem DataSet ...

Value value = new Value().setIntVal(Integer.valueOf(steps)); 
    List<Value> values = Arrays.asList(value); 

    DataPoint point = new DataPoint() 
          .setValue(values) 
          .setDataTypeName(DT_STEPS) 
          .setStartTimeNanos(startNS) 
          .setEndTimeNanos(endNS); 

    List<DataPoint> dataPoints = Arrays.asList(point); 

    String datasetId = startNS + "-" endNS; 

    Dataset content = new Dataset() 
          .setDataSourceId(dataSourceId) 
          .setPoint(dataPoints) 
          .setMinStartTimeNs(startNS) 
          .setMaxEndTimeNs(endNS); 

    Fitness.Users.DataSources.Datasets.Patch request = 
      service.users().dataSources().datasets().patch(
       "me", 
       dataSourceId, 
       datasetId, 
       content); 

    Dataset ds = request.execute(); 

Sie müssen noch DataSet eine Session und ein Segment Aktivität erstellen ... aber diese folgen ähnlichen Strukturen.

0

REST API = JSON-formatierte Daten, die als Antwort auf Ihre Anfrage gesendet werden.

import org.json.JSONArray; 
    import org.json.JSONException; 
    import org.json.JSONObject; 

    /* this stuff above is maven stuff, so I assume if you use javax.json from https://docs.oracle.com/javaee/7/api/javax/json/package-summary.html 
    it should do the same thing. */ 

    import java.io.BufferedReader; 
    import java.io.InputStreamReader; 
    import java.net.HttpURLConnection; 
    import java.net.URL; 

    final String url = "http://www.someURLThatTheServerWillReponseTo/?someParams";  
    Integer result = 0; 
     HttpURLConnection urlConnection; 
     try { 
      URL url = new URL(params[0]); 
      urlConnection = (HttpURLConnection) url.openConnection(); 
      int statusCode = urlConnection.getResponseCode(); 

      // 200 represents HTTP OK 
      if (statusCode == 200) { 
       BufferedReader r = new BufferedReader(new InputStreamReader(urlConnection.getInputStream())); 
       StringBuilder response = new StringBuilder(); 
       String line; 
       while ((line = r.readLine()) != null) { 
        response.append(line); 
       } 
       parseResult(response.toString()); 
       result = 1; // Successful 
      } else { 
       result = 0; //"Failed to fetch data!"; 
      } 
     } catch (Exception e) { 
      Log.d(TAG, e.getLocalizedMessage()); 
     } 
     return result; //"Failed to fetch data!"; 

private void parseResult(String result) { 
    try { 
     JSONObject response = new JSONObject(result); 
     JSONArray data = response.optJSONArray("dataReturned"); 

     //Here is where you decided on what to do with the data that is returned 
     } 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 
} 
+0

Dank aber die Frage nicht beantworten, überhaupt ... Ich frage speziell über die Google API Fitness, nicht eine allgemeine Frage, wie eine HTTP-Anforderung zu machen und die Antwort verarbeiten. – nickpharris

+0

Meine schlechte, https://developers.google.com/fit/rest/v1/authorisation. Es ist einfach, Benutzeranmeldung mit Google-Konto zu machen. Autorisieren mit dem OAuth2.0-Prozess. Sobald Sie das Zugriffstoken erhalten haben, können Sie im Namen der Benutzer REST-Anforderungen stellen. – BrandonDevaleriola

0

ich für heute von Google Fit mit der Bibliothek Sie beschreiben, genauer gesagt, habe ich eine Möglichkeit, das Abrufen die Gesamtzahl der Schritte finden musste:

<dependency> 
    <groupId>com.google.apis</groupId> 
    <artifactId>google-api-services-fitness</artifactId> 
    <version>v1-rev22-1.22.0</version> 
</dependency> 

von dem ersten Lesung des offiziellen Google-Guide auf Arbeiten mit Datensätzen here und eine Menge Versuch und Irrtum, habe ich schließlich geschafft, ein Beispiel zu erstellen, wie alle Schritte für heute abgerufen werden.

* Hinweis: Als Voraussetzung müssen Sie Zugang für den Benutzer erhalten. Um dies zu tun, können Sie dieselbe Bibliothek verwenden, um ein Credential Objekt zu erhalten. Dies wird here beschrieben *

Sie folgende Importe benötigen:

import com.google.api.services.fitness.Fitness; 
import com.google.api.services.fitness.model.*; 
import com.google.api.client.googleapis.util.Utils; 

Nun, um Schritte zu erhalten, musste ich zuerst die Fitness Service initialisieren:

Fitness fitness = new Fitness.Builder(
       Utils.getDefaultTransport(), 
       Utils.getDefaultJsonFactory(), 
       credential //prerequisite 
     ).build(); 

Danach musste ich Erhalte einen aggregierten Datensatz. Ich wollte, dass die Schritte von allen Quellen stammen, die Schritte in Google Fit synchronisiert haben. Daher habe ich eine bereits vorhandene Datenquelle verwendet.

Unten ist, wie ich die Anfrage für den Datensatz erstellt habe.

AggregateRequest aggregateRequest = new AggregateRequest(); 
     aggregateRequest.setAggregateBy(Collections.singletonList(
       new AggregateBy() 
         .setDataSourceId("derived:com.google.step_count.delta:com.google.android.gms:estimated_steps"))); 
     aggregateRequest.setStartTimeMillis(DateMidnight.now().getMillis()); 
     aggregateRequest.setEndTimeMillis(DateTime.now().getMillis()); 

Das Datenquelle-ID, dass ich die ganzen Schritte bringen, die auf das Google Fit-Konto verbunden ist, von allen Quellen synchronisiert wurden. in dem gegebenen Zeitraum. (es bringt immer alle Schritte - kein Delta mit den vorherigen Messungen).

Sie können auch Ihre eigene Datenquelle erstellen, aber das ist eine völlig andere Geschichte; Überprüfen Sie nickpharris's comment dafür.

Hinweis: DateMidnight und Datetime sind Klassen von der joda Bibliothek zur Verfügung gestellt.

Nachdem Sie AggregateRequest erstellt haben, können Sie es ausführen und analysieren.

Bellow ist ein Beispiel dafür, wie ich die Summe der Schritte berechne.

AggregateResponse response = request.execute(); 

for (AggregateBucket aggregateBucket : response.getBucket()) { 
    for (Dataset dataset : aggregateBucket.getDataset()) { 
     for (DataPoint dataPoint : dataset.getPoint()) { 
      for (Value value : dataPoint.getValue()) { 
       if (value.getIntVal() != null) { 
        sum += value.getIntVal(); //for steps you only receive int values 
       } 
      } 
     } 
    } 
} 

Um den Zugang zu diesen Informationen haben Sie gefunden here mindestens einem der Bereiche benötigen.

I verwendet https://www.googleapis.com/auth/fitness.activity.read