Skip to content

Instantly share code, notes, and snippets.

@tuukka
Forked from ejain/emfitqs.py
Created October 26, 2018 19:25
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tuukka/8e3a7111cd041e71686ca916cf876422 to your computer and use it in GitHub Desktop.
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.
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