Python · 04.07.2025

Обновка для слайд-шоу

В очередной раз закрываю тему наполнения папки обоями с помощью Free Bing Image API. На сей раз кроссплатформа на Python (тег).

Наконец-то дошли руки продолжить тему стареньких постов (раз и два). Кстати, в последней статейке, в качестве эксперимента, я навертел на bash’е вполне приемлемую штуковину. Хотя и с зависимостью от jq.

Здесь более понятный бурелом:

# Get Bing Walls
title="GetBingWalls"
version="2.1.1.4"

# Импорт библиотек
import os
import requests
import platform
import ctypes
import sys
from pathlib import Path

# Функция установки заголовка окна
def set_console_title(title):
    if platform.system() == "Windows":
        ctypes.windll.kernel32.SetConsoleTitleW(title)
    else:
        print(f"\033]0;{title}\a", end='', flush=True)

# Получить текущую папку программы
def get_program_directory():
    # Для скомпилированного исполняемого файла
    if getattr(sys, 'frozen', False):
        # Если программа запущена как exe, возвращаем путь к исполняемому файлу
        program_dir = os.path.dirname(sys.executable)
    else:
        # Если программа запущена в обычном режиме (например, из .py)
        program_dir = os.path.dirname(os.path.abspath(__file__))
    return program_dir

# Основная функция
def get_bing_walls(save_directory):
    # Выведем данные об API в терминал
    print("Free Bing Image API")
    print("https://peapix.com/api")
    print("The images are provided for wallpaper use only.")
    print()
    print(f"coded by ngdream.ru | version: {version}")
    print()
    # URL API
    url = "https://peapix.com/bing/feed"
    # Папка с обоями
    dir = "bing"
    # Создать папку по указанному пути, если её нет, и перейти в неё
    wallpapers_directory = Path(save_directory) / dir
    wallpapers_directory.mkdir(parents=True, exist_ok=True)
    os.chdir(wallpapers_directory)
    # Получаем ссылки из JSON
    response = requests.get(url)
    response.raise_for_status()
    links = [item['imageUrl'] for item in response.json()]
    # Цикл скачивания файлов
    for link in links:
        # Получение имени файла из URL
        filename = os.path.basename(link)
        # Скачивание файла, если его нет в папке
        if not (wallpapers_directory / filename).is_file():
            print(f"Скачивается файл {link}...")
            img_data = requests.get(link).content
            with open(filename, 'wb') as handler:
                handler.write(img_data)

# Заголовок консоли
set_console_title(title)

# Запускаем функцию
try:
    get_bing_walls(get_program_directory())
except:
    print("Что-то пошло не так...")

Тестировал на Windows и Linux Mint 22. Версия Python 3.12.5.

Скрипт можно скомпилировать в exe с помощью auto-py-to-exe.