parent
4d2b8a4152
commit
afc8c2d784
|
@ -1,7 +1,10 @@
|
||||||
certifi==2018.11.29
|
certifi==2023.11.17
|
||||||
chardet==3.0.4
|
chardet==5.2.0
|
||||||
idna==2.8
|
charset-normalizer==3.3.2
|
||||||
Pillow==5.3.0
|
idna==3.6
|
||||||
pytz==2018.7
|
packaging==23.2
|
||||||
requests==2.21.0
|
Pillow==10.1.0
|
||||||
urllib3==1.24.1
|
pip-review==1.3.0
|
||||||
|
pytz==2023.3.post1
|
||||||
|
requests==2.31.0
|
||||||
|
urllib3==2.1.0
|
||||||
|
|
57
update.py
57
update.py
|
@ -10,52 +10,60 @@ from PIL import ImageDraw
|
||||||
|
|
||||||
from io import BytesIO
|
from io import BytesIO
|
||||||
|
|
||||||
|
|
||||||
FONT_SIZE = 40
|
FONT_SIZE = 40
|
||||||
TEXT_COLOR = (255, 255, 255, 255)
|
TEXT_COLOR = (255, 255, 255, 255)
|
||||||
|
|
||||||
|
|
||||||
def invert_back_white(img):
|
def invert_back_white(img):
|
||||||
pixels = img.load()
|
pixels = img.load()
|
||||||
for y in range(img.size[1]):
|
for y in range(img.size[1]):
|
||||||
for x in range(img.size[0]):
|
for x in range(img.size[0]):
|
||||||
r,g,b, _ = pixels[x,y]
|
r, g, b, _ = pixels[x, y]
|
||||||
if abs(r - g) < 5 and abs(r - g) < 5 and abs(b - g) < 5:
|
if abs(r - g) < 5 and abs(r - g) < 5 and abs(b - g) < 5:
|
||||||
pixels[x,y] = (255 - r, 255 - g, 255 - b, 255)
|
pixels[x, y] = (255 - r, 255 - g, 255 - b, 255)
|
||||||
|
|
||||||
|
|
||||||
def scale_to_height(img, new_height):
|
def scale_to_height(img, new_height):
|
||||||
width, height = img.size
|
width, height = img.size
|
||||||
new_width = int(new_height * width / height)
|
new_width = int(new_height * width / height)
|
||||||
return img.resize((new_width, new_height), Image.ANTIALIAS)
|
return img.resize((new_width, new_height))
|
||||||
|
|
||||||
|
|
||||||
def scale_to_width(img, new_width):
|
def scale_to_width(img, new_width):
|
||||||
width, height = img.size
|
width, height = img.size
|
||||||
new_height = int(new_width * height / width)
|
new_height = int(new_width * height / width)
|
||||||
return img.resize((new_width, new_height), Image.ANTIALIAS)
|
return img.resize((new_width, new_height))
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
now = datetime.now(pytz.utc)
|
now = datetime.now(pytz.utc)
|
||||||
earlier = now - timedelta(hours=1)
|
earlier = now - timedelta(hours=1)
|
||||||
|
|
||||||
params = {'start' : earlier.isoformat(), 'end' : now.isoformat() }
|
params = {
|
||||||
resp = requests.get('https://network.satnogs.org/api/data/', params=params)
|
'start': earlier.isoformat(),
|
||||||
|
'end': now.isoformat(),
|
||||||
|
'status': 'good',
|
||||||
|
}
|
||||||
|
resp = requests.get('https://network.satnogs.org/api/observations',
|
||||||
|
params=params)
|
||||||
|
|
||||||
obs = resp.json()
|
obs = resp.json()
|
||||||
obs = reversed(sorted(obs, key=lambda x: x['end']))
|
obs = reversed(sorted(obs, key=lambda x: x['end']))
|
||||||
|
|
||||||
for ob in obs:
|
for ob in obs:
|
||||||
if ob['waterfall'] != None:
|
if ob['waterfall'] is not None:
|
||||||
break
|
break
|
||||||
|
|
||||||
if ob['waterfall'] == None:
|
if ob['waterfall'] is None:
|
||||||
print("No waterfall found")
|
print("No observations with waterfall found")
|
||||||
return
|
return
|
||||||
|
|
||||||
resp = requests.get('https://db.satnogs.org/api/satellites/%s/' % ob['norad_cat_id'])
|
resp = requests.get('https://db.satnogs.org/api/satellites/%s/' %
|
||||||
|
ob['norad_cat_id'])
|
||||||
|
|
||||||
sat_name = resp.json()['name']
|
sat_name = resp.json()['name']
|
||||||
sat_img_url = resp.json()['image']
|
sat_img_url = "https://db-satnogs.freetls.fastly.net/media/%s" % (resp.json()['image'])
|
||||||
|
print(sat_img_url)
|
||||||
|
|
||||||
mode_desc = ob['transmitter_mode']
|
mode_desc = ob['transmitter_mode']
|
||||||
|
|
||||||
|
@ -71,25 +79,30 @@ def main():
|
||||||
invert_back_white(logo)
|
invert_back_white(logo)
|
||||||
|
|
||||||
sat_img = None
|
sat_img = None
|
||||||
if sat_img_url != None:
|
if sat_img_url is not None and sat_img_url != '':
|
||||||
resp = requests.get(sat_img_url)
|
resp = requests.get(sat_img_url)
|
||||||
sat_img = Image.open(BytesIO(resp.content)).convert('RGBA')
|
sat_img_aplha = Image.open(BytesIO(resp.content)).convert('RGBA')
|
||||||
|
|
||||||
|
alpha_chan = sat_img_aplha.convert('RGBA').split()[-1]
|
||||||
|
sat_img = Image.new("RGBA", sat_img_aplha.size, (255,255, 255, 255))
|
||||||
|
sat_img.paste(sat_img_aplha, mask=alpha_chan)
|
||||||
|
|
||||||
sat_img = scale_to_width(sat_img, 500)
|
sat_img = scale_to_width(sat_img, 500)
|
||||||
|
|
||||||
img = Image.new('RGBA', (1280,1024))
|
|
||||||
|
|
||||||
|
img = Image.new('RGBA', (1280, 1024))
|
||||||
draw = ImageDraw.Draw(img)
|
draw = ImageDraw.Draw(img)
|
||||||
draw.rectangle((0, 0, 1280, 1024), fill=(0, 0, 0, 255))
|
draw.rectangle((0, 0, 1280, 1024), fill=(0, 0, 0, 255))
|
||||||
|
|
||||||
station_name = ob['station_name']
|
station_name = ob['station_name']
|
||||||
if len(station_name) > 20:
|
if len(station_name) > 20:
|
||||||
station_name = station_name[:20] + "..."
|
station_name = station_name[:20] + "..."
|
||||||
infos = "Satellite: %s\nStation: %s\nMode: %s\nStart: %s\nEnd: %s" % (sat_name, station_name, mode_desc, ob['start'], ob['end'])
|
infos = "Satellite: %s\nStation: %s\nMode: %s\nStart: %s\nEnd: %s" % (
|
||||||
|
sat_name, station_name, mode_desc, ob['start'], ob['end'])
|
||||||
|
|
||||||
font = ImageFont.truetype("Montserrat-Regular.otf", FONT_SIZE)
|
font = ImageFont.truetype("Montserrat-Regular.otf", FONT_SIZE)
|
||||||
draw.text((water_width + 100, logo_h+50),
|
draw.text((water_width + 100, logo_h + 50), infos, TEXT_COLOR, font=font)
|
||||||
infos,
|
|
||||||
TEXT_COLOR,
|
|
||||||
font=font)
|
|
||||||
|
|
||||||
img.paste(waterfall, (0, 0))
|
img.paste(waterfall, (0, 0))
|
||||||
img.paste(logo, (water_width + 100, 20))
|
img.paste(logo, (water_width + 100, 20))
|
||||||
|
|
Loading…
Reference in New Issue