#!/usr/bin/python import requests, json, pickle, os.path, svgwrite URL = "https://directory.spaceapi.io/" NORTHERNMOST = 55.05 EASTERNMOST = 15.033333 SOUTHERNMOST = 47.270108 WESTERNMOST = 5.866667 YSPAN = NORTHERNMOST - SOUTHERNMOST XSPAN = EASTERNMOST - WESTERNMOST locations = {} if os.path.isfile('locations.bin'): print ("using offline data...") with open("locations.bin", "rb") as f: locations = pickle.load(f) else: print ("offline data not available, downloading...,") r = requests.get(url = URL) data = r.json() for space in data: spacerequest = None try: spacerequest = requests.get(url = data[space], timeout=1) except requests.exceptions.RequestException as e: # This is the correct syntax continue try: spacedata = spacerequest.json() except json.JSONDecodeError as jde: continue if "location" in spacedata: if "lat" in spacedata["location"]: lat = spacedata["location"]["lat"] lon = spacedata["location"]["lon"] locations[space] = [float(lat), float(lon)] for space in locations: print (space + " " + str(locations[space])) with open("locations.bin", "wb") as f: pickle.dump(locations, f, pickle.HIGHEST_PROTOCOL) print ("Removing non-german points...") german_locations = locations.copy() for space in locations: if locations[space][0] > NORTHERNMOST: del german_locations[space] print ("kicked " + space + " too far north") elif locations[space][0] < SOUTHERNMOST: del german_locations[space] print ("kicked " + space + " too far south") elif locations[space][1] < WESTERNMOST: del german_locations[space] print ("kicked " + space + " too far west") elif locations[space][1] > EASTERNMOST: del german_locations[space] print ("kicked " + space + " too far east") dwg = svgwrite.Drawing('svgwrite-example.svg', profile='tiny') dwg.add(svgwrite.image.Image(href="Karte_Deutschland.svg", size=(572,770))) dwg.add(dwg.circle(center=(0,0), r=3, fill='black')) for space in german_locations: ypoint = (770 - (((german_locations[space][0] - SOUTHERNMOST) / YSPAN)* 770)) dwg.add(dwg.circle(center=(((locations[space][1] - WESTERNMOST) / XSPAN) * 572, ypoint), r=1, fill='black')) dwg.save()