package manage.FITBITData; 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/"; public static final String USER = "/user/-/"; private static final long MINUTE = 60000; /* 5 minutes in millisec */ private final AuthFITBIT auth; private final Map, Long> 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 */ public int getSteps() throws IOException { if(shouldUpdateFor(Steps.class)) { long currentMillisec = System.currentTimeMillis(); steps = auth.run(BASIC_URL + "1" + USER + "activities/steps/date/today/1w.json", Steps.class); latestRequest.put(steps.getClass(), currentMillisec); } return steps.getSteps(); } /* 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); }