From 366112361e7446d0056d10df11536e632488e0b0 Mon Sep 17 00:00:00 2001 From: s13bby Date: Tue, 18 Aug 2026 23:48:36 +0600 Subject: [PATCH] transfer v0.01 --- main.py | 102 +++++++++++++++++++++++++++++++++++++++++++++++++++ setting.json | 16 ++++++++ 2 files changed, 118 insertions(+) create mode 100755 main.py create mode 100755 setting.json diff --git a/main.py b/main.py new file mode 100755 index 0000000..067ba95 --- /dev/null +++ b/main.py @@ -0,0 +1,102 @@ +import requests +import subprocess +import readchar +import os +import shutil +import random +import string +from bs4 import BeautifulSoup + +URL = 'https://wallhaven.cc' +TMP_DIR = ".tmp" + +def ping(): + try: + return requests.get(URL, timeout=5).status_code + except: + return 0 + +def find_walls(page_number): + if page_number < 1: + return [] + print(f"\n[Система] Загрузка списка обоев со страницы {page_number}...") + page = requests.get(f'{URL}/latest?page={page_number}') + content = BeautifulSoup(page.text, 'html.parser') + links = ["https:" + fig["data-src"] if fig["data-src"].startswith("//") else fig["data-src"] + for fig in content.find_all("img", class_='lazyload')] + return links + +def make_tmp_name(): + characters = string.ascii_letters + string.digits + return ''.join(random.choices(characters, k=10)) + ".jpg" + +def download_page_thumbnails(links): + paths = [] + if not os.path.exists(TMP_DIR): + os.mkdir(TMP_DIR) + + for link in links: + save_path = os.path.join(TMP_DIR, make_tmp_name()) + subprocess.run(['curl', '-s', '-o', save_path, link]) + paths.append(save_path) + return paths + +def print_wallpaper(file_path, page, pos, total_on_page): + os.system('clear') + print(f"--- Страница: {page} | Фото: {pos + 1} из {total_on_page} ---") + command = f'viu -h 25 "{file_path}"' + subprocess.run(command, shell=True) + print("\n[←/→] Фото | [↑/↓] Страницы | [Enter] Сохранить | [Esc] Выход") + +def main(): + if ping() != 200: + print("Сервер недоступен!") + return + + cache = {} + current_page = 1 + current_pos = 0 + + try: + while True: + if current_page not in cache: + links = find_walls(current_page) + if not links: + print("Обои не найдены на этой странице.") + current_page = max(1, current_page - 1) + continue + cache[current_page] = download_page_thumbnails(links) + + images = cache[current_page] + total_on_page = len(images) + + current_pos = max(0, min(current_pos, total_on_page - 1)) + + print_wallpaper(images[current_pos], current_page, current_pos, total_on_page) + + key = readchar.readkey() + + if key == readchar.key.RIGHT: + current_pos = (current_pos + 1) % total_on_page + elif key == readchar.key.LEFT: + current_pos = (current_pos - 1) % total_on_page + elif key == readchar.key.UP: + current_page += 1 + current_pos = 0 + elif key == readchar.key.DOWN: + if current_page > 1: + current_page -= 1 + current_pos = 0 + elif key == readchar.key.ESC: + break + elif key == readchar.key.ENTER: + print(f"\n[!] Файл {images[current_pos]} выбран для скачивания (нужно дописать логику).") + readchar.readkey() # Пауза + + finally: + if os.path.exists(TMP_DIR): + shutil.rmtree(TMP_DIR) + print("\nПрограмма завершена. Временные файлы удалены.") + +if __name__ == "__main__": + main() diff --git a/setting.json b/setting.json new file mode 100755 index 0000000..8f544e5 --- /dev/null +++ b/setting.json @@ -0,0 +1,16 @@ +{ + "settings": + { + "general": false, + "anime": true, + "people": false, + "sfw": true, + "sketchy": false, + "nsfw": false, + "ratio": "16:9", + "resolution": "1920x1080", + "color": "", + "api": "", + "folder for save": "wallpapers/" + } +}