"net/http"
"time"
- "github.com/octo/gfitsync/app"
+ "github.com/octo/kraftakt/app"
"golang.org/x/oauth2"
oauth2fitbit "golang.org/x/oauth2/fitbit"
"google.golang.org/appengine/log"
ClientSecret: "@FITBIT_CLIENT_SECRET@",
Endpoint: oauth2fitbit.Endpoint,
RedirectURL: "https://kraftakt.octo.it/fitbit/grant",
- Scopes: []string{"activity", "heartrate", "profile"},
+ Scopes: []string{
+ "activity",
+ "heartrate",
+ "profile",
+ "sleep",
+ },
}
const csrfToken = "@CSRFTOKEN@"
}
type Activity struct {
- ActivityID int `json:"activityId"`
- ActivityParentID int `json:"activityParentId"`
- Calories int `json:"calories"`
- Description string `json:"description"`
- Distance float64 `json:"distance"`
- Duration int `json:"duration"`
- HasStartTime bool `json:"hasStartTime"`
- IsFavorite bool `json:"isFavorite"`
- LogID int `json:"logId"`
- Name string `json:"name"`
- StartTime string `json:"startTime"`
- Steps int `json:"steps"`
+ ActivityID int `json:"activityId"`
+ ActivityParentID int `json:"activityParentId"`
+ ActivityParentName string `json:"activityParentName"`
+ Calories int `json:"calories"`
+ Description string `json:"description"`
+ Distance float64 `json:"distance"`
+ Duration int `json:"duration"`
+ HasStartTime bool `json:"hasStartTime"`
+ IsFavorite bool `json:"isFavorite"`
+ LastModified time.Time `json:"lastModified"`
+ LogID int `json:"logId"`
+ Name string `json:"name"`
+ StartTime string `json:"startTime"`
+ StartDate string `json:"startDate"`
+ Steps int `json:"steps"`
}
type Distance struct {
}, nil
}
-func (c *Client) ActivitySummary(ctx context.Context, t time.Time) (*ActivitySummary, error) {
+func (c *Client) ActivitySummary(ctx context.Context, date string) (*ActivitySummary, error) {
url := fmt.Sprintf("https://api.fitbit.com/1/user/%s/activities/date/%s.json",
- c.fitbitUserID, t.Format("2006-01-02"))
+ c.fitbitUserID, date)
res, err := c.client.Get(url)
if err != nil {
}
defer res.Body.Close()
- if res.StatusCode >= 400 {
+ if res.StatusCode >= 400 && res.StatusCode != http.StatusConflict {
data, _ := ioutil.ReadAll(res.Body)
log.Errorf(ctx, "creating subscription failed: status %d %q", res.StatusCode, data)
return fmt.Errorf("creating subscription failed")