-
-
Save tuukka/8e3a7111cd041e71686ca916cf876422 to your computer and use it in GitHub Desktop.
Retrieves sleep presence records from Emfit QS, and merges the records into a single spreadsheet.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import io, re, requests, sys, time, zipfile | |
def get_device(token): | |
r = get("/api/v1/user/get", token) | |
device = r.json()["user"]["devices"] | |
print("Device: " + device, file = sys.stderr) | |
return device | |
def list_presences(token, device): | |
r = get("/api/v1/presence/{0}/latest".format(device), token) | |
presences = [ presence["id"] for presence in r.json()["navigation_data"] ] | |
print("Presences: {0}".format(len(presences)), file = sys.stderr) | |
return presences | |
def download_presence(token, id): | |
time.sleep(1) | |
r = get("/api/v1/presence/download/{0}".format(id), token, True) | |
z = zipfile.ZipFile(io.BytesIO(r.content)) | |
f = next(name for name in z.namelist() if re.match("[^-]+-presence-period-[\d\-\.]+\.csv", name)) | |
#002778-presence-period-2018-10-23--18.36-20.41.csv | |
print("Presence: {0} -> {1}".format(id, f), file = sys.stderr) | |
data = [ line.decode().replace("\n", "") for line in z.open(f, "r") ] | |
z.close() | |
return data | |
def get(path, token, stream = False): | |
r = requests.get("https://qs-api.emfit.com" + path, headers = { "Authorization" : "Bearer " + token }, stream = stream) | |
r.raise_for_status() | |
return r | |
def merge(records): | |
assert len(records) > 1 | |
merged = records[0] | |
for record in records[1:]: | |
merged.append(record[1]) | |
return merged | |
token = "xxx" | |
device = get_device(token) | |
presences = list_presences(token, device) | |
records = [ download_presence(token, presence) for presence in presences ] | |
print("\n".join(merge(records))) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment