Code: Selecteer alles
#!/usr/bin/env python3
import requests
from urllib.parse import urlencode, parse_qs, splitquery
from datetime import datetime
import json
password = ""
username = ""
client_id = ""
client_secret = ""
def get_code(client_id, username, password):
url = "https://api3.stromer-portal.ch/users/login/"
s = requests.session()
res = s.get(url)
s.cookies
qs = urlencode(
{
"client_id": client_id,
"response_type": "code",
"redirect_url": "stromerauth://auth",
"scope": "bikeposition bikestatus bikeconfiguration bikelock biketheft bikedata bikepin bikeblink userprofile",
}
)
data = {
"password": password,
"username": username,
"csrfmiddlewaretoken": s.cookies.get("csrftoken"),
"next": "/o/authorize/?" + qs,
}
res = s.post(url, data=data, headers=dict(Referer=url), allow_redirects=False)
res = s.send(res.next, allow_redirects=False)
_, qs = splitquery(res.headers["Location"])
code = parse_qs(qs)["code"][0]
return code
def get_access_token(client_id, client_secret, code):
url = "https://api3.stromer-portal.ch//o/token/"
params = {
"grant_type": "authorization_code",
"client_id": client_id,
"client_secret": client_secret,
"code": code,
"redirect_uri": "stromerauth://auth",
}
res = requests.post(url, params=params)
return res.json()["access_token"]
def call_api(access_token, endpoint, params={}):
url = "https://api3.stromer-portal.ch/rapi/mobile/v2/%s" % endpoint
headers = {"Authorization": "Bearer %s" % access_token}
res = requests.get(url, headers=headers, params={})
data = res.json()["data"]
if isinstance(data, list):
return data[0]
else:
return data
def call_bike(access_token, bike, endpoint, cached = "true"):
endpoint = 'bike/%s/%s' % (bike["bikeid"], endpoint)
params = {'cached':'%s' % cached}
state = call_api(access_token, endpoint, params)
return state;
code = get_code(client_id, username, password)
access_token = get_access_token(client_id, client_secret, code)
bike = call_api(access_token, "bike")
print('bike:', json.dumps(bike, indent=True))
state = call_bike(access_token, bike, 'state/')
print('state:', json.dumps(state, indent=True))
position = call_bike(access_token, bike, 'position/')
print('position:', json.dumps(position, indent=True))