package heliumapi import ( "encoding/json" "fmt" "time" ) type Account struct { Data struct { Address string `json:"address"` Balance int `json:"balance"` Block int `json:"block"` DCBalance int `json:"dc_balance"` DCNonce int `json:"dc_nonce"` SECBalance int `json:"sec_balance"` SECNonce int `json:"sec_nonce"` SpeculativeNonce int `json:"speculative_nonce"` } `json:"data"` } type ActivityCounts struct { Data map[string]int } type RewardTotal struct { Meta struct { MinTime string `json:"min_time"` MaxTime string `json:"max_time"` } `json:"meta"` Data struct { Total float64 `json:"total"` Sum float64 `json:"sum"` Stddev float64 `json:"stddev"` Min float64 `json:"min"` Median float64 `json:"median"` Max float64 `json:"max"` Avg float64 `json:"avg"` } `json:"data"` } type AccountHotspots struct { Data []struct { Lng float64 `json:"lng"` Lat float64 `json:"lat"` TimestampAdded string `json:"timestamp_added"` Status struct { Timestamp string `json:"timestamp"` Online string `json:"online"` ListenAddrs []string Height int } `json:"status"` RewardScale float64 `json:"reward_scale"` Payer string `json:"payer"` Owner string `json:"owner"` Nonce int `json:"nonce"` Name string `json:"name"` Mode string `json:"mode"` LocationHex string `json:"location_hex"` Location string `json:"location"` LastPocChallenge int `json:"last_poc_challenge"` LastChangeBlock int `json:"last_change_block"` Geocode struct { ShortStreet string `json:"short_street"` ShortState string `json:"short_state"` ShortCountry string `json:"short_country"` ShortCity string `json:"short_city"` LongStreet string `json:"long_street"` LongState string `json:"long_state"` LongCountry string `json:"long_country"` LongCity string `json:"long_city"` CityID string `json:"city_id"` } `json:"geocode"` Gain int `json:"gain"` Elevation int `json:"elevation"` BlockAdded int `json:"block_added"` Block int `json:"block"` Address string `json:"address"` } `json:"data"` } func GetAccountForAddress(account string) (*Account, error) { path := "/v1/accounts/" + account // query the api respBody, err := getHeliumApi(path, nil) if err != nil { return nil, err } // unmarshal the response respobject := Account{} err = json.Unmarshal(respBody, &respobject) if err != nil { return nil, fmt.Errorf("failed to unmarshal response from path %v: %v", path, err) } return &respobject, nil } func GetActivityCountsForAccount(account string) (*ActivityCounts, error) { path := "/v1/accounts/" + account + "/activity/count" // query the api respBody, err := getHeliumApi(path, nil) if err != nil { return nil, err } // unmarshal the response respobject := ActivityCounts{} err = json.Unmarshal(respBody, &respobject) if err != nil { return nil, fmt.Errorf("failed to unmarshal response from path %v: %v", path, err) } return &respobject, nil } func GetRewardTotalsForAccount(account string, minTime *time.Time, maxTime *time.Time) (*RewardTotal, error) { path := "/v1/accounts/" + account + "/rewards/sum" params := map[string]string{} if minTime != nil { params["min_time"] = minTime.UTC().Format("2006-01-02T15:04:05Z") } if maxTime != nil { params["max_time"] = minTime.UTC().Format("2006-01-02T15:04:05Z") } // query the api respBody, err := getHeliumApi(path, ¶ms) if err != nil { return nil, err } // unmarshal the response respobject := RewardTotal{} err = json.Unmarshal(respBody, &respobject) if err != nil { return nil, fmt.Errorf("failed to unmarshal response from path %v: %v", path, err) } return &respobject, nil } func GetHotspotsForAccount(account string) (*AccountHotspots, error) { path := "/v1/accounts/" + account + "/hotspots" // query the api respBody, err := getHeliumApi(path, nil) if err != nil { return nil, err } // unmarshal the response respobject := AccountHotspots{} err = json.Unmarshal(respBody, &respobject) if err != nil { return nil, fmt.Errorf("failed to unmarshal response from path %v: %v", path, err) } return &respobject, nil }