Source code for komoog.komoot

# -*- coding: utf-8 -*-
"""
Obtaining tours and tour data from komoot.
Adapted from https://github.com/js-on/medium_komoot.
"""


import requests
import json
from komoog.paths import get_credentials, customdir
from komoog.io import write_tours, read_tours

import simplejson as json

[docs]def get_tours_and_session(): """ Returns a list of the user's tours on komoot and a ``requests.Session`` object. """ cred = get_credentials() email = cred['email'] password = cred['password'] client_id = cred['clientid'] login_url = "https://account.komoot.com/v1/signin" tour_url = f"https://www.komoot.de/user/{client_id}/tours" session = requests.Session() res = requests.get(login_url) cookies = res.cookies.get_dict() headers = { "Content-Type": "application/json" } payload = json.dumps({ "email": email, "password": password, "reason": "null" }) session.post(login_url, headers=headers, data=payload, cookies=cookies, ) url = "https://account.komoot.com/actions/transfer?type=signin" session.get(url) headers = {"onlyprops": "true"} response = session.get(tour_url, headers=headers) if response.status_code != 200: print("Something went wrong in the request...") print(response.text) exit(1) data = response.json() tours = data["user"]["_embedded"]["tours"]["_embedded"]["items"] return tours, session
[docs]def get_tour(tours,tour_id,session): """ Returns a tour including coordinates given a `tour_id` (position of the tour in `tours`). """ tour = tours[tour_id] tour_url = tour["_links"]["coordinates"]["href"] headers = {"onlyprops": "true"} response = session.get(tour_url, headers=headers) tour_data = json.loads(response.text) tour['coordinates'] = tour_data['items'] return tour
[docs]def download_all_komoot_tours(): """ Login with user credentials, download tour information and all tours. Tours will be saved in a custom directory. Tours can be passed to :func:`komoog.gpx.convert_tour_to_gpx_tracks` afterwards. """ tours, session = get_tours_and_session() tours = [ get_tour(tours, i, session) for i in range(len(tours)) ] write_tours(tours) return tours
[docs]def choose_komoot_tour_live(): """ Login with user credentials, download tour information, choose a tour, and download it. Can be passed to :func:`komoog.gpx.convert_tour_to_gpx_tracks` afterwards. """ tours, session = get_tours_and_session() for idx in range(len(tours)): print(f"({idx+1}) {tours[idx]['name']}") tour_id = int(input("Tour ID: ")) tour_id -= 1 tour = get_tour(tours,tour_id,session) return tour
[docs]def choose_downloaded_komoot_tour(): """ Choose a previously downloaded tour. Tour can be passed to :func:`komoog.gpx.convert_tour_to_gpx_tracks` afterwards. """ tours = read_tours() for idx in range(len(tours)): print(f"({idx+1}) {tours[idx]['name']}") tour_id = int(input("Tour ID: ")) tour_id -= 1 return tours[tour_id]
if __name__=="__main__": #choose_komoot_tour_live() download_all_komoot_tours() tour = choose_downloaded_komoot_tour()