transfer v0.01
This commit is contained in:
@@ -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()
|
||||
Executable
+16
@@ -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/"
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user