def get_nightly_recharges(self): nightly_recharges = self.accesslink.nightly_recharge.list( access_token=self.config["access_token"]) if not nightly_recharges: print("No nightly recharges available.") return pretty_print_json(nightly_recharges)
def get_sleep_data(self): sleep_data = self.accesslink.sleep_data.list( access_token=self.config["access_token"]) if not sleep_data: print("No sleep data available.") return pretty_print_json(sleep_data)
def get_user_information(self): user_info = self.accesslink.users.get_information( user_id=self.config['user_id'], access_token=self.config['access_token']) print('==========\tUSER INFORMATION\t==========') utils.pretty_print_json(user_info) utils.save_json_to_file( user_info, f'user_data/user_data_{datetime.today().strftime("%Y-%m-%d")}.json' )
def get_daily_activity(self): transaction = self.accesslink.daily_activity.create_transaction(user_id=self.config["user_id"], access_token=self.config["access_token"]) if not transaction: print("No new daily activity available.") return resource_urls = transaction.list_activities()["activity-log"] for url in resource_urls: activity_summary = transaction.get_activity_summary(url) print("Activity summary:") pretty_print_json(activity_summary) transaction.commit()
def get_physical_info(self): transaction = self.accesslink.physical_info.create_transaction(user_id=self.config["user_id"], access_token=self.config["access_token"]) if not transaction: print("No new physical information available.") return resource_urls = transaction.list_physical_infos()["physical-informations"] for url in resource_urls: physical_info = transaction.get_physical_info(url) print("Physical info:") pretty_print_json(physical_info) transaction.commit()
def get_exercises(self): transaction = self.accesslink.training_data.create_transaction(user_id=self.config["user_id"], access_token=self.config["access_token"]) if not transaction: print("No new exercises available.") return resource_urls = transaction.list_exercises()["exercises"] for url in resource_urls: exercise_summary = transaction.get_exercise_summary(url) print("Exercise summary:") pretty_print_json(exercise_summary) transaction.commit()
def check_available_data(self): available_data = self.accesslink.pull_notifications.list() if not available_data: print("No new data available.") return print("Available data:") pretty_print_json(available_data) for item in available_data["available-user-data"]: if item["data-type"] == "EXERCISE": self.get_exercises() elif item["data-type"] == "ACTIVITY_SUMMARY": self.get_daily_activity() elif item["data-type"] == "PHYSICAL_INFORMATION": self.get_physical_info()
def get_exercises(self): transaction = self.accesslink.training_data.create_transaction( user_id=self.config['user_id'], access_token=self.config['access_token']) if not transaction: print('No new exercises available.') return resource_urls = transaction.list_exercises()['exercises'] for url in resource_urls: exercise_summary = transaction.get_exercise_summary(url) gpx_data = transaction.get_gpx(url) tcx_data = transaction.get_tcx(url) hr_data = transaction.get_heart_rate_zones(url) samples_data = transaction.get_available_samples(url) sample_data = transaction.get_samples(url) print('Exercise summary:') utils.pretty_print_json(exercise_summary) time = utils.polar_datetime_to_python_datetime_str( str(exercise_summary['start-time'])) utils.save_json_to_file( exercise_summary, f'exercises_data/summary_data_{time}.json') if gpx_data: # not empty dict. If there is no data, this variable will have '{}' value utils.save_json_to_file( utils.xml_to_dict(gpx_data), f'exercises_data/gpx_data_{time}.json') if tcx_data: utils.save_json_to_file( utils.xml_to_dict(tcx_data), f'exercises_data/tcx_data_{time}.json') if hr_data: utils.save_json_to_file(hr_data, f'exercises_data/hr_data_{time}.json') if samples_data: utils.save_json_to_file( samples_data, f'exercises_data/samples_data_{time}.json') if sample_data: utils.save_json_to_file( sample_data, f'exercises_data/sample_data_{time}.json') transaction.commit()
def check_available_data(self): available_data = self.accesslink.pull_notifications.list() print('==========\tDATA\t==========') if not available_data: print('No new data available.') return print('Available data:') utils.pretty_print_json(available_data) for item in available_data['available-user-data']: if item['data-type'] == 'EXERCISE': self.get_exercises() elif item['data-type'] == 'ACTIVITY_SUMMARY': self.get_daily_activity() elif item['data-type'] == 'PHYSICAL_INFORMATION': self.get_physical_info()
def request_graphql(self, operation: str, variables: dict = None, error_log: bool = True) -> dict: """Send a post request with your operation to a GraphQL api. Args: operation (str): GraphQL operation, either query (to retrieve data), mutation (to post data) or a subscription. variables (dict, optional): If the operation uses variables, send those as a dictionary with this arg. error_log (bool, optional): If True, catches and logs error in the response body. Does not raise an error. Important: This log refers to a valid request with an error as a response. If the request is invalid, this function raises a HTTPError which is independent from this argument. Returns: json: The response from the api-request. Raises: HTTPError: If request to GitHub api returns anything other than 2xx status code. """ response_raw = requests.post(self.base_url, headers=self.headers, json={ 'query': operation, 'variables': variables }) response_raw.raise_for_status() response = response_raw.json() # Even if response was 200 and a json was returned, the response may # still contain an error if the query was not correct. if error_log: if response.get('errors'): self._logger.debug('Your request returned an error: \n') pretty_print_json(response, logger=self._logger) return response
def get_daily_activity(self): transaction = self.accesslink.daily_activity.create_transaction( user_id=self.config['user_id'], access_token=self.config['access_token']) if not transaction: print('No new daily activity available.') return resource_urls = transaction.list_activities()['activity-log'] for url in resource_urls: activity_summary = transaction.get_activity_summary(url) print('Activity summary:') utils.pretty_print_json(activity_summary) utils.save_json_to_file( activity_summary, f'daily_activity_data/daily_activity_data_{str(activity_summary["date"])}.json' ) transaction.commit()
def get_nightly_recharge(self): # get latest nights recharge data from datetime import date today = date.today() d = today.strftime("%Y-%m-%d") nightly_recharge = self.accesslink.nightly_recharge.get_nightly_recharge( d, user_id=self.config["user_id"], access_token=self.config["access_token"]) #pretty_print_json(nightly_recharge) return pretty_print_json(nightly_recharge)
def get_physical_info(self): transaction = self.accesslink.physical_info.create_transaction( user_id=self.config['user_id'], access_token=self.config['access_token']) if not transaction: print('No new physical information available.') return resource_urls = transaction.list_physical_infos( )['physical-informations'] for url in resource_urls: physical_info = transaction.get_physical_info(url) print('Physical info:') utils.pretty_print_json(physical_info) time = utils.polar_datetime_to_python_datetime_str( str(physical_info['created'])) utils.save_json_to_file(physical_info, f'physical_data/physical_data{time}.json') transaction.commit()
def parseAndConvert(self): """Parse and convert gpx data files to geojson""" files = self.listFiles() coordinates = [] print('......................................') for f in files: print('Parse and convert datafile:',f) file = self.config['gpx']+'/'+f fileName = file.split('.')[0] fileName = fileName.split('/')[-1] root = ET.parse(self.config['gpx']+'/'+f).getroot() for child in root: for child in child: if 'trkseg' in child.tag: for child in child: coordinates.append([child.attrib['lon'],child.attrib['lat']]) geos = [] feature = { 'type': 'Feature', 'type': 'LineString', 'geometry': { 'type': 'LineString', 'coordinates': [[lon,lat] for lon,lat in coordinates] }, 'properties': { 'prop0': 'value0' } } geos.append(feature) geometries = { 'type': 'FeatureCollection', 'features': geos, } self.writeToFile(fileName, 'json', pretty_print_json(geometries)) print('......................................')
def get_recharge_info(self): recharge_info = self.accesslink.nightly_recharge.list_nightly_recharges( user_id=self.config["user_id"], access_token=self.config["access_token"]) pretty_print_json(recharge_info)
# Even if response was 200 and a json was returned, the response may # still contain an error if the query was not correct. if error_log: if response.get('errors'): self._logger.debug('Your request returned an error: \n') pretty_print_json(response, logger=self._logger) return response def get_marketplace_categories(self): query = ''' query get_marketplace_categories { marketplaceCategories { name primaryListingCount description } } ''' data = self.request_graphql(query) return data if __name__ == '__main__': graphql_client = GraphQLClient(base_url='https://api.github.com/graphql', token=github_personal_access_token) marketplace_categories = graphql_client.get_marketplace_categories() pretty_print_json(marketplace_categories)
def get_user_information(self): user_info = self.accesslink.users.get_information(user_id=self.config["user_id"], access_token=self.config["access_token"]) pretty_print_json(user_info)
def list_nightly_recharges(self): nightly_recharges = self.accesslink.nightly_recharge.list_nightly_recharges( user_id=self.config["user_id"], access_token=self.config["access_token"]) pretty_print_json(nightly_recharges)