Newer
Older
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
This module contains functions to query and parse JPL Horizons
on-line solar system data (see https://ssd-api.jpl.nasa.gov/doc/horizons.html).
"""
import re
import requests
import numpy as np
def query_data(input_file: str) -> str:
"""
Send request to the Horizons API with settings for the desired ephemeris results saved in an input file.
"""
with open(input_file, 'r') as f:
file = f.read()
url = "https://ssd.jpl.nasa.gov/api/horizons_file.api"
r = requests.post(url, data={'format': 'json'}, files={'input': file})
return r.json()['result']
def parse_output(output: str) -> np.ndarray:
"""
Parse output of API calls for positions and velocities
"""
output = list(filter(bool, output.split("\n")))
vector_list = [line.split(",") for line in output if line[1:4] == "XYZ"]
vector_list = [list(map(float, re.findall(r"[-+]?\d*\.?\d+(?:[Ee][-+]?\d+)?", i[0]))) for i in vector_list]
r = np.zeros((len(vector_list), 3), dtype=float)
v = np.zeros((len(vector_list), 3), dtype=float)
for i, vector in enumerate(vector_list):
r[i][0] = float(vector[0])
r[i][1] = float(vector[1])
r[i][2] = float(vector[2])
v[i][0] = float(vector[3])
v[i][1] = float(vector[4])
v[i][2] = float(vector[5])
return r, v