StarlioX/main.py

75 lines
2.2 KiB
Python

import math
from bs4 import BeautifulSoup
import requests
import ctypes
import os
import urllib
from PIL import Image
from screeninfo import get_monitors
class Nasa:
def __init__(self):
self.url = "https://apod.nasa.gov/apod/"
self.headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_3) '
'AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36'}
self.photoName = "everydayphotonasa.jpg"
self.screen_size = (self.get_size_screen())
def download_photo(self):
full_page = requests.get(self.url, headers=self.headers)
soup = BeautifulSoup(full_page.content, 'html.parser')
for link in soup.select("img"):
lnk = link["src"]
print(f"Сохарняю картинку — {self.url + lnk}")
img = urllib.request.urlopen(self.url + lnk).read()
out = open(self.photoName, "wb")
out.write(img)
out.close()
def get_size_photo(self):
image = Image.open(self.photoName)
width, height = image.size
return width, height
def get_size_screen(self):
for m in get_monitors():
width = m.width
height = m.height
return width, height
def set_wallpaper(self):
path = os.path.abspath(self.photoName)
ctypes.windll.user32.SystemParametersInfoW(20, 0, path, 0)
def aspect_ratio(self, width, height):
k = math.gcd(width, height)
return width // k, height // k
def valid_image(self):
w_image, h_image = self.get_size_photo()
w_image, h_image = self.aspect_ratio(w_image, h_image)
w_screen, h_screen = self.aspect_ratio(self.screen_size[0], self.screen_size[1])
return w_image == w_screen and h_image == h_screen
def crop_image(self):
size_screen = self.get_size_screen()
img = Image.open(self.photoName)
img_crop = img.crop((0, 0, size_screen[0], size_screen[1]))
img_crop.save(self.photoName)
def start(self):
self.download_photo()
if not self.valid_image():
self.crop_image()
self.set_wallpaper()
if __name__ == "__main__":
nasa = Nasa()
nasa.start()