Last active
November 19, 2018 16:44
-
-
Save wgaylord/49e7dd2cf5f52b92044f0b8939eb0c1c to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import requests | |
from datetime import datetime | |
import lxml.html | |
def MakeObservation(username,password,norad,transmitter,station,startTime,endTime): | |
loginUrl = "https://network.satnogs.org/accounts/login/" #login URL | |
session = requests.session() | |
login = session.get(loginUrl) #Get login page for CSFR token | |
login_html = lxml.html.fromstring(login.text) | |
login_hidden_inputs = login_html.xpath(r'//form//input[@type="hidden"]') #Get CSFR token | |
form = {x.attrib["name"]: x.attrib["value"] for x in login_hidden_inputs} | |
form["login"]=username | |
form["password"]=password | |
session.post(loginUrl,data=form,headers={'referer':loginUrl}).text #Login | |
obsURL = "https://network.satnogs.org/observations/new/" #Observation URL | |
obs = session.get(obsURL) #Get the observation/new/ page to get the CSFR token | |
obs_html = lxml.html.fromstring(obs.text) | |
hidden_inputs = obs_html.xpath(r'//form//input[@type="hidden"]') | |
form = {x.attrib["name"]: x.attrib["value"] for x in hidden_inputs} | |
form["satellite"]=norad | |
form["transmitter"]=transmitter | |
form["start-time"]=startTime | |
form["end-time"]=endTime | |
form["0-starting_time"] = startTime | |
form["0-ending_time"] = endTime | |
form["0-station"] = station | |
form["total"]=str(1) | |
session.post(obsURL,data=form,headers={'referer':obsURL}).text | |
#MakeObservation(USERNAME,PASSWORD,40967,"ZyjKNJ9KqnTHBCUzAPN5G5",41,"2018-11-19 07:38:28.000","2018-11-19 07:52:00.00") | |
#Directly from JS code | |
def checkOverlap(jobs,start,stop): | |
overlap = 0 | |
for x in jobs: | |
job_start = datetime.strptime(x["start"],"%Y-%m-%dT%H:%M:%SZ") | |
job_end = datetime.strptime(x["end"],"%Y-%m-%dT%H:%M:%SZ") | |
if(job_end < start): | |
continue | |
if(job_start > stop): | |
continue | |
if(job_start > start and job_start < stop): | |
overlap = round((((job_start-start).total_seconds())/((stop-start).total_seconds()))*100) | |
overlap = 100 - overlap | |
if(job_end > start and job_end < stop): | |
overlap = round((((stop-job_end).total_seconds())/((stop-start).total_seconds()))*100) | |
overlap = 100 - overlap | |
if(job_start < start and job_end > stop): | |
overlap = 100 | |
if(job_start == start and job_end == stop): | |
overlap = 100 | |
return overlap | |
def getNextPasses(station): | |
pass_list = [] | |
next_passes = requests.get("https://network.satnogs.org/pass_predictions/"+str(station),headers={'X-Requested-With': 'XMLHttpRequest'}).json()["nextpasses"] | |
jobs = requests.get("https://network.satnogs.org/api/jobs/?ground_station="+str(station)).json() | |
for x in next_passes: | |
passInfo = {} | |
passInfo["start"] = x["tr"].replace("T"," ") | |
passInfo["end"] = x["ts"].replace("T"," ") | |
passInfo["norad_cat_id"] = int(x["norad_cat_id"]) | |
passInfo["valid"] = x["valid"] | |
passInfo["name"] = x["name"] | |
passInfo["overlap"] = checkOverlap(jobs,datetime.strptime(x["tr"].split(".")[0],"%Y-%m-%dT%H:%M:%S"),datetime.strptime(x["ts"].split(".")[0],"%Y-%m-%dT%H:%M:%S")) | |
pass_list.append(passInfo) | |
return pass_list | |
def getBestTransmitters(norad): | |
data = requests.get("https://network.satnogs.org/transmitters/"+str(norad)).json()["transmitters"] | |
best = data[0] | |
trans = [] | |
for x in data: | |
if x["success_rate"] > best["success_rate"]: | |
best = x | |
trans.insert(0,x["uuid"]) | |
else: | |
trans.append(x["uuid"]) | |
return trans | |
def ReCalcOverlap(passes,station): | |
jobs = requests.get("https://network.satnogs.org/api/jobs/?ground_station="+str(station)).json() | |
new_pass_list = [] | |
for x in passes: | |
x["overlap"] = checkOverlap(jobs,datetime.strptime(passInfo["start"].split(".")[0],"%Y-%m-%d %H:%M:%S"),datetime.strptime(passInfo["end"].split(".")[0],"%Y-%m-%d %H:%M:%S")) | |
if x["overlap"] == 0: | |
new_pass_list.append(x) | |
return x | |
def getAllCompatableTransmitters(trans,station): | |
station = requests.get("https://network.satnogs.org/api/stations/"+str(station)).json() | |
goodTrans = [] | |
for x in trans: | |
transmitter = requests.get("https://db.satnogs.org/api/transmitters/"+x).json() | |
if "detail" in transmitter.keys(): | |
continue | |
for y in station["antenna"]: | |
if(transmitter["downlink_low"] < y["frequency_max"] and transmitter["downlink_low"] > y["frequency"]): | |
goodTrans.append(x) | |
break | |
return goodTrans |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment