import requests REFRESH_URL = 'https://openapi-login.planday.com/connect/token' SHIFTS_URL= "https://openapi.planday.com/scheduling/v1/shifts" class Planday(object): def __init__(self, client_id, refresh_token): self.client_id = client_id self.refresh_token = refresh_token self.access_token = None def refresh_access_token(self): data = {'client_id': self.client_id, 'grant_type': 'refresh_token', 'refresh_token': self.refresh_token} response = requests.post(REFRESH_URL, data=data) if response.status_code == 200: token_data = response.json() self.access_token = token_data['access_token'] else: print("Error refreshing access_token", response.status_code, response.text) def __get(self, url, params={}): response = requests.get(url, headers=self.get_headers(), params=params) if response.status_code == 401: self.refresh_access_token() response = requests.get(url, headers=self.get_headers(), params=params) return response def __get_json(self, url, params={}): response = self.__get(url, params=params) if response.status_code == 200: json = response.json() if 'paging' not in json: return json['data'] paging = json['paging'] if 'limit' in paging and 'total' in paging and \ paging['limit'] + (paging['offset'] if 'offset' in paging else 0) < paging['total']: params['offset'] = paging['limit'] + (paging['offset'] if 'offset' in paging else 0) return json['data'] + self.__get_json(url, params) return json['data'] print(response.json()) raise response def get_headers(self): return {'X-ClientId': self.client_id, 'Authorization': 'Bearer {0}'.format(self.access_token)} def get_shifts(self, to=None, from_=None): params={} if to != None: params['to'] = to if from_ != None: params['from'] = from_ return self.__get_json(SHIFTS_URL, params=params) def get_employee(self, employee_id): url = "https://openapi.planday.com/hr/v1/employees/{0}".format(employee_id) return self.__get_json(url) def get_employees(self): return self.__get_json("https://openapi.planday.com/hr/v1/employees/")