Google Fit REST API的Java客户端库示例(不是Android API!)
我想用GoogleFit编写一个java程序。(它不是Android应用程序,所以我不能使用Android API。) 似乎有一个-所以我想这很容易 但是,我找不到任何示例/示例来解释如何使用客户机库(仅此示例) 我找到了一些关于如何使用Android API的例子——例如。但是完全不同,所以没用 对于我使用过的其他Google API,客户端库附带了一些示例。。。在这种情况下并非如此Google Fit REST API的Java客户端库示例(不是Android API!),java,google-fit,Java,Google Fit,我想用GoogleFit编写一个java程序。(它不是Android应用程序,所以我不能使用Android API。) 似乎有一个-所以我想这很容易 但是,我找不到任何示例/示例来解释如何使用客户机库(仅此示例) 我找到了一些关于如何使用Android API的例子——例如。但是完全不同,所以没用 对于我使用过的其他Google API,客户端库附带了一些示例。。。在这种情况下并非如此 有什么想法吗?谢谢。restapi=JSON格式的数据作为对您请求的响应发送 import org.jso
有什么想法吗?谢谢。restapi=JSON格式的数据作为对您请求的响应发送
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();
}
}
通过拼凑RESTAPI中的一些信息,并使用我自己使用其他Google API Java客户端库的一些示例,我已经能够或多或少地使它工作。。。以下是一些代码片段:
import com.google.api.client.googleapis.auth.oauth2.GoogleCredential;
import com.google.api.services.fitness.Fitness;
import com.google.api.services.fitness.model.*;
获取谷歌认证-此库是
使用刚刚创建的credential
创建作为所有呼叫基础的服务
Fitness service = new Fitness.Builder(
HTTP_TRANSPORT,
JSON_FACTORY,
credential)
.setApplicationName(APPLICATION_NAME)
.build();
为应用程序/设备创建一个或多个数据源
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();
这是创建自己的数据源时需要使用的数据类型的一个示例。。。这是使用谷歌公开的标准公共度量(在本例中为steps)。。。看
您仍然需要创建一个会话
和一个段活动数据集
。。。但这些都遵循类似的结构。我必须找到一种方法,使用您描述的库从Google Fit检索今天的步骤总数,或者更准确地说,我使用了:
<dependency>
<groupId>com.google.apis</groupId>
<artifactId>google-api-services-fitness</artifactId>
<version>v1-rev22-1.22.0</version>
</dependency>
现在,为了获得步骤,我首先必须初始化健身服务:
Fitness fitness = new Fitness.Builder(
Utils.getDefaultTransport(),
Utils.getDefaultJsonFactory(),
credential //prerequisite
).build();
之后,我需要获得一组聚合的数据。我希望这些步骤来自于在GoogleFit中同步步骤的所有来源,所以我使用了一个已经存在的数据源
下面是我如何创建数据集请求的
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());
我使用的数据源id将带来从连接到GoogleFit帐户的所有源同步的整个步骤。在给定的时间段内。(它将始终带来所有步骤-与以前的测量值没有增量)
您还可以创建自己的数据源,但这是一个完全不同的故事;检查一下
注:DateMidnight和DateTime是joda图书馆提供的课程
创建AgegateRequest后,可以执行并解析它
贝娄是我如何计算步骤之和的一个例子
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
}
}
}
}
}
要访问此信息,您至少需要找到一个作用域
我用过谢谢,但这根本不能回答问题。。。我问的是关于GoogleFitness API的具体问题,而不是关于如何发出HTTP请求和处理响应的一般问题。这很简单,让用户登录谷歌帐户。使用OAuth2.0进程进行授权。获得访问令牌后,您可以代表用户发出REST请求。
import com.google.api.services.fitness.Fitness;
import com.google.api.services.fitness.model.*;
import com.google.api.client.googleapis.util.Utils;
Fitness fitness = new Fitness.Builder(
Utils.getDefaultTransport(),
Utils.getDefaultJsonFactory(),
credential //prerequisite
).build();
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());
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
}
}
}
}
}