From 2ff959d3e722e6d022b5148d0613e0600b43b75f Mon Sep 17 00:00:00 2001 From: Giulia <20015091@studenti.uniupo.it> Date: Wed, 6 Jun 2018 15:40:29 +0200 Subject: [PATCH 1/7] Updated FITBIT classes --- build.gradle | 7 +- src/main/java/manage/AuthFITBIT.java | 81 ++++++++++++------- src/main/java/manage/FITBITData/Activity.java | 4 + .../java/manage/FITBITData/HeartRate.java | 10 +++ src/main/java/manage/FITBITData/Location.java | 4 + src/main/java/manage/FITBITData/Sleep.java | 4 + src/main/java/manage/FITIBITData.java | 21 ----- src/main/java/manage/UserData.java | 17 ---- 8 files changed, 76 insertions(+), 72 deletions(-) create mode 100644 src/main/java/manage/FITBITData/Activity.java create mode 100644 src/main/java/manage/FITBITData/HeartRate.java create mode 100644 src/main/java/manage/FITBITData/Location.java create mode 100644 src/main/java/manage/FITBITData/Sleep.java delete mode 100644 src/main/java/manage/FITIBITData.java delete mode 100644 src/main/java/manage/UserData.java diff --git a/build.gradle b/build.gradle index b6edeb2..a87468b 100644 --- a/build.gradle +++ b/build.gradle @@ -14,7 +14,6 @@ repositories { dependencies { testCompile group: 'junit', name: 'junit', version: '4.12' // compile "com.sparkjava:spark-core:2.5.5" -// compile "org.slf4j:slf4j-simple:1.7.21" compile "com.google.code.gson:gson:2.8.0" // compile "org.xerial:sqlite-jdbc:3.15.1" compile 'org.apache.httpcomponents:httpclient:4.5.3' @@ -23,9 +22,8 @@ dependencies { // z-way-lib and all its dependencies (from https://github.com/pathec/ZWay-library-for-Java) - compile files('lib/zway-lib-0.2.9-SNAPSHOT.jar') -// compile 'com.google.code.gson:gson:2.4' //already up there + compile 'org.apache.commons:commons-lang3:3.4' compile 'org.eclipse.jetty:jetty-client:9.3.11.v20160721' compile 'org.eclipse.jetty:jetty-http:9.3.11.v20160721' @@ -35,4 +33,7 @@ dependencies { compile 'org.eclipse.jetty.websocket:websocket-client:9.3.12.v20160915' compile 'org.eclipse.jetty.websocket:websocket-common:9.3.12.v20160915' compile 'org.slf4j:slf4j-simple:1.7.21' + + //for objectMapper + compile group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: '2.9.5' } diff --git a/src/main/java/manage/AuthFITBIT.java b/src/main/java/manage/AuthFITBIT.java index 30739df..d7bfa4b 100644 --- a/src/main/java/manage/AuthFITBIT.java +++ b/src/main/java/manage/AuthFITBIT.java @@ -1,28 +1,31 @@ package manage; + +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.ObjectMapper; import com.google.api.client.auth.oauth2.AuthorizationCodeFlow; import com.google.api.client.auth.oauth2.BearerToken; -import com.google.api.client.auth.oauth2.ClientParametersAuthentication; import com.google.api.client.auth.oauth2.Credential; +import com.google.api.client.auth.oauth2.TokenResponseException; import com.google.api.client.extensions.java6.auth.oauth2.AuthorizationCodeInstalledApp; import com.google.api.client.extensions.jetty.auth.oauth2.LocalServerReceiver; -import com.google.api.client.http.GenericUrl; -import com.google.api.client.http.HttpRequest; -import com.google.api.client.http.HttpRequestFactory; -import com.google.api.client.http.HttpRequestInitializer; -import com.google.api.client.http.HttpTransport; +import com.google.api.client.http.*; import com.google.api.client.http.javanet.NetHttpTransport; +import com.google.api.client.json.GenericJson; import com.google.api.client.json.JsonFactory; import com.google.api.client.json.JsonObjectParser; import com.google.api.client.json.jackson2.JacksonFactory; import com.google.api.client.util.store.DataStoreFactory; import com.google.api.client.util.store.FileDataStoreFactory; +import manage.FITBITData.*; import java.io.IOException; import java.util.Arrays; + public class AuthFITBIT { + private static ObjectMapper mapper = new ObjectMapper(); /** Directory to store user credentials. */ /* Throw a Warning when change permission: they said it's a google bug 'cause is meant to run in linux/unix * @@ -63,7 +66,7 @@ public class AuthFITBIT { HTTP_TRANSPORT, JSON_FACTORY, new GenericUrl(TOKEN_SERVER_URL), - new ClientParametersAuthentication( + new BasicAuthentication( OAuth2ClientCredentials.API_KEY, OAuth2ClientCredentials.API_SECRET), OAuth2ClientCredentials.API_KEY, AUTHORIZATION_SERVER_URL).setScopes(Arrays.asList(SCOPE)) @@ -72,31 +75,40 @@ public class AuthFITBIT { LocalServerReceiver receiver = new LocalServerReceiver.Builder().setHost( OAuth2ClientCredentials.DOMAIN).setPort(OAuth2ClientCredentials.PORT).build(); - return new AuthorizationCodeInstalledApp(flow, receiver).authorize("user" ); + return new AuthorizationCodeInstalledApp(flow, receiver).authorize( "user" ); } private static void run(HttpRequestFactory requestFactory) throws IOException { - FITBITUrl url = new FITBITUrl("https://api.fitbit.com/1/user/-/profile.json"); //modificare con token? - url.setFields("activity,heartrate,location,sleep"); + FITBITUrl url = new FITBITUrl("https://api.fitbit.com/1/user/-/activities/heart/date/today/1d.json"); //modificare con token? +// url.setFields("activity,heartrate,location,sleep"); + url.setFields(""); HttpRequest request = requestFactory.buildGetRequest(url); - UserData data = request.execute().parseAs(UserData.class); - if (data.list.isEmpty()) { - System.out.println("Error in retrieve user data"); - } else/* { - if (data.hasMore) { - System.out.print("First "); - }*/ //i don't think is necessary - /* System.out.println(data.list.size() + " favorite videos found:"); - */for (FITIBITData datas: data.list) { - System.out.println(datas.toString());/* - System.out.println("-----------------------------------------------"); - System.out.println("ID: " + datas.id); - System.out.println("Title: " + datas.title); - System.out.println("Tags: " + datas.tags); - System.out.println("URL: " + datas.url); - */ }/* - }*/ //neither this + HttpResponse response = request.execute(); + + + // System.out.println(response.parseAsString()); + + + try { + GenericJson json = response.parseAs(GenericJson.class); + + // Sleep sleep = mapper.readValue(json.toString(), Sleep.class); + // Location location = mapper.readValue(json.toString(), Location.class); + mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + HeartRate heart = mapper.readValue(json.toString(), HeartRate.class); + System.out.println(json.toPrettyString()); + // Activity activity = mapper.readValue(json.toString(), Activity.class); + + // System.out.println(json.toPrettyString()); + response.disconnect(); + } + catch(NullPointerException e){ + e.printStackTrace(); + response.disconnect(); + } + + } public static void main(String[] args) { @@ -115,11 +127,18 @@ public class AuthFITBIT { System.err.print("DONE"); // Success! return; - } catch (IOException e) { - System.err.println(e.getClass().getSimpleName()+" "+e.getMessage()); - } catch (Throwable t) { - t.printStackTrace(); } + catch (TokenResponseException e) { + e.printStackTrace(); + } + catch (IOException e) { + System.err.println(e.getClass().getSimpleName() + " " + e.getMessage()); + e.printStackTrace(); + } + catch (Exception e) { + e.printStackTrace(); + } + System.exit(1); } diff --git a/src/main/java/manage/FITBITData/Activity.java b/src/main/java/manage/FITBITData/Activity.java new file mode 100644 index 0000000..4382abe --- /dev/null +++ b/src/main/java/manage/FITBITData/Activity.java @@ -0,0 +1,4 @@ +package manage.FITBITData; + +public class Activity { +} diff --git a/src/main/java/manage/FITBITData/HeartRate.java b/src/main/java/manage/FITBITData/HeartRate.java new file mode 100644 index 0000000..310f144 --- /dev/null +++ b/src/main/java/manage/FITBITData/HeartRate.java @@ -0,0 +1,10 @@ +package manage.FITBITData; + +import com.fasterxml.jackson.annotation.JsonProperty; + + +public class HeartRate { + + @JsonProperty("dateTime") + public String date; +} diff --git a/src/main/java/manage/FITBITData/Location.java b/src/main/java/manage/FITBITData/Location.java new file mode 100644 index 0000000..7654896 --- /dev/null +++ b/src/main/java/manage/FITBITData/Location.java @@ -0,0 +1,4 @@ +package manage.FITBITData; + +public class Location { +} diff --git a/src/main/java/manage/FITBITData/Sleep.java b/src/main/java/manage/FITBITData/Sleep.java new file mode 100644 index 0000000..bd65eea --- /dev/null +++ b/src/main/java/manage/FITBITData/Sleep.java @@ -0,0 +1,4 @@ +package manage.FITBITData; + +public class Sleep { +} diff --git a/src/main/java/manage/FITIBITData.java b/src/main/java/manage/FITIBITData.java deleted file mode 100644 index 374cbf7..0000000 --- a/src/main/java/manage/FITIBITData.java +++ /dev/null @@ -1,21 +0,0 @@ -package manage; - -import com.google.api.client.util.Key; - -import java.util.List; - - -public class FITIBITData { - - @Key - public String activity; - - @Key - public String heartrate; - - @Key - public String sleep; - - @Key - public String location; -} \ No newline at end of file diff --git a/src/main/java/manage/UserData.java b/src/main/java/manage/UserData.java deleted file mode 100644 index 68bc9cc..0000000 --- a/src/main/java/manage/UserData.java +++ /dev/null @@ -1,17 +0,0 @@ -package manage; - - -import com.google.api.client.util.Key; -import java.util.List; - -public class UserData { - - @Key - public List list; -/* - @Key - public int limit; - - @Key("has more") - public boolean hasMore;*/ //don't think are needed -} \ No newline at end of file From 59aaba9b6349bfe7440fef8ba791c14f2ac4fc64 Mon Sep 17 00:00:00 2001 From: Giulia <20015091@studenti.uniupo.it> Date: Fri, 8 Jun 2018 11:30:26 +0200 Subject: [PATCH 2/7] Updated AuthFITBIT class --- src/main/java/Main.java | 9 ++ src/main/java/manage/AuthFITBIT.java | 82 ++++++------------- .../java/manage/FITBITData/HeartRate.java | 11 ++- 3 files changed, 43 insertions(+), 59 deletions(-) create mode 100644 src/main/java/Main.java diff --git a/src/main/java/Main.java b/src/main/java/Main.java new file mode 100644 index 0000000..8154ef3 --- /dev/null +++ b/src/main/java/Main.java @@ -0,0 +1,9 @@ +import manage.AuthFITBIT; + +public class Main { + public static void main(String[] args) throws Exception { + AuthFITBIT fitbit = new AuthFITBIT(); + + fitbit.run("https://api.fitbit.com/1/user/-/activities/heart/date/today/1d.json"); + } +} diff --git a/src/main/java/manage/AuthFITBIT.java b/src/main/java/manage/AuthFITBIT.java index d7bfa4b..dbbd8da 100644 --- a/src/main/java/manage/AuthFITBIT.java +++ b/src/main/java/manage/AuthFITBIT.java @@ -2,6 +2,7 @@ package manage; import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.api.client.auth.oauth2.AuthorizationCodeFlow; import com.google.api.client.auth.oauth2.BearerToken; @@ -25,6 +26,18 @@ import java.util.Arrays; public class AuthFITBIT { + private final HttpRequestFactory requestFactory; + + public AuthFITBIT() throws Exception { + DATA_STORE_FACTORY = new FileDataStoreFactory(DATA_STORE_DIR); + final Credential credential = authorize(); + + this.requestFactory = HTTP_TRANSPORT.createRequestFactory( request -> { + credential.initialize(request); + request.setParser(new JsonObjectParser(JSON_FACTORY)); + }); + } + private static ObjectMapper mapper = new ObjectMapper(); /** Directory to store user credentials. */ /* Throw a Warning when change permission: they said it's a google bug 'cause is meant to run in linux/unix @@ -58,7 +71,7 @@ public class AuthFITBIT { private static final String AUTHORIZATION_SERVER_URL = "https://www.fitbit.com/oauth2/authorize"; /** Authorizes the installed application to access user's protected data. */ - private static Credential authorize() throws Exception { + private Credential authorize() throws Exception { OAuth2ClientCredentials.errorIfNotSpecified(); // set up authorization code flow AuthorizationCodeFlow flow = new AuthorizationCodeFlow.Builder(BearerToken @@ -78,68 +91,23 @@ public class AuthFITBIT { return new AuthorizationCodeInstalledApp(flow, receiver).authorize( "user" ); } - private static void run(HttpRequestFactory requestFactory) throws IOException { - FITBITUrl url = new FITBITUrl("https://api.fitbit.com/1/user/-/activities/heart/date/today/1d.json"); //modificare con token? + public void run(String url) throws IOException { + FITBITUrl fitbitUrl = new FITBITUrl(url); //modificare con token? // url.setFields("activity,heartrate,location,sleep"); - url.setFields(""); + fitbitUrl.setFields(""); - HttpRequest request = requestFactory.buildGetRequest(url); + HttpRequest request = requestFactory.buildGetRequest(fitbitUrl); HttpResponse response = request.execute(); - - // System.out.println(response.parseAsString()); - - - try { - GenericJson json = response.parseAs(GenericJson.class); - - // Sleep sleep = mapper.readValue(json.toString(), Sleep.class); - // Location location = mapper.readValue(json.toString(), Location.class); - mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - HeartRate heart = mapper.readValue(json.toString(), HeartRate.class); - System.out.println(json.toPrettyString()); - // Activity activity = mapper.readValue(json.toString(), Activity.class); - - // System.out.println(json.toPrettyString()); - response.disconnect(); - } - catch(NullPointerException e){ - e.printStackTrace(); - response.disconnect(); - } - - - } - - public static void main(String[] args) { try { - DATA_STORE_FACTORY = new FileDataStoreFactory(DATA_STORE_DIR); - final Credential credential = authorize(); - HttpRequestFactory requestFactory = - HTTP_TRANSPORT.createRequestFactory(new HttpRequestInitializer() { - @Override - public void initialize(HttpRequest request) throws IOException { - credential.initialize(request); - request.setParser(new JsonObjectParser(JSON_FACTORY)); - } - }); - run(requestFactory); - System.err.print("DONE"); - // Success! - return; - } - catch (TokenResponseException e) { + GenericJson json = response.parseAs(GenericJson.class); + HeartRate heart = mapper.readValue(json.toString(), HeartRate.class); + // System.out.println(json.toPrettyString()); + System.out.println(heart.dateTime); + response.disconnect(); + } catch(NullPointerException e){ e.printStackTrace(); + response.disconnect(); } - catch (IOException e) { - System.err.println(e.getClass().getSimpleName() + " " + e.getMessage()); - e.printStackTrace(); - } - catch (Exception e) { - e.printStackTrace(); - } - - System.exit(1); } - } diff --git a/src/main/java/manage/FITBITData/HeartRate.java b/src/main/java/manage/FITBITData/HeartRate.java index 310f144..b8259bb 100644 --- a/src/main/java/manage/FITBITData/HeartRate.java +++ b/src/main/java/manage/FITBITData/HeartRate.java @@ -1,10 +1,17 @@ package manage.FITBITData; import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import java.util.Map; +@JsonIgnoreProperties(ignoreUnknown = true) public class HeartRate { - @JsonProperty("dateTime") - public String date; + public String dateTime; + + @JsonProperty("activities-heart") + public void quelloCheVoglio(Map[] activities){ + dateTime = (String) activities[0].get("dateTime"); + } } From caff07bc5b8bd4302c83ea40e64a2b408d409fec Mon Sep 17 00:00:00 2001 From: Giulia <20015091@studenti.uniupo.it> Date: Fri, 8 Jun 2018 12:39:37 +0200 Subject: [PATCH 3/7] added method to retrieve heartbeats, needs to be tested --- src/main/java/Main.java | 7 +++- src/main/java/manage/AuthFITBIT.java | 36 +++++++------------ .../java/manage/FITBITData/HeartRate.java | 11 ++++++ src/main/java/manage/FITBITData/Sleep.java | 8 +++++ .../java/manage/OAuth2ClientCredentials.java | 9 ----- 5 files changed, 38 insertions(+), 33 deletions(-) diff --git a/src/main/java/Main.java b/src/main/java/Main.java index 8154ef3..c6d1d31 100644 --- a/src/main/java/Main.java +++ b/src/main/java/Main.java @@ -1,9 +1,14 @@ import manage.AuthFITBIT; +import manage.FITBITData.HeartRate; +import manage.FITBITData.Sleep; public class Main { public static void main(String[] args) throws Exception { AuthFITBIT fitbit = new AuthFITBIT(); - fitbit.run("https://api.fitbit.com/1/user/-/activities/heart/date/today/1d.json"); + HeartRate h = fitbit.run("https://api.fitbit.com/1/user/-/activities/heart/date/today/1d.json", HeartRate.class); // 1sec/time/00:00/00:01.json + Sleep s = fitbit.run("https://api.fitbit.com/1.2/user/-/sleep/date/today.json", Sleep.class); + + System.out.println(h.dateTime + " " + h.average); } } diff --git a/src/main/java/manage/AuthFITBIT.java b/src/main/java/manage/AuthFITBIT.java index dbbd8da..a13ddcc 100644 --- a/src/main/java/manage/AuthFITBIT.java +++ b/src/main/java/manage/AuthFITBIT.java @@ -1,13 +1,9 @@ package manage; - -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.api.client.auth.oauth2.AuthorizationCodeFlow; import com.google.api.client.auth.oauth2.BearerToken; import com.google.api.client.auth.oauth2.Credential; -import com.google.api.client.auth.oauth2.TokenResponseException; import com.google.api.client.extensions.java6.auth.oauth2.AuthorizationCodeInstalledApp; import com.google.api.client.extensions.jetty.auth.oauth2.LocalServerReceiver; import com.google.api.client.http.*; @@ -18,7 +14,6 @@ import com.google.api.client.json.JsonObjectParser; import com.google.api.client.json.jackson2.JacksonFactory; import com.google.api.client.util.store.DataStoreFactory; import com.google.api.client.util.store.FileDataStoreFactory; -import manage.FITBITData.*; import java.io.IOException; import java.util.Arrays; @@ -62,17 +57,11 @@ public class AuthFITBIT { /** Global instance of the JSON factory. */ private static final JsonFactory JSON_FACTORY = new JacksonFactory(); - /* When i try to accept the request it'll send a 401 Unauthorized - * on internet i found that this message appears when the client put a wrong - * header, client_id or client_secret - * https://dev.fitbit.com/build/reference/web-api/oauth2/ -> ALT+F "401 Unauthorized" - */ private static final String TOKEN_SERVER_URL = " https://api.fitbit.com/oauth2/token"; private static final String AUTHORIZATION_SERVER_URL = "https://www.fitbit.com/oauth2/authorize"; /** Authorizes the installed application to access user's protected data. */ private Credential authorize() throws Exception { - OAuth2ClientCredentials.errorIfNotSpecified(); // set up authorization code flow AuthorizationCodeFlow flow = new AuthorizationCodeFlow.Builder(BearerToken .authorizationHeaderAccessMethod(), @@ -91,23 +80,24 @@ public class AuthFITBIT { return new AuthorizationCodeInstalledApp(flow, receiver).authorize( "user" ); } - public void run(String url) throws IOException { - FITBITUrl fitbitUrl = new FITBITUrl(url); //modificare con token? + public O run(String url, Class classe) throws IOException { + FITBITUrl fitbitUrl = new FITBITUrl(url); // url.setFields("activity,heartrate,location,sleep"); fitbitUrl.setFields(""); HttpRequest request = requestFactory.buildGetRequest(fitbitUrl); HttpResponse response = request.execute(); - try { - GenericJson json = response.parseAs(GenericJson.class); - HeartRate heart = mapper.readValue(json.toString(), HeartRate.class); - // System.out.println(json.toPrettyString()); - System.out.println(heart.dateTime); - response.disconnect(); - } catch(NullPointerException e){ - e.printStackTrace(); - response.disconnect(); - } + GenericJson json = response.parseAs(GenericJson.class); + response.disconnect(); + + System.out.println("--------------------"); + System.out.println(classe.getSimpleName()); + System.out.println(json.toPrettyString()); + + return mapper.readValue(json.toString(), classe); + + // System.out.println(json.toPrettyString()); + } } diff --git a/src/main/java/manage/FITBITData/HeartRate.java b/src/main/java/manage/FITBITData/HeartRate.java index b8259bb..e4aa16f 100644 --- a/src/main/java/manage/FITBITData/HeartRate.java +++ b/src/main/java/manage/FITBITData/HeartRate.java @@ -9,9 +9,20 @@ import java.util.Map; public class HeartRate { public String dateTime; + public double average; @JsonProperty("activities-heart") public void quelloCheVoglio(Map[] activities){ dateTime = (String) activities[0].get("dateTime"); } + + @JsonProperty("activities-heart-intraday") + public void qualcosAltro(Map[]> map) { + Map[] data = map.get("dataset"); + + int sum = 0; + for(Map dat: data) + sum += Integer.parseInt(dat.get("value")); + average = ((double)sum)/data.length; + } } diff --git a/src/main/java/manage/FITBITData/Sleep.java b/src/main/java/manage/FITBITData/Sleep.java index bd65eea..f7e1191 100644 --- a/src/main/java/manage/FITBITData/Sleep.java +++ b/src/main/java/manage/FITBITData/Sleep.java @@ -1,4 +1,12 @@ package manage.FITBITData; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; + +@JsonIgnoreProperties(ignoreUnknown = true) public class Sleep { + + public String time; + + } diff --git a/src/main/java/manage/OAuth2ClientCredentials.java b/src/main/java/manage/OAuth2ClientCredentials.java index 0a77a40..ccbf967 100644 --- a/src/main/java/manage/OAuth2ClientCredentials.java +++ b/src/main/java/manage/OAuth2ClientCredentials.java @@ -13,14 +13,5 @@ public class OAuth2ClientCredentials { /** Domain name in the "Callback URL". */ public static final String DOMAIN = "127.0.0.1"; - - public static void errorIfNotSpecified() { - if (API_KEY.startsWith("Enter ") || API_SECRET.startsWith("Enter ")) { - System.out.println( - "Enter API Key and API Secret from http://www.dailymotion.com/profile/developer" - + " into API_KEY and API_SECRET in " + OAuth2ClientCredentials.class); - System.exit(1); - } - } } From e1693911e3c6d732a634705528c55ed54d120e1c Mon Sep 17 00:00:00 2001 From: Giulia <20015091@studenti.uniupo.it> Date: Thu, 14 Jun 2018 09:05:11 +0200 Subject: [PATCH 4/7] new passes on FITBIT --- src/main/java/Main.java | 11 ++++---- src/main/java/manage/AuthFITBIT.java | 29 ++++++++++++++++----- src/main/java/manage/FITBITData/Device.java | 24 +++++++++++++++++ 3 files changed, 53 insertions(+), 11 deletions(-) create mode 100644 src/main/java/manage/FITBITData/Device.java diff --git a/src/main/java/Main.java b/src/main/java/Main.java index c6d1d31..605b942 100644 --- a/src/main/java/Main.java +++ b/src/main/java/Main.java @@ -1,14 +1,15 @@ import manage.AuthFITBIT; -import manage.FITBITData.HeartRate; -import manage.FITBITData.Sleep; +import manage.FITBITData.*; public class Main { public static void main(String[] args) throws Exception { AuthFITBIT fitbit = new AuthFITBIT(); - HeartRate h = fitbit.run("https://api.fitbit.com/1/user/-/activities/heart/date/today/1d.json", HeartRate.class); // 1sec/time/00:00/00:01.json - Sleep s = fitbit.run("https://api.fitbit.com/1.2/user/-/sleep/date/today.json", Sleep.class); + // HeartRate h = fitbit.run("https://api.fitbit.com/1/user/-/activities/heart/date/today/1d.json", HeartRate.class, false); // 1sec/time/00:00/00:01.json + // Sleep s = fitbit.run("https://api.fitbit.com/1.2/user/-/sleep/date/today.json", Sleep.class, false); - System.out.println(h.dateTime + " " + h.average); + Device dev = fitbit.run("https://api.fitbit.com/1/user/-/devices.json", Device.class, true); + //System.out.println(dev); + //System.out.println(h.dateTime + " " + h.average); } } diff --git a/src/main/java/manage/AuthFITBIT.java b/src/main/java/manage/AuthFITBIT.java index a13ddcc..e4c722b 100644 --- a/src/main/java/manage/AuthFITBIT.java +++ b/src/main/java/manage/AuthFITBIT.java @@ -14,9 +14,16 @@ import com.google.api.client.json.JsonObjectParser; import com.google.api.client.json.jackson2.JacksonFactory; import com.google.api.client.util.store.DataStoreFactory; import com.google.api.client.util.store.FileDataStoreFactory; +import com.sun.xml.internal.xsom.impl.scd.Iterators; +import manage.FITBITData.Device; + import java.io.IOException; + +import java.util.ArrayList; import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; public class AuthFITBIT { @@ -50,7 +57,7 @@ public class AuthFITBIT { private static FileDataStoreFactory DATA_STORE_FACTORY; /** OAuth 2 scope. */ - private static final String SCOPE[] = new String[]{"activity","heartrate","location","sleep"}; + private static final String SCOPE[] = new String[]{"activity","heartrate","location","sleep","settings"}; /** Global instance of the HTTP transport. */ private static final HttpTransport HTTP_TRANSPORT = new NetHttpTransport(); @@ -80,20 +87,30 @@ public class AuthFITBIT { return new AuthorizationCodeInstalledApp(flow, receiver).authorize( "user" ); } - public O run(String url, Class classe) throws IOException { + public O run(String url, Class classe, boolean isDev) throws IOException { FITBITUrl fitbitUrl = new FITBITUrl(url); // url.setFields("activity,heartrate,location,sleep"); fitbitUrl.setFields(""); + GenericJson json; HttpRequest request = requestFactory.buildGetRequest(fitbitUrl); HttpResponse response = request.execute(); - GenericJson json = response.parseAs(GenericJson.class); + if (isDev){ + Device dev = new Device(); + dev.getLastSyncTime(response.parseAs(Iterators.Array>.class)); + response.disconnect(); + + return mapper.readValue(map.toString(), classe); + } + else { + json = response.parseAs(GenericJson.class); + } response.disconnect(); - System.out.println("--------------------"); - System.out.println(classe.getSimpleName()); - System.out.println(json.toPrettyString()); + // System.out.println("--------------------"); + //System.out.println(classe.getSimpleName()); + //System.out.println(json.toPrettyString()); return mapper.readValue(json.toString(), classe); diff --git a/src/main/java/manage/FITBITData/Device.java b/src/main/java/manage/FITBITData/Device.java new file mode 100644 index 0000000..23db1e8 --- /dev/null +++ b/src/main/java/manage/FITBITData/Device.java @@ -0,0 +1,24 @@ +package manage.FITBITData; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; + +import java.util.Map; + +@JsonIgnoreProperties(ignoreUnknown = true) +public class Device { + + public String lastSyncTime; + + // @JsonProperty ("lastSyncTime") + public String getLastSyncTime(Map[] sync){ + lastSyncTime = null; + for(Map d: sync) { + String temp = d.get("lastSyncTime"); + if ((lastSyncTime == null) || (lastSyncTime.compareTo(temp) < 0)) + lastSyncTime = temp; + + } + return lastSyncTime; + } + +} From 051f1ce12124c7aa998980260c53da473173337e Mon Sep 17 00:00:00 2001 From: 20015091 <20015091@studenti.uniupo.it> Date: Thu, 14 Jun 2018 12:05:52 +0200 Subject: [PATCH 5/7] FITBIT is almost finished --- SeniorAssistant.iml | 1 - src/main/java/Main.java | 9 +++-- src/main/java/manage/AuthFITBIT.java | 35 +++++++------------ src/main/java/manage/FITBITData/Activity.java | 4 --- src/main/java/manage/FITBITData/Device.java | 4 +-- .../java/manage/FITBITData/HeartRate.java | 11 +++--- src/main/java/manage/FITBITData/Location.java | 4 --- 7 files changed, 24 insertions(+), 44 deletions(-) delete mode 100644 src/main/java/manage/FITBITData/Activity.java delete mode 100644 src/main/java/manage/FITBITData/Location.java diff --git a/SeniorAssistant.iml b/SeniorAssistant.iml index 306ea4c..601138d 100644 --- a/SeniorAssistant.iml +++ b/SeniorAssistant.iml @@ -5,7 +5,6 @@ - diff --git a/src/main/java/Main.java b/src/main/java/Main.java index 605b942..358e118 100644 --- a/src/main/java/Main.java +++ b/src/main/java/Main.java @@ -5,11 +5,10 @@ public class Main { public static void main(String[] args) throws Exception { AuthFITBIT fitbit = new AuthFITBIT(); - // HeartRate h = fitbit.run("https://api.fitbit.com/1/user/-/activities/heart/date/today/1d.json", HeartRate.class, false); // 1sec/time/00:00/00:01.json - // Sleep s = fitbit.run("https://api.fitbit.com/1.2/user/-/sleep/date/today.json", Sleep.class, false); + HeartRate h = fitbit.run("https://api.fitbit.com/1/user/-/activities/heart/date/today/1d/1sec/time/11:00/11:45.json", HeartRate.class); + //Sleep s = fitbit.run("https://api.fitbit.com/1.2/user/-/sleep/date/today.json", Sleep.class); + Device dev = fitbit.run("https://api.fitbit.com/1/user/-/devices.json", Device.class); - Device dev = fitbit.run("https://api.fitbit.com/1/user/-/devices.json", Device.class, true); - //System.out.println(dev); - //System.out.println(h.dateTime + " " + h.average); + System.out.println(h.dateTime + " " + h.average); } } diff --git a/src/main/java/manage/AuthFITBIT.java b/src/main/java/manage/AuthFITBIT.java index e4c722b..f5aac7c 100644 --- a/src/main/java/manage/AuthFITBIT.java +++ b/src/main/java/manage/AuthFITBIT.java @@ -14,16 +14,11 @@ import com.google.api.client.json.JsonObjectParser; import com.google.api.client.json.jackson2.JacksonFactory; import com.google.api.client.util.store.DataStoreFactory; import com.google.api.client.util.store.FileDataStoreFactory; -import com.sun.xml.internal.xsom.impl.scd.Iterators; import manage.FITBITData.Device; - import java.io.IOException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.Map; +import java.util.*; public class AuthFITBIT { @@ -57,7 +52,7 @@ public class AuthFITBIT { private static FileDataStoreFactory DATA_STORE_FACTORY; /** OAuth 2 scope. */ - private static final String SCOPE[] = new String[]{"activity","heartrate","location","sleep","settings"}; + private static final String SCOPE[] = new String[]{"activity","heartrate","sleep","settings"}; /** Global instance of the HTTP transport. */ private static final HttpTransport HTTP_TRANSPORT = new NetHttpTransport(); @@ -75,7 +70,7 @@ public class AuthFITBIT { HTTP_TRANSPORT, JSON_FACTORY, new GenericUrl(TOKEN_SERVER_URL), - new BasicAuthentication( + new BasicAuthentication ( OAuth2ClientCredentials.API_KEY, OAuth2ClientCredentials.API_SECRET), OAuth2ClientCredentials.API_KEY, AUTHORIZATION_SERVER_URL).setScopes(Arrays.asList(SCOPE)) @@ -87,34 +82,28 @@ public class AuthFITBIT { return new AuthorizationCodeInstalledApp(flow, receiver).authorize( "user" ); } - public O run(String url, Class classe, boolean isDev) throws IOException { + public O run(String url, Class classe) throws IOException { FITBITUrl fitbitUrl = new FITBITUrl(url); -// url.setFields("activity,heartrate,location,sleep"); fitbitUrl.setFields(""); GenericJson json; HttpRequest request = requestFactory.buildGetRequest(fitbitUrl); HttpResponse response = request.execute(); + O ret = null; - if (isDev){ + if (classe.equals(Device.class)) { + List> arr = response.parseAs(List.class); Device dev = new Device(); - dev.getLastSyncTime(response.parseAs(Iterators.Array>.class)); - response.disconnect(); + dev.getLastSyncTime(arr); - return mapper.readValue(map.toString(), classe); + ret = (O)dev; } else { json = response.parseAs(GenericJson.class); + ret = mapper.readValue(json.toString(), classe); } + response.disconnect(); - - // System.out.println("--------------------"); - //System.out.println(classe.getSimpleName()); - //System.out.println(json.toPrettyString()); - - return mapper.readValue(json.toString(), classe); - - // System.out.println(json.toPrettyString()); - + return ret; } } diff --git a/src/main/java/manage/FITBITData/Activity.java b/src/main/java/manage/FITBITData/Activity.java deleted file mode 100644 index 4382abe..0000000 --- a/src/main/java/manage/FITBITData/Activity.java +++ /dev/null @@ -1,4 +0,0 @@ -package manage.FITBITData; - -public class Activity { -} diff --git a/src/main/java/manage/FITBITData/Device.java b/src/main/java/manage/FITBITData/Device.java index 23db1e8..cdfe9ea 100644 --- a/src/main/java/manage/FITBITData/Device.java +++ b/src/main/java/manage/FITBITData/Device.java @@ -2,6 +2,7 @@ package manage.FITBITData; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import java.util.List; import java.util.Map; @JsonIgnoreProperties(ignoreUnknown = true) @@ -10,13 +11,12 @@ public class Device { public String lastSyncTime; // @JsonProperty ("lastSyncTime") - public String getLastSyncTime(Map[] sync){ + public String getLastSyncTime(List> sync){ lastSyncTime = null; for(Map d: sync) { String temp = d.get("lastSyncTime"); if ((lastSyncTime == null) || (lastSyncTime.compareTo(temp) < 0)) lastSyncTime = temp; - } return lastSyncTime; } diff --git a/src/main/java/manage/FITBITData/HeartRate.java b/src/main/java/manage/FITBITData/HeartRate.java index e4aa16f..0e59062 100644 --- a/src/main/java/manage/FITBITData/HeartRate.java +++ b/src/main/java/manage/FITBITData/HeartRate.java @@ -3,6 +3,7 @@ package manage.FITBITData; import com.fasterxml.jackson.annotation.JsonProperty; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import java.util.List; import java.util.Map; @JsonIgnoreProperties(ignoreUnknown = true) @@ -17,12 +18,12 @@ public class HeartRate { } @JsonProperty("activities-heart-intraday") - public void qualcosAltro(Map[]> map) { - Map[] data = map.get("dataset"); + public void qualcosAltro(Map map) { + List data = (List) map.get("dataset"); int sum = 0; - for(Map dat: data) - sum += Integer.parseInt(dat.get("value")); - average = ((double)sum)/data.length; + for(Map dat: data) + sum += (int)dat.get("value"); + average = ((double)sum)/data.size(); } } diff --git a/src/main/java/manage/FITBITData/Location.java b/src/main/java/manage/FITBITData/Location.java deleted file mode 100644 index 7654896..0000000 --- a/src/main/java/manage/FITBITData/Location.java +++ /dev/null @@ -1,4 +0,0 @@ -package manage.FITBITData; - -public class Location { -} From 18a54e288809787e2136958a8bd23dbb5d99e747 Mon Sep 17 00:00:00 2001 From: Dawit Gulino 20013954 <32634333+DawitG96@users.noreply.github.com> Date: Thu, 28 Jun 2018 16:42:27 +0200 Subject: [PATCH 6/7] Added new Class for FitBit and Fixes --- .gitignore | 1 + SeniorAssistant.iml | 1 + src/main/java/Main.java | 12 +-- src/main/java/manage/AuthFITBIT.java | 34 ++++--- src/main/java/manage/FITBITData/FitBit.java | 95 +++++++++++++++++++ .../java/manage/FITBITData/HeartRate.java | 13 ++- src/main/java/manage/FITBITData/Sleep.java | 11 ++- src/main/java/manage/FITBITData/Steps.java | 5 + 8 files changed, 149 insertions(+), 23 deletions(-) create mode 100644 src/main/java/manage/FITBITData/FitBit.java create mode 100644 src/main/java/manage/FITBITData/Steps.java diff --git a/.gitignore b/.gitignore index 2ae46c9..020929a 100644 --- a/.gitignore +++ b/.gitignore @@ -28,6 +28,7 @@ hs_err_pid* .idea/ .idea/*.xml .gradle/ +.iml # eclipse things # .classpath diff --git a/SeniorAssistant.iml b/SeniorAssistant.iml index 601138d..306ea4c 100644 --- a/SeniorAssistant.iml +++ b/SeniorAssistant.iml @@ -5,6 +5,7 @@ + diff --git a/src/main/java/Main.java b/src/main/java/Main.java index 358e118..6878c2b 100644 --- a/src/main/java/Main.java +++ b/src/main/java/Main.java @@ -3,12 +3,12 @@ import manage.FITBITData.*; public class Main { public static void main(String[] args) throws Exception { - AuthFITBIT fitbit = new AuthFITBIT(); + FitBit fitBit = new FitBit(); + fitBit.getHoursSleep(); - HeartRate h = fitbit.run("https://api.fitbit.com/1/user/-/activities/heart/date/today/1d/1sec/time/11:00/11:45.json", HeartRate.class); - //Sleep s = fitbit.run("https://api.fitbit.com/1.2/user/-/sleep/date/today.json", Sleep.class); - Device dev = fitbit.run("https://api.fitbit.com/1/user/-/devices.json", Device.class); - - System.out.println(h.dateTime + " " + h.average); + System.out.println("Today's average heart-rate: "+fitBit.getHeartRate()); + System.out.println("Today's hours of sleep: "+fitBit.getHoursSleep()); + System.out.println("Today's steps: "+fitBit.getSteps()); + System.out.println("Fine."); } } diff --git a/src/main/java/manage/AuthFITBIT.java b/src/main/java/manage/AuthFITBIT.java index f5aac7c..df47eac 100644 --- a/src/main/java/manage/AuthFITBIT.java +++ b/src/main/java/manage/AuthFITBIT.java @@ -82,28 +82,36 @@ public class AuthFITBIT { return new AuthorizationCodeInstalledApp(flow, receiver).authorize( "user" ); } - public O run(String url, Class classe) throws IOException { + public O run(String url, Class returnClass) throws IOException { + return run(url, returnClass, false); + } + + public O run(String url, Class returnClass, boolean useAsParse) throws IOException { FITBITUrl fitbitUrl = new FITBITUrl(url); fitbitUrl.setFields(""); - GenericJson json; HttpRequest request = requestFactory.buildGetRequest(fitbitUrl); HttpResponse response = request.execute(); - O ret = null; - if (classe.equals(Device.class)) { - List> arr = response.parseAs(List.class); - Device dev = new Device(); - dev.getLastSyncTime(arr); + /* + GenericJson json = response.parseAs(GenericJson.class); + response.disconnect(); - ret = (O)dev; - } - else { - json = response.parseAs(GenericJson.class); - ret = mapper.readValue(json.toString(), classe); - } + System.out.println(returnClass.getSimpleName()); + System.out.println(url); + System.out.println(json.toPrettyString()); + + return mapper.readValue(json.toString(), returnClass); + */ + + /**/ + O ret = ( useAsParse ? + response.parseAs(returnClass) : + mapper.readValue(response.parseAs(GenericJson.class).toString(), returnClass) + ); response.disconnect(); return ret; + /**/ } } diff --git a/src/main/java/manage/FITBITData/FitBit.java b/src/main/java/manage/FITBITData/FitBit.java new file mode 100644 index 0000000..436e541 --- /dev/null +++ b/src/main/java/manage/FITBITData/FitBit.java @@ -0,0 +1,95 @@ +package manage.FITBITData; + +import manage.AuthFITBIT; + +import java.io.IOException; +import java.util.Calendar; +import java.util.HashMap; +import java.util.Map; + +public class FitBit { + + public static final String BASIC_URL = "https://api.fitbit.com/"; + public static final String USER = "/user/-/"; + private static final long MINUTE = 60000; /* 5 minutes in millisec */ + + private final AuthFITBIT auth; + private final Map latestRequest = new HashMap<>(); + private final Calendar calendar = Calendar.getInstance(); + + private HeartRate heart = null; + private Sleep sleep = null; + private Steps steps = null; + + public FitBit() throws Exception { + this(new AuthFITBIT()); + } + + public FitBit(AuthFITBIT auth) { + if(auth == null) + throw new NullPointerException("I must have an Auth for the FitBit"); + this.auth = auth; + } + + /* passi */ + //https://api.fitbit.com/1/user/-/activities/steps/date/today.json + public int getSteps() throws IOException { + if(shouldUpdateFor(Steps.class)) { + long currentMillisec = System.currentTimeMillis(); + + steps = auth.run(BASIC_URL + "1" + USER + "activities/steps/date/today.json", Steps.class); + latestRequest.put(steps.getClass(), currentMillisec); + } + return 0; + } + + /* battito */ + public double getHeartRate() throws IOException { + if(shouldUpdateFor(HeartRate.class)) { + long currentMillisec = System.currentTimeMillis(); + + String now = getHourMinutes(currentMillisec); + String ago = getHourMinutes(currentMillisec-(MINUTE*15)); + + if(now.compareTo(ago) < 0) + ago = "00:00"; + + heart = auth.run(BASIC_URL + "1" + USER + "activities/heart/date/today/1d/1sec/time/"+ago+"/"+now+".json", HeartRate.class); + latestRequest.put(heart.getClass(), currentMillisec); + } + return heart.getAverage(); + } + + /* sonno */ + public Object getHoursSleep() throws IOException { + if(shouldUpdateFor(Sleep.class)) { + long currentMillisec = System.currentTimeMillis(); + + sleep = auth.run(BASIC_URL + "1.2" + USER + "sleep/date/today.json", Sleep.class); + latestRequest.put(sleep.getClass(), currentMillisec); + } + return sleep.getMinutesAsleep(); + } + + private boolean shouldUpdateFor(Class type) { + try { + long current = System.currentTimeMillis(); + long latest = latestRequest.get(type); + + if (current - latest > MINUTE * 5) + return true; + return false; + } catch (NullPointerException e) {} + return true; + } + + private String getHourMinutes(long milliseconds) { + calendar.setTimeInMillis(milliseconds); + + int hour = calendar.get(Calendar.HOUR_OF_DAY); + int minu = calendar.get(Calendar.MINUTE); + return String.format("%02d:%02d", hour, minu); + } + + // Device dev = auth.run(BASIC_URL + "devices.json", Device.class); +} diff --git a/src/main/java/manage/FITBITData/HeartRate.java b/src/main/java/manage/FITBITData/HeartRate.java index 0e59062..584544a 100644 --- a/src/main/java/manage/FITBITData/HeartRate.java +++ b/src/main/java/manage/FITBITData/HeartRate.java @@ -9,8 +9,12 @@ import java.util.Map; @JsonIgnoreProperties(ignoreUnknown = true) public class HeartRate { - public String dateTime; - public double average; + private String dateTime; + private double average; + + public double getAverage() { + return average; + } @JsonProperty("activities-heart") public void quelloCheVoglio(Map[] activities){ @@ -18,12 +22,15 @@ public class HeartRate { } @JsonProperty("activities-heart-intraday") - public void qualcosAltro(Map map) { + public void setAverage(Map map) { List data = (List) map.get("dataset"); int sum = 0; for(Map dat: data) sum += (int)dat.get("value"); average = ((double)sum)/data.size(); + + if(data.size() == 0) + average = 0; } } diff --git a/src/main/java/manage/FITBITData/Sleep.java b/src/main/java/manage/FITBITData/Sleep.java index f7e1191..8e4eecc 100644 --- a/src/main/java/manage/FITBITData/Sleep.java +++ b/src/main/java/manage/FITBITData/Sleep.java @@ -3,10 +3,19 @@ package manage.FITBITData; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonProperty; +import java.util.Map; + @JsonIgnoreProperties(ignoreUnknown = true) public class Sleep { - public String time; + private int minutesAsleep; + public int getMinutesAsleep() { + return minutesAsleep; + } + @JsonProperty("summary") + public void setMinutesAsleep(Map map) { + minutesAsleep = (int) map.get("totalMinutesAsleep"); + } } diff --git a/src/main/java/manage/FITBITData/Steps.java b/src/main/java/manage/FITBITData/Steps.java new file mode 100644 index 0000000..f71461f --- /dev/null +++ b/src/main/java/manage/FITBITData/Steps.java @@ -0,0 +1,5 @@ +package manage.FITBITData; + +public class Steps { + +} From 8647649a6de9d2c5d7640bf51f847a729d14a58e Mon Sep 17 00:00:00 2001 From: Giacomo Date: Wed, 22 Aug 2018 19:23:10 +0200 Subject: [PATCH 7/7] Added Steps --- SeniorAssistant.iml | 30 ++++++++++++--------- src/main/java/Main.java | 3 +-- src/main/java/manage/AuthFITBIT.java | 15 ++++++----- src/main/java/manage/FITBITData/FitBit.java | 17 ++++++------ src/main/java/manage/FITBITData/Steps.java | 25 +++++++++++++++++ 5 files changed, 61 insertions(+), 29 deletions(-) diff --git a/SeniorAssistant.iml b/SeniorAssistant.iml index 306ea4c..405022e 100644 --- a/SeniorAssistant.iml +++ b/SeniorAssistant.iml @@ -1,13 +1,19 @@ - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/java/Main.java b/src/main/java/Main.java index 6878c2b..bc2c900 100644 --- a/src/main/java/Main.java +++ b/src/main/java/Main.java @@ -1,5 +1,4 @@ -import manage.AuthFITBIT; -import manage.FITBITData.*; +import manage.FITBITData.FitBit; public class Main { public static void main(String[] args) throws Exception { diff --git a/src/main/java/manage/AuthFITBIT.java b/src/main/java/manage/AuthFITBIT.java index df47eac..bf6e266 100644 --- a/src/main/java/manage/AuthFITBIT.java +++ b/src/main/java/manage/AuthFITBIT.java @@ -1,12 +1,20 @@ package manage; +import java.io.IOException; +import java.util.Arrays; + import com.fasterxml.jackson.databind.ObjectMapper; import com.google.api.client.auth.oauth2.AuthorizationCodeFlow; import com.google.api.client.auth.oauth2.BearerToken; import com.google.api.client.auth.oauth2.Credential; import com.google.api.client.extensions.java6.auth.oauth2.AuthorizationCodeInstalledApp; import com.google.api.client.extensions.jetty.auth.oauth2.LocalServerReceiver; -import com.google.api.client.http.*; +import com.google.api.client.http.BasicAuthentication; +import com.google.api.client.http.GenericUrl; +import com.google.api.client.http.HttpRequest; +import com.google.api.client.http.HttpRequestFactory; +import com.google.api.client.http.HttpResponse; +import com.google.api.client.http.HttpTransport; import com.google.api.client.http.javanet.NetHttpTransport; import com.google.api.client.json.GenericJson; import com.google.api.client.json.JsonFactory; @@ -14,11 +22,6 @@ import com.google.api.client.json.JsonObjectParser; import com.google.api.client.json.jackson2.JacksonFactory; import com.google.api.client.util.store.DataStoreFactory; import com.google.api.client.util.store.FileDataStoreFactory; -import manage.FITBITData.Device; - -import java.io.IOException; - -import java.util.*; public class AuthFITBIT { diff --git a/src/main/java/manage/FITBITData/FitBit.java b/src/main/java/manage/FITBITData/FitBit.java index 436e541..86666ee 100644 --- a/src/main/java/manage/FITBITData/FitBit.java +++ b/src/main/java/manage/FITBITData/FitBit.java @@ -1,12 +1,12 @@ package manage.FITBITData; -import manage.AuthFITBIT; - import java.io.IOException; import java.util.Calendar; import java.util.HashMap; import java.util.Map; +import manage.AuthFITBIT; + public class FitBit { public static final String BASIC_URL = "https://api.fitbit.com/"; @@ -14,7 +14,7 @@ public class FitBit { private static final long MINUTE = 60000; /* 5 minutes in millisec */ private final AuthFITBIT auth; - private final Map latestRequest = new HashMap<>(); + private final Map, Long> latestRequest = new HashMap<>(); private final Calendar calendar = Calendar.getInstance(); private HeartRate heart = null; @@ -32,15 +32,14 @@ public class FitBit { } /* passi */ - //https://api.fitbit.com/1/user/-/activities/steps/date/today.json public int getSteps() throws IOException { if(shouldUpdateFor(Steps.class)) { long currentMillisec = System.currentTimeMillis(); - - steps = auth.run(BASIC_URL + "1" + USER + "activities/steps/date/today.json", Steps.class); - latestRequest.put(steps.getClass(), currentMillisec); + + steps = auth.run(BASIC_URL + "1" + USER + "activities/steps/date/today/1w.json", Steps.class); + latestRequest.put(steps.getClass(), currentMillisec); } - return 0; + return steps.getSteps(); } /* battito */ @@ -71,7 +70,7 @@ public class FitBit { return sleep.getMinutesAsleep(); } - private boolean shouldUpdateFor(Class type) { + private boolean shouldUpdateFor(Class type) { try { long current = System.currentTimeMillis(); long latest = latestRequest.get(type); diff --git a/src/main/java/manage/FITBITData/Steps.java b/src/main/java/manage/FITBITData/Steps.java index f71461f..7d92a82 100644 --- a/src/main/java/manage/FITBITData/Steps.java +++ b/src/main/java/manage/FITBITData/Steps.java @@ -1,5 +1,30 @@ package manage.FITBITData; +import java.text.SimpleDateFormat; +import java.util.Date; +import java.util.Map; + +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonProperty; + +@JsonIgnoreProperties(ignoreUnknown = true) public class Steps { + private int steps=0; + + @JsonProperty("activities-steps") + public void setSteps(Map[] array) { + SimpleDateFormat sdfDate = new SimpleDateFormat("yyyy-MM-dd"); + Date now = new Date(); + String strDate = sdfDate.format(now); + + for(Map map : array) + if(map.get("dateTime").equals(strDate)) + steps = Integer.parseInt(map.get("value"))+1; + } + + public int getSteps() { + return steps; + } + }